//! The following is a series of tests that check conversions between every combination of sample //! types available within this crate. //! //! We assert that each sample type's minimum, maximum and centre are correctly converted to the //! min, max and centre of every other available sample type. extern crate sample; /// Expands to an `assert_eq` for each pre-conversion and post-conversion pair. /// /// Literals that must be wrapped by a custom sample type are wrapped using $T/$U::new_unchecked. macro_rules! conv_cmp { ($fn_name:ident, $pre_conv:expr, $post_conv:expr) => { assert_eq!($fn_name($pre_conv), $post_conv); }; ($fn_name:ident: $U:ident, $pre_conv:expr, $post_conv:expr) => { assert_eq!($fn_name($pre_conv), $U::new_unchecked($post_conv)); }; ($T:ident; $fn_name:ident, $pre_conv:expr, $post_conv:expr) => { assert_eq!($fn_name($T::new_unchecked($pre_conv)), $post_conv); }; ($T:ident; $fn_name:ident: $U:ident, $pre_conv:expr, $post_conv:expr) => { assert_eq!($fn_name($T::new_unchecked($pre_conv)), $U::new_unchecked($post_conv)); }; } /// Expands to a list of `assert_eq` statements. macro_rules! conv_cmps { ($fn_name:ident, $pre_conv:expr, $post_conv:expr; $($rest:tt)*) => { conv_cmp!($fn_name, $pre_conv, $post_conv); conv_cmps!($fn_name, $($rest)*); }; ($fn_name:ident: $U:ident, $pre_conv:expr, $post_conv:expr; $($rest:tt)*) => { conv_cmp!($fn_name:$U, $pre_conv, $post_conv); conv_cmps!($fn_name:$U, $($rest)*); }; ($T:ident; $fn_name:ident, $pre_conv:expr, $post_conv:expr; $($rest:tt)*) => { conv_cmp!($T; $fn_name, $pre_conv, $post_conv); conv_cmps!($T; $fn_name, $($rest)*); }; ($T:ident; $fn_name:ident: $U:ident, $pre_conv:expr, $post_conv:expr; $($rest:tt)*) => { conv_cmp!($T; $fn_name:$U, $pre_conv, $post_conv); conv_cmps!($T; $fn_name:$U, $($rest)*); }; ($fn_name:ident,) => {}; ($fn_name:ident: $U:ident,) => {}; ($T:ident; $fn_name:ident,) => {}; ($T:ident; $fn_name:ident: $U:ident,) => {}; } /// Expands to a test function for the given test function name. /// /// We must use one for each as: /// 1. There is no concat-idents macro for constructing unique names from other identifiers and /// 2. We need to check for functions that convert to custom sample types (i.e. to_i24 converts to /// `I24`). macro_rules! test_fn { (to_i8 { $($conv_cmps:tt)* }) => { #[test] fn test_to_i8() { conv_cmps!(to_i8, $($conv_cmps)*); } }; (to_i16 { $($conv_cmps:tt)* }) => { #[test] fn test_to_i16() { conv_cmps!(to_i16, $($conv_cmps)*); } }; (to_i24 { $($conv_cmps:tt)* }) => { #[test] fn test_to_i24() { conv_cmps!(to_i24: I24, $($conv_cmps)*); } }; (to_i32 { $($conv_cmps:tt)* }) => { #[test] fn test_to_i32() { conv_cmps!(to_i32, $($conv_cmps)*); } }; (to_i48 { $($conv_cmps:tt)* }) => { #[test] fn test_to_i48() { conv_cmps!(to_i48: I48, $($conv_cmps)*); } }; (to_i64 { $($conv_cmps:tt)* }) => { #[test] fn test_to_i64() { conv_cmps!(to_i64, $($conv_cmps)*); } }; (to_u8 { $($conv_cmps:tt)* }) => { #[test] fn test_to_u8() { conv_cmps!(to_u8, $($conv_cmps)*); } }; (to_u16 { $($conv_cmps:tt)* }) => { #[test] fn test_to_u16() { conv_cmps!(to_u16, $($conv_cmps)*); } }; (to_u24 { $($conv_cmps:tt)* }) => { #[test] fn test_to_u24() { conv_cmps!(to_u24: U24, $($conv_cmps)*); } }; (to_u32 { $($conv_cmps:tt)* }) => { #[test] fn test_to_u32() { conv_cmps!(to_u32, $($conv_cmps)*); } }; (to_u48 { $($conv_cmps:tt)* }) => { #[test] fn test_to_u48() { conv_cmps!(to_u48: U48, $($conv_cmps)*); } }; (to_u64 { $($conv_cmps:tt)* }) => { #[test] fn test_to_u64() { conv_cmps!(to_u64, $($conv_cmps)*); } }; (to_f32 { $($conv_cmps:tt)* }) => { #[test] fn test_to_f32() { conv_cmps!(to_f32, $($conv_cmps)*); } }; (to_f64 { $($conv_cmps:tt)* }) => { #[test] fn test_to_f64() { conv_cmps!(to_f64, $($conv_cmps)*); } }; // Test functions for wrapper sample types. ($T:ident: to_i8 { $($conv_cmps:tt)* }) => { #[test] fn test_to_i8() { conv_cmps!($T; to_i8, $($conv_cmps)*); } }; ($T:ident: to_i16 { $($conv_cmps:tt)* }) => { #[test] fn test_to_i16() { conv_cmps!($T; to_i16, $($conv_cmps)*); } }; ($T:ident: to_i24 { $($conv_cmps:tt)* }) => { #[test] fn test_to_i24() { conv_cmps!($T; to_i24: I24, $($conv_cmps)*); } }; ($T:ident: to_i32 { $($conv_cmps:tt)* }) => { #[test] fn test_to_i32() { conv_cmps!($T; to_i32, $($conv_cmps)*); } }; ($T:ident: to_i48 { $($conv_cmps:tt)* }) => { #[test] fn test_to_i48() { conv_cmps!($T; to_i48: I48, $($conv_cmps)*); } }; ($T:ident: to_i64 { $($conv_cmps:tt)* }) => { #[test] fn test_to_i64() { conv_cmps!($T; to_i64, $($conv_cmps)*); } }; ($T:ident: to_u8 { $($conv_cmps:tt)* }) => { #[test] fn test_to_u8() { conv_cmps!($T; to_u8, $($conv_cmps)*); } }; ($T:ident: to_u16 { $($conv_cmps:tt)* }) => { #[test] fn test_to_u16() { conv_cmps!($T; to_u16, $($conv_cmps)*); } }; ($T:ident: to_u24 { $($conv_cmps:tt)* }) => { #[test] fn test_to_u24() { conv_cmps!($T; to_u24: U24, $($conv_cmps)*); } }; ($T:ident: to_u32 { $($conv_cmps:tt)* }) => { #[test] fn test_to_u32() { conv_cmps!($T; to_u32, $($conv_cmps)*); } }; ($T:ident: to_u48 { $($conv_cmps:tt)* }) => { #[test] fn test_to_u48() { conv_cmps!($T; to_u48: U48, $($conv_cmps)*); } }; ($T:ident: to_u64 { $($conv_cmps:tt)* }) => { #[test] fn test_to_u64() { conv_cmps!($T; to_u64, $($conv_cmps)*); } }; ($T:ident: to_f32 { $($conv_cmps:tt)* }) => { #[test] fn test_to_f32() { conv_cmps!($T; to_f32, $($conv_cmps)*); } }; ($T:ident: to_f64 { $($conv_cmps:tt)* }) => { #[test] fn test_to_f64() { conv_cmps!($T; to_f64, $($conv_cmps)*); } }; } /// Expands to a list of test functions. macro_rules! test_fns { ($fn_name:tt { $($conv_cmps:tt)* } $($rest:tt)*) => { test_fn!($fn_name { $($conv_cmps)* }); test_fns!($($rest)*); }; ($T:ident: $fn_name:tt { $($conv_cmps:tt)* } $($rest:tt)*) => { test_fn!($T: $fn_name { $($conv_cmps)* }); test_fns!($T: $($rest)*); }; () => {}; ($T:ident:) => {}; } /// Expands to a unique test module containing a list of test functions. macro_rules! tests { ($T:ident { $($rest:tt)* }) => { pub mod $T { use sample::conv::$T::*; use sample::types::{I24, U24, I48, U48}; test_fns!($($rest)*); } }; ($T:ident: $mod_name:ident { $($rest:tt)* }) => { pub mod $mod_name { use sample::conv::$mod_name::*; use sample::types::{I24, U24, I48, U48}; test_fns!($T: $($rest)*); } }; } tests!(i8 { to_i16 { -128, -32_768; 0, 0; 127, 32_512; } to_i24 { -128, -8_388_608; 0, 0; 127, 8_323_072; } to_i32 { -128, -2_147_483_648; 0, 0; 127, 2_130_706_432; } to_i48 { -128, -140_737_488_355_328; 0, 0; 127, 139_637_976_727_552; } to_i64 { -128, -9_223_372_036_854_775_808; 0, 0; 127, 9_151_314_442_816_847_872; } to_u8 { -128, 0; 0, 128; 127, 255; } to_u16 { -128, 0; 0, 32_768; 127, 65_280; } to_u24 { -128, 0; 0, 8_388_608; 127, 16_711_680; } to_u32 { -128, 0; 0, 2_147_483_648; 127, 4_278_190_080; } to_u48 { -128, 0; 0, 140_737_488_355_328; 127, 280_375_465_082_880; } to_u64 { -128, 0; 0, 9_223_372_036_854_775_808; 127, 18_374_686_479_671_623_680; } to_f32 { -128, -1.0; 0, 0.0; } to_f64 { -128, -1.0; 0, 0.0; } }); tests!(i16 { to_i8 { -32_768, -128; 0, 0; 32_767, 127; } to_i24 { -32_768, -8_388_608; 0, 0; 32_767, 8_388_352; } to_i32 { -32_768, -2_147_483_648; 0, 0; 32_767, 2_147_418_112; } to_i48 { -32_768, -140_737_488_355_328; 0, 0; 32_767, 140_733_193_388_032; } to_i64 { -32_768, -9_223_372_036_854_775_808; 0, 0; 32_767, 9_223_090_561_878_065_152; } to_u8 { -32_768, 0; 0, 128; 32_767, 255; } to_u16 { -32_768, 0; 0, 32_768; 32_767, 65_535; } to_u24 { -32_768, 0; 0, 8_388_608; 32_767, 16_776_960; } to_u32 { -32_768, 0; 0, 2_147_483_648; 32_767, 4_294_901_760; } to_u48 { -32_768, 0; 0, 140_737_488_355_328; 32_767, 281_470_681_743_360; } to_u64 { -32_768, 0; 0, 9_223_372_036_854_775_808; 32_767, 18_446_462_598_732_840_960; } to_f32 { -32_768, -1.0; 0, 0.0; } to_f64 { -32_768, -1.0; 0, 0.0; } }); tests!(I24: i24 { to_i8 { -8_388_608, -128; 0, 0; 8_388_607, 127; } to_i16 { -8_388_608, -32_768; 0, 0; 8_388_607, 32_767; } to_i32 { -8_388_608, -2_147_483_648; 0, 0; 8_388_607, 2_147_483_392; } to_i48 { -8_388_608, -140_737_488_355_328; 0, 0; 8_388_607, 140_737_471_578_112; } to_i64 { -8_388_608, -9_223_372_036_854_775_808; 0, 0; 8_388_607, 9_223_370_937_343_148_032; } to_u8 { -8_388_608, 0; 0, 128; 8_388_607, 255; } to_u16 { -8_388_608, 0; 0, 32_768; 8_388_607, 65_535; } to_u24 { -8_388_608, 0; 0, 8_388_608; 8_388_607, 16_777_215; } to_u32 { -8_388_608, 0; 0, 2_147_483_648; 8_388_607, 4_294_967_040; } to_u48 { -8_388_608, 0; 0, 140_737_488_355_328; 8_388_607, 281_474_959_933_440; } to_u64 { -8_388_608, 0; 0, 9_223_372_036_854_775_808; 8_388_607, 18_446_742_974_197_923_840; } to_f32 { -8_388_608, -1.0; 0, 0.0; } to_f64 { -8_388_608, -1.0; 0, 0.0; } }); tests!(i32 { to_i8 { -2_147_483_648, -128; 0, 0; 2_147_483_647, 127; } to_i16 { -2_147_483_648, -32_768; 0, 0; 2_147_483_647, 32_767; } to_i24 { -2_147_483_648, -8_388_608; 0, 0; 2_147_483_647, 8_388_607; } to_i48 { -2_147_483_648, -140_737_488_355_328; 0, 0; 2_147_483_647, 140_737_488_289_792; } to_i64 { -2_147_483_648, -9_223_372_036_854_775_808; 0, 0; 2_147_483_647, 9_223_372_032_559_808_512; } to_u8 { -2_147_483_648, 0; 0, 128; 2_147_483_647, 255; } to_u16 { -2_147_483_648, 0; 0, 32_768; 2_147_483_647, 65_535; } to_u24 { -2_147_483_648, 0; 0, 8_388_608; 2_147_483_647, 16_777_215; } to_u32 { -2_147_483_648, 0; 0, 2_147_483_648; 2_147_483_647, 4_294_967_295; } to_u48 { -2_147_483_648, 0; 0, 140_737_488_355_328; 2_147_483_647, 281_474_976_645_120; } to_u64 { -2_147_483_648, 0; 0, 9_223_372_036_854_775_808; 2_147_483_647, 18_446_744_069_414_584_320; } to_f32 { -2_147_483_648, -1.0; 0, 0.0; } to_f64 { -2_147_483_648, -1.0; 0, 0.0; } }); tests!(I48: i48 { to_i8 { -140_737_488_355_328, -128; 0, 0; 140_737_488_355_327, 127; } to_i16 { -140_737_488_355_328, -32_768; 0, 0; 140_737_488_355_327, 32_767; } to_i24 { -140_737_488_355_328, -8_388_608; 0, 0; 140_737_488_355_327, 8_388_607; } to_i32 { -140_737_488_355_328, -2_147_483_648; 0, 0; 140_737_488_355_327, 2_147_483_647; } to_i64 { -140_737_488_355_328, -9_223_372_036_854_775_808; 0, 0; 140_737_488_355_327, 9_223_372_036_854_710_272; } to_u8 { -140_737_488_355_328, 0; 0, 128; 140_737_488_355_327, 255; } to_u16 { -140_737_488_355_328, 0; 0, 32_768; 140_737_488_355_327, 65_535; } to_u24 { -140_737_488_355_328, 0; 0, 8_388_608; 140_737_488_355_327, 16_777_215; } to_u32 { -140_737_488_355_328, 0; 0, 2_147_483_648; 140_737_488_355_327, 4_294_967_295; } to_u48 { -140_737_488_355_328, 0; 0, 140_737_488_355_328; 140_737_488_355_327, 281_474_976_710_655; } to_u64 { -140_737_488_355_328, 0; 0, 9_223_372_036_854_775_808; 140_737_488_355_327, 18_446_744_073_709_486_080; } }); tests!(i64 { to_i8 { -9_223_372_036_854_775_808, -128; 0, 0; 9_223_372_036_854_775_807, 127; } to_i16 { -9_223_372_036_854_775_808, -32_768; 0, 0; 9_223_372_036_854_775_807, 32_767; } to_i24 { -9_223_372_036_854_775_808, -8_388_608; 0, 0; 9_223_372_036_854_775_807, 8_388_607; } to_i32 { -9_223_372_036_854_775_808, -2_147_483_648; 0, 0; 9_223_372_036_854_775_807, 2_147_483_647; } to_i48 { -9_223_372_036_854_775_808, -140_737_488_355_328; 0, 0; 9_223_372_036_854_775_807, 140_737_488_355_327; } to_u8 { -9_223_372_036_854_775_808, 0; 0, 128; 9_223_372_036_854_775_807, 255; } to_u16 { -9_223_372_036_854_775_808, 0; 0, 32_768; 9_223_372_036_854_775_807, 65_535; } to_u24 { -9_223_372_036_854_775_808, 0; 0, 8_388_608; 9_223_372_036_854_775_807, 16_777_215; } to_u32 { -9_223_372_036_854_775_808, 0; 0, 2_147_483_648; 9_223_372_036_854_775_807, 4_294_967_295; } to_u48 { -9_223_372_036_854_775_808, 0; 0, 140_737_488_355_328; 9_223_372_036_854_775_807, 281_474_976_710_655; } to_u64 { -9_223_372_036_854_775_808, 0; 0, 9_223_372_036_854_775_808; 9_223_372_036_854_775_807, 18_446_744_073_709_551_615; } to_f32 { -9_223_372_036_854_775_808, -1.0; 0, 0.0; } to_f64 { -9_223_372_036_854_775_808, -1.0; 0, 0.0; } }); tests!(u8 { to_i8 { 0, -128; 128, 0; 255, 127; } to_i16 { 0, -32_768; 128, 0; 255, 32_512; } to_i24 { 0, -8_388_608; 128, 0; 255, 8_323_072; } to_i32 { 0, -2_147_483_648; 128, 0; 255, 2_130_706_432; } to_i48 { 0, -140_737_488_355_328; 128, 0; 255, 139_637_976_727_552; } to_i64 { 0, -9_223_372_036_854_775_808; 128, 0; 255, 9_151_314_442_816_847_872; } to_u16 { 0, 0; 128, 32_768; 255, 65_280; } to_u24 { 0, 0; 128, 8_388_608; 255, 16_711_680; } to_u32 { 0, 0; 128, 2_147_483_648; 255, 4_278_190_080; } to_u48 { 0, 0; 128, 140_737_488_355_328; 255, 280_375_465_082_880; } to_u64 { 0, 0; 128, 9_223_372_036_854_775_808; 255, 18_374_686_479_671_623_680; } to_f32 { 0, -1.0; 128, 0.0; } to_f64 { 0, -1.0; 128, 0.0; } }); tests!(u16 { to_i8 { 0, -128; 32_768, 0; 65_535, 127; } to_i16 { 0, -32_768; 32_768, 0; 65_535, 32_767; } to_i24 { 0, -8_388_608; 32_768, 0; 65_535, 8_388_352; } to_i32 { 0, -2_147_483_648; 32_768, 0; 65_535, 2_147_418_112; } to_i48 { 0, -140_737_488_355_328; 32_768, 0; 65_535, 140_733_193_388_032; } to_i64 { 0, -9_223_372_036_854_775_808; 32_768, 0; 65_535, 9_223_090_561_878_065_152; } to_u8 { 0, 0; 32_768, 128; 65_535, 255; } to_u24 { 0, 0; 32_768, 8_388_608; 65_535, 16_776_960; } to_u32 { 0, 0; 32_768, 2_147_483_648; 65_535, 4_294_901_760; } to_u48 { 0, 0; 32_768, 140_737_488_355_328; 65_535, 281_470_681_743_360; } to_u64 { 0, 0; 32_768, 9_223_372_036_854_775_808; 65_535, 18_446_462_598_732_840_960; } to_f32 { 0, -1.0; 32_768, 0.0; } to_f64 { 0, -1.0; 32_768, 0.0; } }); tests!(U24: u24 { to_i8 { 0, -128; 8_388_608, 0; 16_777_215, 127; } to_i16 { 0, -32_768; 8_388_608, 0; 16_777_215, 32_767; } to_i24 { 0, -8_388_608; 8_388_608, 0; 16_777_215, 8_388_607; } to_i32 { 0, -2_147_483_648; 8_388_608, 0; 16_777_215, 2_147_483_392; } to_i48 { 0, -140_737_488_355_328; 8_388_608, 0; 16_777_215, 140_737_471_578_112; } to_i64 { 0, -9_223_372_036_854_775_808; 8_388_608, 0; 16_777_215, 9_223_370_937_343_148_032; } to_u8 { 0, 0; 8_388_608, 128; 16_777_215, 255; } to_u16 { 0, 0; 8_388_608, 32_768; 16_777_215, 65_535; } to_u32 { 0, 0; 8_388_608, 2_147_483_648; 16_777_215, 4_294_967_040; } to_u48 { 0, 0; 8_388_608, 140_737_488_355_328; 16_777_215, 281_474_959_933_440; } to_u64 { 0, 0; 8_388_608, 9_223_372_036_854_775_808; 16_777_215, 18_446_742_974_197_923_840; } to_f32 { 0, -1.0; 8_388_608, 0.0; } to_f64 { 0, -1.0; 8_388_608, 0.0; } }); tests!(u32 { to_i8 { 0, -128; 2_147_483_648, 0; 4_294_967_295, 127; } to_i16 { 0, -32_768; 2_147_483_648, 0; 4_294_967_295, 32_767; } to_i24 { 0, -8_388_608; 2_147_483_648, 0; 4_294_967_295, 8_388_607; } to_i32 { 0, -2_147_483_648; 2_147_483_648, 0; 4_294_967_295, 2_147_483_647; } to_i48 { 0, -140_737_488_355_328; 2_147_483_648, 0; 4_294_967_295, 140_737_488_289_792; } to_i64 { 0, -9_223_372_036_854_775_808; 2_147_483_648, 0; 4_294_967_295, 9_223_372_032_559_808_512; } to_u8 { 0, 0; 2_147_483_648, 128; 4_294_967_295, 255; } to_u16 { 0, 0; 2_147_483_648, 32_768; 4_294_967_295, 65_535; } to_u24 { 0, 0; 2_147_483_648, 8_388_608; 4_294_967_295, 16_777_215; } to_u48 { 0, 0; 2_147_483_648, 140_737_488_355_328; 4_294_967_295, 281_474_976_645_120; } to_u64 { 0, 0; 2_147_483_648, 9_223_372_036_854_775_808; 4_294_967_295, 18_446_744_069_414_584_320; } to_f32 { 0, -1.0; 2_147_483_648, 0.0; } to_f64 { 0, -1.0; 2_147_483_648, 0.0; } }); tests!(U48: u48 { to_i8 { 0, -128; 140_737_488_355_328, 0; 281_474_976_710_655, 127; } to_i16 { 0, -32_768; 140_737_488_355_328, 0; 281_474_976_710_655, 32_767; } to_i24 { 0, -8_388_608; 140_737_488_355_328, 0; 281_474_976_710_655, 8_388_607; } to_i32 { 0, -2_147_483_648; 140_737_488_355_328, 0; 281_474_976_710_655, 2_147_483_647; } to_i48 { 0, -140_737_488_355_328; 140_737_488_355_328, 0; 281_474_976_710_655, 140_737_488_355_327; } to_i64 { 0, -9_223_372_036_854_775_808; 140_737_488_355_328, 0; 281_474_976_710_655, 9_223_372_036_854_710_272; } to_u8 { 0, 0; 140_737_488_355_328, 128; 281_474_976_710_655, 255; } to_u16 { 0, 0; 140_737_488_355_328, 32_768; 281_474_976_710_655, 65_535; } to_u24 { 0, 0; 140_737_488_355_328, 8_388_608; 281_474_976_710_655, 16_777_215; } to_u32 { 0, 0; 140_737_488_355_328, 2_147_483_648; 281_474_976_710_655, 4_294_967_295; } to_u64 { 0, 0; 140_737_488_355_328, 9_223_372_036_854_775_808; 281_474_976_710_655, 18_446_744_073_709_486_080; } to_f32 { 0, -1.0; 140_737_488_355_328, 0.0; } to_f64 { 0, -1.0; 140_737_488_355_328, 0.0; } }); tests!(u64 { to_i8 { 0, -128; 9_223_372_036_854_775_808, 0; 18_446_744_073_709_551_615, 127; } to_i16 { 0, -32_768; 9_223_372_036_854_775_808, 0; 18_446_744_073_709_551_615, 32_767; } to_i24 { 0, -8_388_608; 9_223_372_036_854_775_808, 0; 18_446_744_073_709_551_615, 8_388_607; } to_i32 { 0, -2_147_483_648; 9_223_372_036_854_775_808, 0; 18_446_744_073_709_551_615, 2_147_483_647; } to_i48 { 0, -140_737_488_355_328; 9_223_372_036_854_775_808, 0; 18_446_744_073_709_551_615, 140_737_488_355_327; } to_i64 { 0, -9_223_372_036_854_775_808; 9_223_372_036_854_775_808, 0; 18_446_744_073_709_551_615, 9_223_372_036_854_775_807; } to_u8 { 0, 0; 9_223_372_036_854_775_808, 128; 18_446_744_073_709_551_615, 255; } to_u16 { 0, 0; 9_223_372_036_854_775_808, 32_768; 18_446_744_073_709_551_615, 65_535; } to_u24 { 0, 0; 9_223_372_036_854_775_808, 8_388_608; 18_446_744_073_709_551_615, 16_777_215; } to_u32 { 0, 0; 9_223_372_036_854_775_808, 2_147_483_648; 18_446_744_073_709_551_615, 4_294_967_295; } to_u48 { 0, 0; 9_223_372_036_854_775_808, 140_737_488_355_328; 18_446_744_073_709_551_615, 281_474_976_710_655; } to_f32 { 0, -1.0; 9_223_372_036_854_775_808, 0.0; } to_f64 { 0, -1.0; 9_223_372_036_854_775_808, 0.0; } }); tests!(f32 { to_i8 { -1.0, -128; 0.0, 0; } to_i16 { -1.0, -32_768; 0.0, 0; } to_i24 { -1.0, -8_388_608; 0.0, 0; } to_i32 { -1.0, -2_147_483_648; 0.0, 0; } to_i48 { -1.0, -140_737_488_355_328; 0.0, 0; } to_i64 { -1.0, -9_223_372_036_854_775_808; 0.0, 0; } to_u8 { -1.0, 0; 0.0, 128; } to_u16 { -1.0, 0; 0.0, 32_768; } to_u24 { -1.0, 0; 0.0, 8_388_608; } to_u32 { -1.0, 0; 0.0, 2_147_483_648; } to_u48 { -1.0, 0; 0.0, 140_737_488_355_328; } to_u64 { -1.0, 0; 0.0, 9_223_372_036_854_775_808; } to_f64 { -1.0, -1.0; 0.0, 0.0; } }); tests!(f64 { to_i8 { -1.0, -128; 0.0, 0; } to_i16 { -1.0, -32_768; 0.0, 0; } to_i24 { -1.0, -8_388_608; 0.0, 0; } to_i32 { -1.0, -2_147_483_648; 0.0, 0; } to_i48 { -1.0, -140_737_488_355_328; 0.0, 0; } to_i64 { -1.0, -9_223_372_036_854_775_808; 0.0, 0; } to_u8 { -1.0, 0; 0.0, 128; } to_u16 { -1.0, 0; 0.0, 32_768; } to_u24 { -1.0, 0; 0.0, 8_388_608; } to_u32 { -1.0, 0; 0.0, 2_147_483_648; } to_u48 { -1.0, 0; 0.0, 140_737_488_355_328; } to_u64 { -1.0, 0; 0.0, 9_223_372_036_854_775_808; } to_f32 { -1.0, -1.0; 0.0, 0.0; } });