// 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::basic::traits::NegativeInfinity; use malachite_base::num::exhaustive::primitive_float_increasing_range; use malachite_base::test_util::num::exhaustive::*; use std::panic::catch_unwind; fn primitive_float_increasing_range_helper( a: T, b: T, first_20: &[T], last_20: &[T], ) { exhaustive_primitive_floats_helper_helper_with_reverse( primitive_float_increasing_range::(a, b), first_20, last_20, ); } #[allow(clippy::approx_constant)] #[test] fn test_primitive_float_increasing_range() { primitive_float_increasing_range_helper::(1.0, 1.0, &[], &[]); primitive_float_increasing_range_helper::( 1.0, 2.0, &[ 1.0, 1.0000001, 1.0000002, 1.0000004, 1.0000005, 1.0000006, 1.0000007, 1.0000008, 1.000001, 1.0000011, 1.0000012, 1.0000013, 1.0000014, 1.0000015, 1.0000017, 1.0000018, 1.0000019, 1.000002, 1.0000021, 1.0000023, ], &[ 1.9999976, 1.9999977, 1.9999979, 1.999998, 1.9999981, 1.9999982, 1.9999983, 1.9999985, 1.9999986, 1.9999987, 1.9999988, 1.9999989, 1.999999, 1.9999992, 1.9999993, 1.9999994, 1.9999995, 1.9999996, 1.9999998, 1.9999999, ], ); primitive_float_increasing_range_helper::( -0.1, 0.1, &[ -0.1, -0.099999994, -0.09999999, -0.09999998, -0.09999997, -0.099999964, -0.09999996, -0.09999995, -0.09999994, -0.099999934, -0.09999993, -0.09999992, -0.09999991, -0.099999905, -0.0999999, -0.09999989, -0.09999988, -0.099999875, -0.09999987, -0.09999986, ], &[ 0.09999985, 0.09999986, 0.09999987, 0.099999875, 0.09999988, 0.09999989, 0.0999999, 0.099999905, 0.09999991, 0.09999992, 0.09999993, 0.099999934, 0.09999994, 0.09999995, 0.09999996, 0.099999964, 0.09999997, 0.09999998, 0.09999999, 0.099999994, ], ); primitive_float_increasing_range_helper::( core::f32::consts::E, core::f32::consts::PI, &[ core::f32::consts::E, 2.718282, 2.7182822, 2.7182825, 2.7182827, 2.718283, 2.7182832, 2.7182834, 2.7182837, 2.718284, 2.7182841, 2.7182844, 2.7182846, 2.7182848, 2.718285, 2.7182853, 2.7182856, 2.7182858, 2.718286, 2.7182863, ], &[ 3.141588, 3.1415882, 3.1415884, 3.1415887, 3.141589, 3.1415892, 3.1415894, 3.1415896, 3.1415899, 3.14159, 3.1415904, 3.1415906, 3.1415908, 3.141591, 3.1415913, 3.1415915, 3.1415918, 3.141592, 3.1415923, 3.1415925, ], ); primitive_float_increasing_range_helper::( 100.0, 101.0, &[ 100.0, 100.00001, 100.000015, 100.00002, 100.00003, 100.00004, 100.000046, 100.00005, 100.00006, 100.00007, 100.00008, 100.000084, 100.00009, 100.0001, 100.00011, 100.000114, 100.00012, 100.00013, 100.00014, 100.000145, ], &[ 100.99985, 100.999855, 100.99986, 100.99987, 100.99988, 100.999886, 100.99989, 100.9999, 100.99991, 100.999916, 100.99992, 100.99993, 100.99994, 100.99995, 100.999954, 100.99996, 100.99997, 100.99998, 100.999985, 100.99999, ], ); primitive_float_increasing_range_helper::( 1.0e38, f32::INFINITY, &[ 1.0e38, 1.0000001e38, 1.0000002e38, 1.0000003e38, 1.0000004e38, 1.0000005e38, 1.0000006e38, 1.0000007e38, 1.0000008e38, 1.0000009e38, 1.000001e38, 1.0000011e38, 1.0000012e38, 1.0000013e38, 1.0000014e38, 1.0000015e38, 1.0000016e38, 1.0000017e38, 1.0000018e38, 1.0000019e38, ], &[ 3.4028196e38, 3.4028198e38, 3.40282e38, 3.4028202e38, 3.4028204e38, 3.4028206e38, 3.4028208e38, 3.402821e38, 3.4028212e38, 3.4028214e38, 3.4028216e38, 3.4028218e38, 3.402822e38, 3.4028222e38, 3.4028225e38, 3.4028227e38, 3.4028229e38, 3.402823e38, 3.4028233e38, 3.4028235e38, ], ); primitive_float_increasing_range_helper::( -f32::MIN_POSITIVE_SUBNORMAL, f32::MIN_POSITIVE_SUBNORMAL, &[-1.0e-45, -0.0, 0.0], &[-1.0e-45, -0.0, 0.0], ); primitive_float_increasing_range_helper::( -0.0, f32::MIN_POSITIVE_SUBNORMAL, &[-0.0, 0.0], &[-0.0, 0.0], ); primitive_float_increasing_range_helper::( 0.0, f32::MIN_POSITIVE_SUBNORMAL, &[0.0], &[0.0], ); primitive_float_increasing_range_helper::( -f32::MIN_POSITIVE_SUBNORMAL, -0.0, &[-1.0e-45], &[-1.0e-45], ); primitive_float_increasing_range_helper::( -f32::MIN_POSITIVE_SUBNORMAL, 0.0, &[-1.0e-45, -0.0], &[-1.0e-45, -0.0], ); primitive_float_increasing_range_helper::( f32::NEGATIVE_INFINITY, f32::INFINITY, &[ f32::NEGATIVE_INFINITY, -3.4028235e38, -3.4028233e38, -3.402823e38, -3.4028229e38, -3.4028227e38, -3.4028225e38, -3.4028222e38, -3.402822e38, -3.4028218e38, -3.4028216e38, -3.4028214e38, -3.4028212e38, -3.402821e38, -3.4028208e38, -3.4028206e38, -3.4028204e38, -3.4028202e38, -3.40282e38, -3.4028198e38, ], &[ 3.4028196e38, 3.4028198e38, 3.40282e38, 3.4028202e38, 3.4028204e38, 3.4028206e38, 3.4028208e38, 3.402821e38, 3.4028212e38, 3.4028214e38, 3.4028216e38, 3.4028218e38, 3.402822e38, 3.4028222e38, 3.4028225e38, 3.4028227e38, 3.4028229e38, 3.402823e38, 3.4028233e38, 3.4028235e38, ], ); primitive_float_increasing_range_helper::( f32::NEGATIVE_INFINITY, f32::NEGATIVE_INFINITY, &[], &[], ); primitive_float_increasing_range_helper::(f32::INFINITY, f32::INFINITY, &[], &[]); primitive_float_increasing_range_helper::(0.0, 0.0, &[], &[]); primitive_float_increasing_range_helper::(-0.0, -0.0, &[], &[]); primitive_float_increasing_range_helper::(-0.0, 0.0, &[-0.0], &[-0.0]); primitive_float_increasing_range_helper::(1.0, 1.0, &[], &[]); primitive_float_increasing_range_helper::( 1.0, 2.0, &[ 1.0, 1.0000000000000002, 1.0000000000000004, 1.0000000000000007, 1.0000000000000009, 1.000000000000001, 1.0000000000000013, 1.0000000000000016, 1.0000000000000018, 1.000000000000002, 1.0000000000000022, 1.0000000000000024, 1.0000000000000027, 1.0000000000000029, 1.000000000000003, 1.0000000000000033, 1.0000000000000036, 1.0000000000000038, 1.000000000000004, 1.0000000000000042, ], &[ 1.9999999999999956, 1.9999999999999958, 1.999999999999996, 1.9999999999999962, 1.9999999999999964, 1.9999999999999967, 1.999999999999997, 1.9999999999999971, 1.9999999999999973, 1.9999999999999976, 1.9999999999999978, 1.999999999999998, 1.9999999999999982, 1.9999999999999984, 1.9999999999999987, 1.999999999999999, 1.9999999999999991, 1.9999999999999993, 1.9999999999999996, 1.9999999999999998, ], ); primitive_float_increasing_range_helper::( -0.1, 0.1, &[ -0.1, -0.09999999999999999, -0.09999999999999998, -0.09999999999999996, -0.09999999999999995, -0.09999999999999994, -0.09999999999999992, -0.09999999999999991, -0.0999999999999999, -0.09999999999999988, -0.09999999999999987, -0.09999999999999985, -0.09999999999999984, -0.09999999999999983, -0.09999999999999981, -0.0999999999999998, -0.09999999999999978, -0.09999999999999977, -0.09999999999999976, -0.09999999999999974, ], &[ 0.09999999999999973, 0.09999999999999974, 0.09999999999999976, 0.09999999999999977, 0.09999999999999978, 0.0999999999999998, 0.09999999999999981, 0.09999999999999983, 0.09999999999999984, 0.09999999999999985, 0.09999999999999987, 0.09999999999999988, 0.0999999999999999, 0.09999999999999991, 0.09999999999999992, 0.09999999999999994, 0.09999999999999995, 0.09999999999999996, 0.09999999999999998, 0.09999999999999999, ], ); primitive_float_increasing_range_helper::( core::f64::consts::E, core::f64::consts::PI, &[ core::f64::consts::E, 2.7182818284590455, 2.718281828459046, 2.7182818284590464, 2.718281828459047, 2.7182818284590473, 2.7182818284590478, 2.718281828459048, 2.7182818284590486, 2.718281828459049, 2.7182818284590495, 2.71828182845905, 2.7182818284590504, 2.718281828459051, 2.7182818284590513, 2.7182818284590518, 2.718281828459052, 2.7182818284590526, 2.718281828459053, 2.7182818284590535, ], &[ 3.1415926535897842, 3.1415926535897847, 3.141592653589785, 3.1415926535897856, 3.141592653589786, 3.1415926535897865, 3.141592653589787, 3.1415926535897873, 3.141592653589788, 3.1415926535897882, 3.1415926535897887, 3.141592653589789, 3.1415926535897896, 3.14159265358979, 3.1415926535897905, 3.141592653589791, 3.1415926535897913, 3.141592653589792, 3.1415926535897922, 3.1415926535897927, ], ); primitive_float_increasing_range_helper::( 100.0, 101.0, &[ 100.0, 100.00000000000001, 100.00000000000003, 100.00000000000004, 100.00000000000006, 100.00000000000007, 100.00000000000009, 100.0000000000001, 100.00000000000011, 100.00000000000013, 100.00000000000014, 100.00000000000016, 100.00000000000017, 100.00000000000018, 100.0000000000002, 100.00000000000021, 100.00000000000023, 100.00000000000024, 100.00000000000026, 100.00000000000027, ], &[ 100.99999999999972, 100.99999999999973, 100.99999999999974, 100.99999999999976, 100.99999999999977, 100.99999999999979, 100.9999999999998, 100.99999999999982, 100.99999999999983, 100.99999999999984, 100.99999999999986, 100.99999999999987, 100.99999999999989, 100.9999999999999, 100.99999999999991, 100.99999999999993, 100.99999999999994, 100.99999999999996, 100.99999999999997, 100.99999999999999, ], ); primitive_float_increasing_range_helper::( 1.0e308, f64::INFINITY, &[ 1.0e308, 1.0000000000000002e308, 1.0000000000000004e308, 1.0000000000000006e308, 1.0000000000000008e308, 1.000000000000001e308, 1.0000000000000012e308, 1.0000000000000014e308, 1.0000000000000016e308, 1.0000000000000018e308, 1.000000000000002e308, 1.0000000000000022e308, 1.0000000000000024e308, 1.0000000000000026e308, 1.0000000000000028e308, 1.000000000000003e308, 1.0000000000000032e308, 1.0000000000000034e308, 1.0000000000000036e308, 1.0000000000000038e308, ], &[ 1.797693134862312e308, 1.7976931348623121e308, 1.7976931348623123e308, 1.7976931348623125e308, 1.7976931348623127e308, 1.797693134862313e308, 1.7976931348623131e308, 1.7976931348623133e308, 1.7976931348623135e308, 1.7976931348623137e308, 1.797693134862314e308, 1.7976931348623141e308, 1.7976931348623143e308, 1.7976931348623145e308, 1.7976931348623147e308, 1.797693134862315e308, 1.7976931348623151e308, 1.7976931348623153e308, 1.7976931348623155e308, 1.7976931348623157e308, ], ); primitive_float_increasing_range_helper::( -f64::MIN_POSITIVE_SUBNORMAL, f64::MIN_POSITIVE_SUBNORMAL, &[-5.0e-324, -0.0, 0.0], &[-5.0e-324, -0.0, 0.0], ); primitive_float_increasing_range_helper::( -0.0, f64::MIN_POSITIVE_SUBNORMAL, &[-0.0, 0.0], &[-0.0, 0.0], ); primitive_float_increasing_range_helper::( 0.0, f64::MIN_POSITIVE_SUBNORMAL, &[0.0], &[0.0], ); primitive_float_increasing_range_helper::( -f64::MIN_POSITIVE_SUBNORMAL, -0.0, &[-5.0e-324], &[-5.0e-324], ); primitive_float_increasing_range_helper::( -f64::MIN_POSITIVE_SUBNORMAL, 0.0, &[-5.0e-324, -0.0], &[-5.0e-324, -0.0], ); primitive_float_increasing_range_helper::( f64::NEGATIVE_INFINITY, f64::INFINITY, &[ f64::NEGATIVE_INFINITY, -1.7976931348623157e308, -1.7976931348623155e308, -1.7976931348623153e308, -1.7976931348623151e308, -1.797693134862315e308, -1.7976931348623147e308, -1.7976931348623145e308, -1.7976931348623143e308, -1.7976931348623141e308, -1.797693134862314e308, -1.7976931348623137e308, -1.7976931348623135e308, -1.7976931348623133e308, -1.7976931348623131e308, -1.797693134862313e308, -1.7976931348623127e308, -1.7976931348623125e308, -1.7976931348623123e308, -1.7976931348623121e308, ], &[ 1.797693134862312e308, 1.7976931348623121e308, 1.7976931348623123e308, 1.7976931348623125e308, 1.7976931348623127e308, 1.797693134862313e308, 1.7976931348623131e308, 1.7976931348623133e308, 1.7976931348623135e308, 1.7976931348623137e308, 1.797693134862314e308, 1.7976931348623141e308, 1.7976931348623143e308, 1.7976931348623145e308, 1.7976931348623147e308, 1.797693134862315e308, 1.7976931348623151e308, 1.7976931348623153e308, 1.7976931348623155e308, 1.7976931348623157e308, ], ); primitive_float_increasing_range_helper::( f64::NEGATIVE_INFINITY, f64::NEGATIVE_INFINITY, &[], &[], ); primitive_float_increasing_range_helper::(f64::INFINITY, f64::INFINITY, &[], &[]); primitive_float_increasing_range_helper::(0.0, 0.0, &[], &[]); primitive_float_increasing_range_helper::(-0.0, -0.0, &[], &[]); primitive_float_increasing_range_helper::(-0.0, 0.0, &[-0.0], &[-0.0]); } fn primitive_float_increasing_range_fail_helper() { assert_panic!(primitive_float_increasing_range::(T::ONE, T::ZERO)); assert_panic!(primitive_float_increasing_range::(T::ONE, T::NAN)); } #[test] fn primitive_float_increasing_range_fail() { apply_fn_to_primitive_floats!(primitive_float_increasing_range_fail_helper); }