fastnum2 0.3.2

fork of Fast decimal numbers library
Documentation
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;