// Copyright © 2024 Mikhail Hogrefe
//
// This file is part of Malachite.
//
// Malachite is free software: you can redistribute it and/or modify it under the terms of the GNU
// Lesser General Public License (LGPL) as published by the Free Software Foundation; either version
// 3 of the License, or (at your option) any later version. See .
use malachite_base::num::basic::floats::PrimitiveFloat;
use malachite_base::num::exhaustive::exhaustive_primitive_floats_with_sci_exponent_and_precision;
use malachite_base::test_util::num::exhaustive::*;
use std::panic::catch_unwind;
fn exhaustive_primitive_floats_with_sci_exponent_and_precision_helper(
sci_exponent: i64,
precision: u64,
out: &[T],
) {
exhaustive_primitive_floats_helper_helper_with_limit(
20,
exhaustive_primitive_floats_with_sci_exponent_and_precision::(sci_exponent, precision),
out,
);
}
#[test]
fn test_exhaustive_primitive_floats_with_sci_exponent_and_precision() {
exhaustive_primitive_floats_with_sci_exponent_and_precision_helper::(0, 1, &[1.0]);
exhaustive_primitive_floats_with_sci_exponent_and_precision_helper::(0, 2, &[1.5]);
exhaustive_primitive_floats_with_sci_exponent_and_precision_helper::(0, 3, &[1.25, 1.75]);
exhaustive_primitive_floats_with_sci_exponent_and_precision_helper::(
0,
4,
&[1.125, 1.375, 1.625, 1.875],
);
exhaustive_primitive_floats_with_sci_exponent_and_precision_helper::(
0,
5,
&[1.0625, 1.1875, 1.3125, 1.4375, 1.5625, 1.6875, 1.8125, 1.9375],
);
exhaustive_primitive_floats_with_sci_exponent_and_precision_helper::(4, 1, &[16.0]);
exhaustive_primitive_floats_with_sci_exponent_and_precision_helper::(4, 2, &[24.0]);
exhaustive_primitive_floats_with_sci_exponent_and_precision_helper::(4, 3, &[20.0, 28.0]);
exhaustive_primitive_floats_with_sci_exponent_and_precision_helper::(
4,
4,
&[18.0, 22.0, 26.0, 30.0],
);
exhaustive_primitive_floats_with_sci_exponent_and_precision_helper::(
4,
5,
&[17.0, 19.0, 21.0, 23.0, 25.0, 27.0, 29.0, 31.0],
);
exhaustive_primitive_floats_with_sci_exponent_and_precision_helper::(-4, 1, &[0.0625]);
exhaustive_primitive_floats_with_sci_exponent_and_precision_helper::(-4, 2, &[0.09375]);
exhaustive_primitive_floats_with_sci_exponent_and_precision_helper::(
-4,
3,
&[0.078125, 0.109375],
);
exhaustive_primitive_floats_with_sci_exponent_and_precision_helper::(
-4,
4,
&[0.0703125, 0.0859375, 0.1015625, 0.1171875],
);
exhaustive_primitive_floats_with_sci_exponent_and_precision_helper::(
-4,
5,
&[
0.06640625, 0.07421875, 0.08203125, 0.08984375, 0.09765625, 0.10546875, 0.11328125,
0.12109375,
],
);
exhaustive_primitive_floats_with_sci_exponent_and_precision_helper::(-149, 1, &[1.0e-45]);
exhaustive_primitive_floats_with_sci_exponent_and_precision_helper::(-148, 1, &[3.0e-45]);
exhaustive_primitive_floats_with_sci_exponent_and_precision_helper::(-148, 2, &[4.0e-45]);
exhaustive_primitive_floats_with_sci_exponent_and_precision_helper::(-147, 1, &[6.0e-45]);
exhaustive_primitive_floats_with_sci_exponent_and_precision_helper::(-147, 2, &[8.0e-45]);
exhaustive_primitive_floats_with_sci_exponent_and_precision_helper::(
-147,
3,
&[7.0e-45, 1.0e-44],
);
exhaustive_primitive_floats_with_sci_exponent_and_precision_helper::(0, 1, &[1.0]);
exhaustive_primitive_floats_with_sci_exponent_and_precision_helper::(0, 2, &[1.5]);
exhaustive_primitive_floats_with_sci_exponent_and_precision_helper::(0, 3, &[1.25, 1.75]);
exhaustive_primitive_floats_with_sci_exponent_and_precision_helper::(
0,
4,
&[1.125, 1.375, 1.625, 1.875],
);
exhaustive_primitive_floats_with_sci_exponent_and_precision_helper::(
0,
5,
&[1.0625, 1.1875, 1.3125, 1.4375, 1.5625, 1.6875, 1.8125, 1.9375],
);
exhaustive_primitive_floats_with_sci_exponent_and_precision_helper::(4, 1, &[16.0]);
exhaustive_primitive_floats_with_sci_exponent_and_precision_helper::(4, 2, &[24.0]);
exhaustive_primitive_floats_with_sci_exponent_and_precision_helper::(4, 3, &[20.0, 28.0]);
exhaustive_primitive_floats_with_sci_exponent_and_precision_helper::(
4,
4,
&[18.0, 22.0, 26.0, 30.0],
);
exhaustive_primitive_floats_with_sci_exponent_and_precision_helper::(
4,
5,
&[17.0, 19.0, 21.0, 23.0, 25.0, 27.0, 29.0, 31.0],
);
exhaustive_primitive_floats_with_sci_exponent_and_precision_helper::(-4, 1, &[0.0625]);
exhaustive_primitive_floats_with_sci_exponent_and_precision_helper::(-4, 2, &[0.09375]);
exhaustive_primitive_floats_with_sci_exponent_and_precision_helper::(
-4,
3,
&[0.078125, 0.109375],
);
exhaustive_primitive_floats_with_sci_exponent_and_precision_helper::(
-4,
4,
&[0.0703125, 0.0859375, 0.1015625, 0.1171875],
);
exhaustive_primitive_floats_with_sci_exponent_and_precision_helper::(
-4,
5,
&[
0.06640625, 0.07421875, 0.08203125, 0.08984375, 0.09765625, 0.10546875, 0.11328125,
0.12109375,
],
);
exhaustive_primitive_floats_with_sci_exponent_and_precision_helper::(
-1074,
1,
&[5.0e-324],
);
exhaustive_primitive_floats_with_sci_exponent_and_precision_helper::(
-1073,
1,
&[1.0e-323],
);
exhaustive_primitive_floats_with_sci_exponent_and_precision_helper::(
-1073,
2,
&[1.5e-323],
);
exhaustive_primitive_floats_with_sci_exponent_and_precision_helper::(
-1072,
1,
&[2.0e-323],
);
exhaustive_primitive_floats_with_sci_exponent_and_precision_helper::(
-1072,
2,
&[3.0e-323],
);
exhaustive_primitive_floats_with_sci_exponent_and_precision_helper::(
-1072,
3,
&[2.5e-323, 3.5e-323],
);
}
fn exhaustive_primitive_floats_with_sci_exponent_and_precision_fail_helper() {
assert_panic!(exhaustive_primitive_floats_with_sci_exponent_and_precision::(0, 0));
assert_panic!(exhaustive_primitive_floats_with_sci_exponent_and_precision::(0, 100));
assert_panic!(exhaustive_primitive_floats_with_sci_exponent_and_precision::(10000, 1));
assert_panic!(exhaustive_primitive_floats_with_sci_exponent_and_precision::(-10000, 1));
assert_panic!(
exhaustive_primitive_floats_with_sci_exponent_and_precision::(T::MIN_EXPONENT, 2)
);
}
#[test]
fn exhaustive_primitive_floats_with_sci_exponent_and_precision_fail() {
apply_fn_to_primitive_floats!(
exhaustive_primitive_floats_with_sci_exponent_and_precision_fail_helper
);
}