macro_rules! to_float {
(TO $f: ident, $dec: ident, $D: ident) => {
#[rstest(::trace)]
#[case(0., $dec!(0))]
#[case(0., $dec!(0.0))]
#[case(0., $dec!(0.000))]
#[case(0., $dec!(0e1))]
#[case(0., $dec!(0e2))]
#[case(0., $dec!(0e3))]
#[case(0., $dec!(0e5))]
#[case(0., $dec!(0e7))]
#[case(0.15625, $dec!(0.15625))]
#[case(0.25, $dec!(0.25))]
#[case(0.033203125, $dec!(0.033203125))]
#[case(0.5, $dec!(0.5))]
#[case(1.0, $dec!(1.0))]
#[case(1., $dec!(1.0))]
#[case(1e0, $dec!(1))]
#[case(1.5, $dec!(1.5))]
#[case(2.0, $dec!(2))]
#[case(2e0, $dec!(2))]
#[case(3.0, $dec!(3.0))]
#[case(4.0, $dec!(4))]
#[case(4.5, $dec!(4.5))]
#[case(5.0, $dec!(5))]
#[case(6.0, $dec!(6))]
#[case(6e0, $dec!(6))]
#[case(7.0, $dec!(7))]
#[case(7e0, $dec!(7))]
#[case(7.5, $dec!(7.5))]
#[case(8.0, $dec!(8))]
#[case(9.0, $dec!(9))]
#[case(10.0, $dec!(10))]
#[case(1e01, $dec!(10))]
#[case(11.0, $dec!(11))]
#[case(12.0, $dec!(12))]
#[case(13.0, $dec!(13))]
#[case(14.0, $dec!(14))]
#[case(15.0, $dec!(15))]
#[case(16.0, $dec!(16))]
#[case(17.0, $dec!(17))]
#[case(18.0, $dec!(18))]
#[case(19.0, $dec!(19))]
#[case(20.0, $dec!(20))]
#[case(21.0, $dec!(21))]
#[case(22.0, $dec!(22))]
#[case(23.0, $dec!(23))]
#[case(24.0, $dec!(24))]
#[case(24e0, $dec!(24))]
#[case(25.0, $dec!(25))]
#[case(26.0, $dec!(26))]
#[case(26e0, $dec!(26))]
#[case(3e01, $dec!(30))]
#[case(3e1, $dec!(30))]
#[case(50., $dec!(50))]
#[case(51.0, $dec!(51))]
#[case(68.0, $dec!(68))]
#[case(69.0, $dec!(69))]
#[case(87.0, $dec!(87))]
#[case(1e2, $dec!(100))]
#[case(100.0, $dec!(100))]
#[case(10e1, $dec!(100))]
#[case(124.0, $dec!(124))]
#[case(125.0, $dec!(125))]
#[case(207.0, $dec!(207))]
#[case(320.0, $dec!(320))]
#[case(412.0, $dec!(412))]
#[case(500.0, $dec!(500))]
#[case(501.0, $dec!(501))]
#[case(936.0, $dec!(936))]
#[case(1000.0, $dec!(1000))]
#[case(1999.0, $dec!(1999))]
#[case(2000.0, $dec!(2000))]
#[case(5854.0, $dec!(5854))]
#[case(5880.0, $dec!(5880))]
#[case(5899.0, $dec!(5899))]
#[case(8000.0, $dec!(8000))]
#[case(8001.0, $dec!(8001))]
#[case(9000.0, $dec!(9000))]
#[case(9999.0, $dec!(9999))]
#[case(10000.0, $dec!(10000))]
#[case(5e4, $dec!(50000))]
#[case(50305.0, $dec!(50305))]
#[case(80000.0, $dec!(80000))]
#[case(9e4, $dec!(90000))]
#[case(90080.0, $dec!(90080))]
#[case(99999.0, $dec!(99999))]
#[case(100000.0, $dec!(100000))]
#[case(200000.0, $dec!(200000))]
#[case(400000.0, $dec!(400000))]
#[case(50e4, $dec!(500000))]
#[case(700000.0, $dec!(700000))]
#[case(777777.0, $dec!(777777))]
#[case(800000.0, $dec!(800000))]
#[case(9e5, $dec!(900000))]
#[case(999999.0, $dec!(999999))]
#[case(1000000.0, $dec!(1000000))]
#[case(2e6, $dec!(2000000))]
#[case(2033197.0, $dec!(2033197))]
#[case(2045182.0, $dec!(2045182))]
#[case(2222222.0, $dec!(2222222))]
#[case(3e6, $dec!(3000000))]
#[case(4000000.0, $dec!(4000000))]
#[case(4034772.0, $dec!(4034772))]
#[case(4969414.0, $dec!(4969414))]
#[case(4981478.0, $dec!(4981478))]
#[case(5000000.0, $dec!(5000000))]
#[case(6000000.0, $dec!(6000000))]
#[case(6960207.0, $dec!(6960207))]
#[case(6990614.0, $dec!(6990614))]
#[case(7e6, $dec!(7000000))]
#[case(7777777.0, $dec!(7777777))]
#[case(7802447.0, $dec!(7802447))]
#[case(7965404.0, $dec!(7965404))]
#[case(7971781.0, $dec!(7971781))]
#[case(8000000.0, $dec!(8000000))]
#[case(8990205.0, $dec!(8990205))]
#[case(8997915.0, $dec!(8997915))]
#[case(90e5, $dec!(9000000))]
#[case(9999999.0, $dec!(9999999))]
#[case(1e7, $dec!(10000000))]
#[case(11111111.0, $dec!(11111111))]
#[case(11576319.0, $dec!(11576319))]
#[case(22222222.0, $dec!(22222222))]
#[case(22359806.0, $dec!(22359806))]
#[case(29408062.0, $dec!(29408062))]
#[case(3e7, $dec!(30000000))]
#[case(30260046.0, $dec!(30260046))]
#[case(30560258.0, $dec!(30560258))]
#[case(30661534.0, $dec!(30661534))]
#[case(31899682.0, $dec!(31899682))]
#[case(32276798.0, $dec!(32276798))]
#[case(33229960.0, $dec!(33229960))]
#[case(33723784.0, $dec!(33723784))]
#[case(34894840.0, $dec!(34894840))]
#[case(35e6, $dec!(35000000))]
#[case(35716724.0, $dec!(35716724))]
#[case(36090916.0, $dec!(36090916))]
#[case(36113404.0, $dec!(36113404))]
#[case(36251260.0, $dec!(36251260))]
#[case(36319780.0, $dec!(36319780))]
#[case(38040692.0, $dec!(38040692))]
#[case(40000000.0, $dec!(40000000))]
#[case(40158172.0, $dec!(40158172))]
#[case(40173744.0, $dec!(40173744))]
#[case(40445652.0, $dec!(40445652))]
#[case(40642e3, $dec!(40642000))]
#[case(40800000.0, $dec!(40800000))]
#[case(41000000.0, $dec!(41000000))]
#[case(41078812.0, $dec!(41078812))]
#[case(41514172.0, $dec!(41514172))]
#[case(44e6, $dec!(44000000))]
#[case(44444444.0, $dec!(44444444))]
#[case(450187e2, $dec!(45018700))]
#[case(45812296.0, $dec!(45812296))]
#[case(4650e4, $dec!(46500000))]
#[case(46729e03, $dec!(46729000))]
#[case(47107924.0, $dec!(47107924))]
#[case(47385048.0, $dec!(47385048))]
#[case(4751e4, $dec!(47510000))]
#[case(47577948.0, $dec!(47577948))]
#[case(487e5, $dec!(48700000))]
#[case(50000000.0, $dec!(50000000))]
#[case(5e7, $dec!(50000000))]
#[case(50172572.0, $dec!(50172572))]
#[case(51028396.0, $dec!(51028396))]
#[case(51302332.0, $dec!(51302332))]
#[case(53146328.0, $dec!(53146328))]
#[case(54e6, $dec!(54000000))]
#[case(55e6, $dec!(55000000))]
#[case(56000244.0, $dec!(56000244))]
#[case(58547448.0, $dec!(58547448))]
#[case(59539680.0, $dec!(59539680))]
#[case(59846e3, $dec!(59846000))]
#[case(60e6, $dec!(60000000))]
#[case(6e7, $dec!(60000000))]
#[case(60965384.0, $dec!(60965384))]
#[case(62757456.0, $dec!(62757456))]
#[case(63e6, $dec!(63000000))]
#[case(64e6, $dec!(64000000))]
#[case(64441808.0, $dec!(64441808))]
#[case(650e5, $dec!(65000000))]
#[case(651213e2, $dec!(65121300))]
#[case(66076400.0, $dec!(66076400))]
#[case(66737e3, $dec!(66737000))]
#[case(68300424.0, $dec!(68300424))]
#[case(69555144.0, $dec!(69555144))]
#[case(70e6, $dec!(70000000))]
#[case(70516656.0, $dec!(70516656))]
#[case(71e6, $dec!(71000000))]
#[case(71352512.0, $dec!(71352512))]
#[case(72890080.0, $dec!(72890080))]
#[case(74095920.0, $dec!(74095920))]
#[case(75499016.0, $dec!(75499016))]
#[case(75801648.0, $dec!(75801648))]
#[case(76400000.0, $dec!(76400000))]
#[case(79413272.0, $dec!(79413272))]
#[case(80000000.0, $dec!(80000000))]
#[case(80e6, $dec!(80000000))]
#[case(8e7, $dec!(80000000))]
#[case(84037448.0, $dec!(84037448))]
#[case(86189216.0, $dec!(86189216))]
#[case(87867832.0, $dec!(87867832))]
#[case(88888888.0, $dec!(88888888))]
#[case(89748360.0, $dec!(89748360))]
#[case(90364256.0, $dec!(90364256))]
#[case(90966848.0, $dec!(90966848))]
#[case(95092224.0, $dec!(95092224))]
#[case(95437272.0, $dec!(95437272))]
#[case(97233152.0, $dec!(97233152))]
#[case(98520472.0, $dec!(98520472))]
#[case(98968000.0, $dec!(98968000))]
#[case(994e5, $dec!(99400000))]
#[case(100000000.0, $dec!(100000000))]
#[case(10e7, $dec!(100000000))]
#[case(1e8, $dec!(100000000))]
#[case(146121952.0, $dec!(146121952))]
#[case(3e8, $dec!(300000000))]
#[case(4e8, $dec!(400000000))]
#[case(480000000.0, $dec!(480000000))]
#[case(500000000.0, $dec!(500000000))]
#[case(590966848.0, $dec!(590966848))]
#[case(7e8, $dec!(700000000))]
#[case(718e6, $dec!(718000000))]
#[case(72e7, $dec!(720000000))]
#[case(7426e5, $dec!(742600000))]
#[case(800000000.0, $dec!(800000000))]
#[case(832e6, $dec!(832000000))]
#[case(9e08, $dec!(900000000))]
#[case(9e8, $dec!(900000000))]
#[case(91e07, $dec!(910000000))]
#[case(96e7, $dec!(960000000))]
#[case(98e7, $dec!(980000000))]
#[case(1e9, $dec!(1000000000))]
#[case(2e09, $dec!(2000000000))]
#[case(2147483648.0, $dec!(2147483648))]
#[case(25e8, $dec!(2500000000))]
#[case(4e9, $dec!(4000000000))]
#[case(5e09, $dec!(5000000000))]
#[case(5e9, $dec!(5000000000))]
#[case(70e8, $dec!(7000000000))]
#[case(80e8, $dec!(8000000000))]
#[case(8e9, $dec!(8000000000))]
#[case(1e10, $dec!(10000000000))]
#[case(40000000000.0, $dec!(40000000000))]
#[case(573440e5, $dec!(57344000000))]
#[case(9007199254740992.0, $dec!(9007199254740992))]
fn test_to(#[case] expected: $f, #[case] d: $D) {
let f = $f::try_from(d).unwrap();
assert_eq!(f.integer_decode(), expected.integer_decode());
}
};
(TO INF $f: ident, $dec: ident, $D: ident) => {
#[rstest(::trace)]
#[case($D::MAX)]
#[case($D::INFINITY)]
fn test_to_inf(#[case] d: $D) {
let f = $f::try_from(d).unwrap();
assert!(f.is_infinite());
}
};
(TO NEG INF $f: ident, $dec: ident, $D: ident) => {
#[rstest(::trace)]
#[case($D::MIN)]
#[case($D::NEG_INFINITY)]
fn test_to_neg_inf(#[case] d: $D) {
let f = $f::try_from(d).unwrap();
assert!(f.is_infinite());
assert!(f.is_sign_negative());
}
};
(TO NAN $f: ident, $dec: ident, $D: ident) => {
#[rstest(::trace)]
#[case($D::NAN)]
fn test_to_nan(#[case] d: $D) {
let f = $f::try_from(d).unwrap();
assert!(f.is_nan());
}
};
(TO S $f: ident, $dec: ident, $D: ident) => {
#[rstest(::trace)]
#[case(-0., $dec!(-0))]
#[case(-0.0, $dec!(-0))]
#[case(-1., $dec!(-1.0))]
#[case(-1.0, $dec!(-1.0))]
#[case(-2.0, $dec!(-2.0))]
#[case(-3.0, $dec!(-3.0))]
#[case(-0.5, $dec!(-0.5))]
#[case(-0.25, $dec!(-0.25))]
#[case(-7.5, $dec!(-7.5))]
#[case(-50., $dec!(-50))]
#[case(-1234., $dec!(-1234))]
#[case(-50000., $dec!(-50000))]
#[case(-5.0 * 0.03125, $dec!(-0.15625))]
#[case(-0.033203125, $dec!(-0.033203125))]
#[case(-4.5, $dec!(-4.5))]
#[case(-0.15625, $dec!(-0.15625))]
#[case(-1401757440., $dec!(-1401757440))]
#[case(-10000000., $dec!(-10000000))]
fn test_to_signed(#[case] expected: $f, #[case] d: $D) {
let f = $f::try_from(d).unwrap();
assert_eq!(f.integer_decode(), expected.integer_decode());
}
};
}
pub(crate) use to_float;