From 226ae4c9557555024f0176bf5214ebcd32ae6815 Mon Sep 17 00:00:00 2001 From: Shoyu Vanilla Date: Wed, 22 Jan 2025 13:26:28 +0900 Subject: [PATCH] Simplify harness generations with more macros --- library/core/src/convert/num.rs | 799 +++++++++----------------------- 1 file changed, 211 insertions(+), 588 deletions(-) diff --git a/library/core/src/convert/num.rs b/library/core/src/convert/num.rs index 69f16801b9952..17d2c00fca58d 100644 --- a/library/core/src/convert/num.rs +++ b/library/core/src/convert/num.rs @@ -565,49 +565,63 @@ mod verify { }; } - // non-zero unsigned integer -> non-zero unsigned integer - generate_nonzero_int_from_nonzero_int_harness!(u8 => u16, check_nonzero_u16_from_nonzero_u8); - generate_nonzero_int_from_nonzero_int_harness!(u8 => u32, check_nonzero_u32_from_nonzero_u8); - generate_nonzero_int_from_nonzero_int_harness!(u8 => u64, check_nonzero_u64_from_nonzero_u8); - generate_nonzero_int_from_nonzero_int_harness!(u8 => u128, check_nonzero_u128_from_nonzero_u8); - generate_nonzero_int_from_nonzero_int_harness!(u8 => usize, check_nonzero_usize_from_nonzero_u8); - generate_nonzero_int_from_nonzero_int_harness!(u16 => u32, check_nonzero_u32_from_nonzero_u16); - generate_nonzero_int_from_nonzero_int_harness!(u16 => u64, check_nonzero_u64_from_nonzero_u16); - generate_nonzero_int_from_nonzero_int_harness!(u16 => u128, check_nonzero_u128_from_nonzero_u16); - generate_nonzero_int_from_nonzero_int_harness!(u16 => usize, check_nonzero_usize_from_nonzero_u16); - generate_nonzero_int_from_nonzero_int_harness!(u32 => u64, check_nonzero_u64_from_nonzero_u32); - generate_nonzero_int_from_nonzero_int_harness!(u32 => u128, check_nonzero_u128_from_nonzero_u32); - generate_nonzero_int_from_nonzero_int_harness!(u64 => u128, check_nonzero_u128_from_nonzero_u64); - - // non-zero signed integer -> non-zero signed integer - generate_nonzero_int_from_nonzero_int_harness!(i8 => i16, check_nonzero_i16_from_nonzero_i8); - generate_nonzero_int_from_nonzero_int_harness!(i8 => i32, check_nonzero_i32_from_nonzero_i8); - generate_nonzero_int_from_nonzero_int_harness!(i8 => i64, check_nonzero_i64_from_nonzero_i8); - generate_nonzero_int_from_nonzero_int_harness!(i8 => i128, check_nonzero_i128_from_nonzero_i8); - generate_nonzero_int_from_nonzero_int_harness!(i8 => isize, check_nonzero_isize_from_nonzero_i8); - generate_nonzero_int_from_nonzero_int_harness!(i16 => i32, check_nonzero_i32_from_nonzero_i16); - generate_nonzero_int_from_nonzero_int_harness!(i16 => i64, check_nonzero_i64_from_nonzero_i16); - generate_nonzero_int_from_nonzero_int_harness!(i16 => i128, check_nonzero_i128_from_nonzero_i16); - generate_nonzero_int_from_nonzero_int_harness!(i16 => isize, check_nonzero_isize_from_nonzero_i16); - generate_nonzero_int_from_nonzero_int_harness!(i32 => i64, check_nonzero_i64_from_nonzero_i32); - generate_nonzero_int_from_nonzero_int_harness!(i32 => i128, check_nonzero_i128_from_nonzero_i32); - generate_nonzero_int_from_nonzero_int_harness!(i64 => i128, check_nonzero_i128_from_nonzero_i64); - - // non-zero unsigned integer -> non-zero signed integer - generate_nonzero_int_from_nonzero_int_harness!(u8 => i16, check_nonzero_i16_from_nonzero_u8); - generate_nonzero_int_from_nonzero_int_harness!(u8 => i32, check_nonzero_i32_from_nonzero_u8); - generate_nonzero_int_from_nonzero_int_harness!(u8 => i64, check_nonzero_i64_from_nonzero_u8); - generate_nonzero_int_from_nonzero_int_harness!(u8 => i128, check_nonzero_i128_from_nonzero_u8); - generate_nonzero_int_from_nonzero_int_harness!(u8 => isize, check_nonzero_isize_from_nonzero_u8); - generate_nonzero_int_from_nonzero_int_harness!(u16 => i32, check_nonzero_i32_from_nonzero_u16); - generate_nonzero_int_from_nonzero_int_harness!(u16 => i64, check_nonzero_i64_from_nonzero_u16); - generate_nonzero_int_from_nonzero_int_harness!(u16 => i128, check_nonzero_i128_from_nonzero_u16); - generate_nonzero_int_from_nonzero_int_harness!(u32 => i64, check_nonzero_i64_from_nonzero_u32); - generate_nonzero_int_from_nonzero_int_harness!(u32 => i128, check_nonzero_i128_from_nonzero_u32); - generate_nonzero_int_from_nonzero_int_harness!(u64 => i128, check_nonzero_i128_from_nonzero_u64); + macro_rules! generate_nonzero_int_from_nonzero_int_harnesses { + ($ns:ident, $Small:ty => $($Large:tt),+ $(,)?) => { + mod $ns { + use super::*; + + $( + mod $Large { + use super::*; + + generate_nonzero_int_from_nonzero_int_harness!( + $Small => $Large, + check_nonzero_int_from_nonzero_int + ); + } + )+ + } + }; + } + + // non-zero unsigned integer -> non-zero integer, infallible + generate_nonzero_int_from_nonzero_int_harnesses!( + check_nonzero_int_from_u8, + u8 => u16, u32, u64, u128, usize, i16, i32, i64, i128, isize, + ); + generate_nonzero_int_from_nonzero_int_harnesses!( + check_nonzero_int_from_u16, + u16 => u32, u64, u128, usize, i32, i64, i128, + ); + generate_nonzero_int_from_nonzero_int_harnesses!( + check_nonzero_int_from_u32, + u32 => u64, u128, i64, i128, + ); + generate_nonzero_int_from_nonzero_int_harnesses!( + check_nonzero_int_from_u64, + u64 => u128, i128, + ); + + // non-zero signed integer -> non-zero signed integer, infallible + generate_nonzero_int_from_nonzero_int_harnesses!( + check_nonzero_int_from_i8, + i8 => i16, i32, i64, i128, isize, + ); + generate_nonzero_int_from_nonzero_int_harnesses!( + check_nonzero_int_from_i16, + i16 => i32, i64, i128, isize, + ); + generate_nonzero_int_from_nonzero_int_harnesses!( + check_nonzero_int_from_i32, + i32 => i64, i128, + ); + generate_nonzero_int_from_nonzero_int_harnesses!( + check_nonzero_int_from_i64, + i64 => i128, + ); macro_rules! generate_nonzero_int_try_from_nonzero_int_harness { - ($source:ty => $target:ty, $harness_pass:ident, $harness_panic:ident,) => { + ($source:ty => $target:ty, $harness_pass:ident, $harness_panic:ident $(,)?) => { #[kani::proof] pub fn $harness_pass() { let x_inner: $source = kani::any_where(|&v| { @@ -629,7 +643,7 @@ mod verify { let _ = NonZero::<$target>::try_from(x).unwrap(); } }; - ($source:ty => $target:ty, $harness_infallible:ident,) => { + ($source:ty => $target:ty, $harness_infallible:ident $(,)?) => { #[kani::proof] pub fn $harness_infallible() { let x: NonZero<$source> = kani::any(); @@ -638,542 +652,167 @@ mod verify { }; } - // unsigned non-zero integer -> unsigned non-zero integer fallible - generate_nonzero_int_try_from_nonzero_int_harness!( - u16 => u8, - check_nonzero_u8_try_from_nonzero_u16, - check_nonzero_u8_try_from_nonzero_u16_should_panic, - ); - generate_nonzero_int_try_from_nonzero_int_harness!( - u32 => u8, - check_nonzero_u8_try_from_nonzero_u32, - check_nonzero_u8_try_from_nonzero_u32_should_panic, - ); - generate_nonzero_int_try_from_nonzero_int_harness!( - u32 => u16, - check_nonzero_u16_try_from_nonzero_u32, - check_nonzero_u16_try_from_nonzero_u32_should_panic, - ); - - #[cfg(target_pointer_width = "16")] - generate_nonzero_int_try_from_nonzero_int_harness!( - u32 => usize, - check_nonzero_usize_try_from_nonzero_u32, - check_nonzero_usize_try_from_nonzero_u32_should_panic, - ); + macro_rules! generate_nonzero_int_try_from_nonzero_int_harnesses { + ($ns:ident, $source:ty => ([$($target:tt),* $(,)?], [$($infallible:tt),* $(,)?] $(,)?)) => { + mod $ns { + use super::*; + + $( + mod $target { + use super::*; + + generate_nonzero_int_try_from_nonzero_int_harness!( + $source => $target, + check_nonzero_int_try_from_nonzero_int, + check_nonzero_int_try_from_nonzero_int_should_panic, + ); + } + )* + $( + mod $infallible { + use super::*; + + generate_nonzero_int_try_from_nonzero_int_harness!( + $source => $infallible, + check_nonzero_int_try_from_nonzero_int_infallible, + ); + } + )* + } + }; + } + // unsigned non-zero integer -> non-zero integer fallible #[cfg(any(target_pointer_width = "32", target_pointer_width = "64"))] - generate_nonzero_int_try_from_nonzero_int_harness!( - u32 => usize, - check_nonzero_usize_try_from_nonzero_u32_infallible, - ); - - generate_nonzero_int_try_from_nonzero_int_harness!( - u64 => u8, - check_nonzero_u8_try_from_nonzero_u64, - check_nonzero_u8_try_from_nonzero_u64_should_panic, - ); - generate_nonzero_int_try_from_nonzero_int_harness!( - u64 => u16, - check_nonzero_u16_try_from_nonzero_u64, - check_nonzero_u16_try_from_nonzero_u64_should_panic, - ); - generate_nonzero_int_try_from_nonzero_int_harness!( - u64 => u32, - check_nonzero_u32_try_from_nonzero_u64, - check_nonzero_u32_try_from_nonzero_u64_should_panic, - ); - - #[cfg(any(target_pointer_width = "16", target_pointer_width = "32"))] - generate_nonzero_int_try_from_nonzero_int_harness!( - u64 => usize, - check_nonzero_usize_try_from_nonzero_u64, - check_nonzero_usize_try_from_nonzero_u64_should_panic, - ); - - #[cfg(target_pointer_width = "64")] - generate_nonzero_int_try_from_nonzero_int_harness!( - u64 => usize, - check_nonzero_usize_try_from_nonzero_u64_infallible, - ); - - generate_nonzero_int_try_from_nonzero_int_harness!( - u128 => u8, - check_nonzero_u8_try_from_nonzero_u128, - check_nonzero_u8_try_from_nonzero_u128_should_panic, - ); - generate_nonzero_int_try_from_nonzero_int_harness!( - u128 => u16, - check_nonzero_u16_try_from_nonzero_u128, - check_nonzero_u16_try_from_nonzero_u128_should_panic, - ); - generate_nonzero_int_try_from_nonzero_int_harness!( - u128 => u32, - check_nonzero_u32_try_from_nonzero_u128, - check_nonzero_u32_try_from_nonzero_u128_should_panic, - ); - generate_nonzero_int_try_from_nonzero_int_harness!( - u128 => u64, - check_nonzero_u64_try_from_nonzero_u128, - check_nonzero_u64_try_from_nonzero_u128_should_panic, - ); - generate_nonzero_int_try_from_nonzero_int_harness!( - u128 => usize, - check_nonzero_usize_try_from_nonzero_u128, - check_nonzero_usize_try_from_nonzero_u128_should_panic, - ); - generate_nonzero_int_try_from_nonzero_int_harness!( - usize => u8, - check_nonzero_u8_try_from_nonzero_usize, - check_nonzero_u8_try_from_nonzero_usize_should_panic, + generate_nonzero_int_try_from_nonzero_int_harnesses!( + check_nonzero_int_try_from_u16, + u16 => ( + [u8, i8, i16], + [isize], + ) ); #[cfg(target_pointer_width = "16")] - generate_nonzero_int_try_from_nonzero_int_harness!( - usize => u16, - check_nonzero_u16_try_from_nonzero_usize_infallible, - ); - - #[cfg(any(target_pointer_width = "32", target_pointer_width = "64"))] - generate_nonzero_int_try_from_nonzero_int_harness!( - usize => u16, - check_nonzero_u16_try_from_nonzero_usize, - check_nonzero_u16_try_from_nonzero_usize_should_panic, - ); - - #[cfg(any(target_pointer_width = "16", target_pointer_width = "32"))] - generate_nonzero_int_try_from_nonzero_int_harness!( - usize => u32, - check_nonzero_u32_try_from_nonzero_usize_infallible, + generate_nonzero_int_try_from_nonzero_int_harnesses!( + check_nonzero_int_try_from_u16, + u16 => ( + [u8, i8, i16, isize], + [], + ) ); #[cfg(target_pointer_width = "64")] - generate_nonzero_int_try_from_nonzero_int_harness!( - usize => u32, - check_nonzero_u32_try_from_nonzero_usize, - check_nonzero_u32_try_from_nonzero_usize_should_panic, + generate_nonzero_int_try_from_nonzero_int_harnesses!( + check_nonzero_int_try_from_u32, + u32 => ( + [u8, u16, i8, i16, i32], + [usize, isize], + ) ); - generate_nonzero_int_try_from_nonzero_int_harness!( - usize => u64, - check_nonzero_u64_try_from_nonzero_usize_infallible, - ); - generate_nonzero_int_try_from_nonzero_int_harness!( - usize => u128, - check_nonzero_u128_try_from_nonzero_usize_infallible, - ); - - // signed non-zero integer -> signed non-zero integer fallible - generate_nonzero_int_try_from_nonzero_int_harness!( - i16 => i8, - check_nonzero_i8_try_from_nonzero_i16, - check_nonzero_i8_try_from_nonzero_i16_should_panic, - ); - generate_nonzero_int_try_from_nonzero_int_harness!( - i32 => i8, - check_nonzero_i8_try_from_nonzero_i32, - check_nonzero_i8_try_from_nonzero_i32_should_panic, - ); - generate_nonzero_int_try_from_nonzero_int_harness!( - i32 => i16, - check_nonzero_i16_try_from_nonzero_i32, - check_nonzero_i16_try_from_nonzero_i32_should_panic, + #[cfg(target_pointer_width = "32")] + generate_nonzero_int_try_from_nonzero_int_harnesses!( + check_nonzero_int_try_from_u32, + u32 => ( + [u8, u16, usize, i8, i16, i32], + [isize], + ) ); #[cfg(target_pointer_width = "16")] - generate_nonzero_int_try_from_nonzero_int_harness!( - i32 => isize, - check_nonzero_isize_try_from_nonzero_i32, - check_nonzero_isize_try_from_nonzero_i32_should_panic, - ); - - #[cfg(any(target_pointer_width = "32", target_pointer_width = "64"))] - generate_nonzero_int_try_from_nonzero_int_harness!( - i32 => isize, - check_nonzero_isize_try_from_nonzero_i32_infallible, - ); - - generate_nonzero_int_try_from_nonzero_int_harness!( - i64 => i8, - check_nonzero_i8_try_from_nonzero_i64, - check_nonzero_i8_try_from_nonzero_i64_should_panic, - ); - generate_nonzero_int_try_from_nonzero_int_harness!( - i64 => i16, - check_nonzero_i16_try_from_nonzero_i64, - check_nonzero_i16_try_from_nonzero_i64_should_panic, - ); - generate_nonzero_int_try_from_nonzero_int_harness!( - i64 => i32, - check_nonzero_i32_try_from_nonzero_i64, - check_nonzero_i32_try_from_nonzero_i64_should_panic, - ); - - #[cfg(any(target_pointer_width = "16", target_pointer_width = "32"))] - generate_nonzero_int_try_from_nonzero_int_harness!( - i64 => isize, - check_nonzero_isize_try_from_nonzero_i64, - check_nonzero_isize_try_from_nonzero_i64_should_panic, + generate_nonzero_int_try_from_nonzero_int_harnesses!( + check_nonzero_int_try_from_u32, + u32 => ( + [u8, u16, usize, i8, i16, i32, isize], + [], + ) ); #[cfg(target_pointer_width = "64")] - generate_nonzero_int_try_from_nonzero_int_harness!( - i64 => isize, - check_nonzero_isize_try_from_nonzero_i64_infallible, - ); - - generate_nonzero_int_try_from_nonzero_int_harness!( - i128 => i8, - check_nonzero_i8_try_from_nonzero_i128, - check_nonzero_i8_try_from_nonzero_i128_should_panic, - ); - generate_nonzero_int_try_from_nonzero_int_harness!( - i128 => i16, - check_nonzero_i16_try_from_nonzero_i128, - check_nonzero_i16_try_from_nonzero_i128_should_panic, - ); - generate_nonzero_int_try_from_nonzero_int_harness!( - i128 => i32, - check_nonzero_i32_try_from_nonzero_i128, - check_nonzero_i32_try_from_nonzero_i128_should_panic, - ); - generate_nonzero_int_try_from_nonzero_int_harness!( - i128 => i64, - check_nonzero_i64_try_from_nonzero_i128, - check_nonzero_i64_try_from_nonzero_i128_should_panic, - ); - generate_nonzero_int_try_from_nonzero_int_harness!( - i128 => isize, - check_nonzero_isize_try_from_nonzero_i128, - check_nonzero_isize_try_from_nonzero_i128_should_panic, - ); - generate_nonzero_int_try_from_nonzero_int_harness!( - isize => i8, - check_nonzero_i8_try_from_nonzero_isize, - check_nonzero_i8_try_from_nonzero_isize_should_panic, - ); - - #[cfg(target_pointer_width = "16")] - generate_nonzero_int_try_from_nonzero_int_harness!( - isize => i16, - check_nonzero_i16_try_from_nonzero_isize_infallible, - ); - - #[cfg(any(target_pointer_width = "32", target_pointer_width = "64"))] - generate_nonzero_int_try_from_nonzero_int_harness!( - isize => i16, - check_nonzero_i16_try_from_nonzero_isize, - check_nonzero_i16_try_from_nonzero_isize_should_panic, + generate_nonzero_int_try_from_nonzero_int_harnesses!( + check_nonzero_int_try_from_u64, + u64 => ( + [u8, u16, u32, i8, i16, i32, i64, isize], + [usize], + ) ); #[cfg(any(target_pointer_width = "16", target_pointer_width = "32"))] - generate_nonzero_int_try_from_nonzero_int_harness!( - isize => i32, - check_nonzero_i32_try_from_nonzero_isize_infallible, + generate_nonzero_int_try_from_nonzero_int_harnesses!( + check_nonzero_int_try_from_u64, + u64 => ( + [u8, u16, u32, usize, i8, i16, i32, i64, isize], + [], + ) ); - #[cfg(target_pointer_width = "64")] - generate_nonzero_int_try_from_nonzero_int_harness!( - isize => i32, - check_nonzero_i32_try_from_nonzero_isize, - check_nonzero_i32_try_from_nonzero_isize_should_panic, + generate_nonzero_int_try_from_nonzero_int_harnesses!( + check_nonzero_int_try_from_u128, + u128 => ( + [u8, u16, u32, u64, usize, i8, i16, i32, i64, i128, isize], + [], + ) ); - generate_nonzero_int_try_from_nonzero_int_harness!( - isize => i64, - check_nonzero_i64_try_from_nonzero_isize_infallible, - ); - generate_nonzero_int_try_from_nonzero_int_harness!( - isize => i128, - check_nonzero_i128_try_from_nonzero_isize_infallible, + // signed non-zero integer -> non-zero integer fallible + generate_nonzero_int_try_from_nonzero_int_harnesses!( + check_nonzero_int_try_from_i8, + i8 => ( + [u8, u16, u32, u64, u128, usize], + [], + ) ); - // unsigned non-zero integer -> signed non-zero integer fallible - generate_nonzero_int_try_from_nonzero_int_harness!( - u8 => i8, - check_nonzero_i8_try_from_nonzero_u8, - check_nonzero_i8_try_from_nonzero_u8_should_panic, - ); - generate_nonzero_int_try_from_nonzero_int_harness!( - u16 => i8, - check_nonzero_i8_try_from_nonzero_u16, - check_nonzero_i8_try_from_nonzero_u16_should_panic, - ); - generate_nonzero_int_try_from_nonzero_int_harness!( - u16 => i16, - check_nonzero_i16_try_from_nonzero_u16, - check_nonzero_i16_try_from_nonzero_u16_should_panic, - ); - - #[cfg(target_pointer_width = "16")] - generate_nonzero_int_try_from_nonzero_int_harness!( - u16 => isize, - check_nonzero_isize_try_from_nonzero_u16, - check_nonzero_isize_try_from_nonzero_u16_should_panic, + generate_nonzero_int_try_from_nonzero_int_harnesses!( + check_nonzero_int_try_from_i16, + i16 => ( + [u8, u16, u32, u64, u128, usize, i8], + [], + ) ); #[cfg(any(target_pointer_width = "32", target_pointer_width = "64"))] - generate_nonzero_int_try_from_nonzero_int_harness!( - u16 => isize, - check_nonzero_isize_try_from_nonzero_u16_infallible, - ); - - generate_nonzero_int_try_from_nonzero_int_harness!( - u32 => i8, - check_nonzero_i8_try_from_nonzero_u32, - check_nonzero_i8_try_from_nonzero_u32_should_panic, - ); - generate_nonzero_int_try_from_nonzero_int_harness!( - u32 => i16, - check_nonzero_i16_try_from_nonzero_u32, - check_nonzero_i16_try_from_nonzero_u32_should_panic, - ); - generate_nonzero_int_try_from_nonzero_int_harness!( - u32 => i32, - check_nonzero_i32_try_from_nonzero_u32, - check_nonzero_i32_try_from_nonzero_u32_should_panic, - ); - - #[cfg(any(target_pointer_width = "16", target_pointer_width = "32"))] - generate_nonzero_int_try_from_nonzero_int_harness!( - u32 => isize, - check_nonzero_isize_try_from_nonzero_u32, - check_nonzero_isize_try_from_nonzero_u32_should_panic, - ); - - #[cfg(target_pointer_width = "64")] - generate_nonzero_int_try_from_nonzero_int_harness!( - u32 => isize, - check_nonzero_isize_try_from_nonzero_u32_infallible, - ); - - generate_nonzero_int_try_from_nonzero_int_harness!( - u64 => i8, - check_nonzero_i8_try_from_nonzero_u64, - check_nonzero_i8_try_from_nonzero_u64_should_panic, - ); - generate_nonzero_int_try_from_nonzero_int_harness!( - u64 => i16, - check_nonzero_i16_try_from_nonzero_u64, - check_nonzero_i16_try_from_nonzero_u64_should_panic, - ); - generate_nonzero_int_try_from_nonzero_int_harness!( - u64 => i32, - check_nonzero_i32_try_from_nonzero_u64, - check_nonzero_i32_try_from_nonzero_u64_should_panic, - ); - generate_nonzero_int_try_from_nonzero_int_harness!( - u64 => i64, - check_nonzero_i64_try_from_nonzero_u64, - check_nonzero_i64_try_from_nonzero_u64_should_panic, - ); - generate_nonzero_int_try_from_nonzero_int_harness!( - u64 => isize, - check_nonzero_isize_try_from_nonzero_u64, - check_nonzero_isize_try_from_nonzero_u64_should_panic, - ); - generate_nonzero_int_try_from_nonzero_int_harness!( - u128 => i8, - check_nonzero_i8_try_from_nonzero_u128, - check_nonzero_i8_try_from_nonzero_u128_should_panic, - ); - generate_nonzero_int_try_from_nonzero_int_harness!( - u128 => i16, - check_nonzero_i16_try_from_nonzero_u128, - check_nonzero_i16_try_from_nonzero_u128_should_panic, - ); - generate_nonzero_int_try_from_nonzero_int_harness!( - u128 => i32, - check_nonzero_i32_try_from_nonzero_u128, - check_nonzero_i32_try_from_nonzero_u128_should_panic, - ); - generate_nonzero_int_try_from_nonzero_int_harness!( - u128 => i64, - check_nonzero_i64_try_from_nonzero_u128, - check_nonzero_i64_try_from_nonzero_u128_should_panic, - ); - generate_nonzero_int_try_from_nonzero_int_harness!( - u128 => i128, - check_nonzero_i128_try_from_nonzero_u128, - check_nonzero_i128_try_from_nonzero_u128_should_panic, - ); - generate_nonzero_int_try_from_nonzero_int_harness!( - u128 => isize, - check_nonzero_isize_try_from_nonzero_u128, - check_nonzero_isize_try_from_nonzero_u128_should_panic, - ); - generate_nonzero_int_try_from_nonzero_int_harness!( - usize => i8, - check_nonzero_i8_try_from_nonzero_usize, - check_nonzero_i8_try_from_nonzero_usize_should_panic, - ); - generate_nonzero_int_try_from_nonzero_int_harness!( - usize => i16, - check_nonzero_i16_try_from_nonzero_usize, - check_nonzero_i16_try_from_nonzero_usize_should_panic, + generate_nonzero_int_try_from_nonzero_int_harnesses!( + check_nonzero_int_try_from_i32, + i32 => ( + [u8, u16, u32, u64, u128, usize, i8, i16], + [isize], + ) ); #[cfg(target_pointer_width = "16")] - generate_nonzero_int_try_from_nonzero_int_harness!( - usize => i32, - check_nonzero_i32_try_from_nonzero_usize_infallible, - ); - - #[cfg(any(target_pointer_width = "32", target_pointer_width = "64"))] - generate_nonzero_int_try_from_nonzero_int_harness!( - usize => i32, - check_nonzero_i32_try_from_nonzero_usize, - check_nonzero_i32_try_from_nonzero_usize_should_panic, - ); - - #[cfg(any(target_pointer_width = "16", target_pointer_width = "32"))] - generate_nonzero_int_try_from_nonzero_int_harness!( - usize => i64, - check_nonzero_i64_try_from_nonzero_usize_infallible, + generate_nonzero_int_try_from_nonzero_int_harnesses!( + check_nonzero_int_try_from_i32, + i32 => ( + [u8, u16, u32, u64, u128, usize, i8, i16, isize], + [], + ) ); #[cfg(target_pointer_width = "64")] - generate_nonzero_int_try_from_nonzero_int_harness!( - usize => i64, - check_nonzero_i64_try_from_nonzero_usize, - check_nonzero_i64_try_from_nonzero_usize_should_panic, + generate_nonzero_int_try_from_nonzero_int_harnesses!( + check_nonzero_int_try_from_i64, + i64 => ( + [u8, u16, u32, u64, u128, usize, i8, i16, i32], + [isize], + ) ); - generate_nonzero_int_try_from_nonzero_int_harness!( - usize => i128, - check_nonzero_i128_try_from_nonzero_usize_infallible, - ); - generate_nonzero_int_try_from_nonzero_int_harness!( - usize => isize, - check_nonzero_isize_try_from_nonzero_usize, - check_nonzero_isize_try_from_nonzero_usize_should_panic, + #[cfg(any(target_pointer_width = "16", target_pointer_width = "32"))] + generate_nonzero_int_try_from_nonzero_int_harnesses!( + check_nonzero_int_try_from_i64, + i64 => ( + [u8, u16, u32, u64, u128, usize, i8, i16, i32, isize], + [], + ) ); - // signed non-zero integer -> unsigned non-zero integer fallible - generate_nonzero_int_try_from_nonzero_int_harness!( - i8 => u8, - check_nonzero_u8_try_from_nonzero_i8, - check_nonzero_u8_try_from_nonzero_i8_should_panic, - ); - generate_nonzero_int_try_from_nonzero_int_harness!( - i16 => u8, - check_nonzero_u8_try_from_nonzero_i16, - check_nonzero_u8_try_from_nonzero_i16_should_panic, - ); - generate_nonzero_int_try_from_nonzero_int_harness!( - i16 => u16, - check_nonzero_u16_try_from_nonzero_i16, - check_nonzero_u16_try_from_nonzero_i16_should_panic, - ); - generate_nonzero_int_try_from_nonzero_int_harness!( - i16 => usize, - check_nonzero_usize_try_from_nonzero_i16, - check_nonzero_usize_try_from_nonzero_i16_should_panic, - ); - generate_nonzero_int_try_from_nonzero_int_harness!( - i32 => u8, - check_nonzero_u8_try_from_nonzero_i32, - check_nonzero_u8_try_from_nonzero_i32_should_panic, - ); - generate_nonzero_int_try_from_nonzero_int_harness!( - i32 => u16, - check_nonzero_u16_try_from_nonzero_i32, - check_nonzero_u16_try_from_nonzero_i32_should_panic, - ); - generate_nonzero_int_try_from_nonzero_int_harness!( - i32 => u32, - check_nonzero_u32_try_from_nonzero_i32, - check_nonzero_u32_try_from_nonzero_i32_should_panic, - ); - generate_nonzero_int_try_from_nonzero_int_harness!( - i32 => usize, - check_nonzero_usize_try_from_nonzero_i32, - check_nonzero_usize_try_from_nonzero_i32_should_panic, - ); - generate_nonzero_int_try_from_nonzero_int_harness!( - i64 => u8, - check_nonzero_u8_try_from_nonzero_i64, - check_nonzero_u8_try_from_nonzero_i64_should_panic, - ); - generate_nonzero_int_try_from_nonzero_int_harness!( - i64 => u16, - check_nonzero_u16_try_from_nonzero_i64, - check_nonzero_u16_try_from_nonzero_i64_should_panic, - ); - generate_nonzero_int_try_from_nonzero_int_harness!( - i64 => u32, - check_nonzero_u32_try_from_nonzero_i64, - check_nonzero_u32_try_from_nonzero_i64_should_panic, - ); - generate_nonzero_int_try_from_nonzero_int_harness!( - i64 => u64, - check_nonzero_u64_try_from_nonzero_i64, - check_nonzero_u64_try_from_nonzero_i64_should_panic, - ); - generate_nonzero_int_try_from_nonzero_int_harness!( - i64 => usize, - check_nonzero_usize_try_from_nonzero_i64, - check_nonzero_usize_try_from_nonzero_i64_should_panic, - ); - generate_nonzero_int_try_from_nonzero_int_harness!( - i128 => u8, - check_nonzero_u8_try_from_nonzero_i128, - check_nonzero_u8_try_from_nonzero_i128_should_panic, - ); - generate_nonzero_int_try_from_nonzero_int_harness!( - i128 => u16, - check_nonzero_u16_try_from_nonzero_i128, - check_nonzero_u16_try_from_nonzero_i128_should_panic, - ); - generate_nonzero_int_try_from_nonzero_int_harness!( - i128 => u32, - check_nonzero_u32_try_from_nonzero_i128, - check_nonzero_u32_try_from_nonzero_i128_should_panic, - ); - generate_nonzero_int_try_from_nonzero_int_harness!( - i128 => u64, - check_nonzero_u64_try_from_nonzero_i128, - check_nonzero_u64_try_from_nonzero_i128_should_panic, - ); - generate_nonzero_int_try_from_nonzero_int_harness!( - i128 => u128, - check_nonzero_u128_try_from_nonzero_i128, - check_nonzero_u128_try_from_nonzero_i128_should_panic, - ); - generate_nonzero_int_try_from_nonzero_int_harness!( - i128 => usize, - check_nonzero_usize_try_from_nonzero_i128, - check_nonzero_usize_try_from_nonzero_i128_should_panic, - ); - generate_nonzero_int_try_from_nonzero_int_harness!( - isize => u8, - check_nonzero_u8_try_from_nonzero_isize, - check_nonzero_u8_try_from_nonzero_isize_should_panic, - ); - generate_nonzero_int_try_from_nonzero_int_harness!( - isize => u16, - check_nonzero_u16_try_from_nonzero_isize, - check_nonzero_u16_try_from_nonzero_isize_should_panic, - ); - generate_nonzero_int_try_from_nonzero_int_harness!( - isize => u32, - check_nonzero_u32_try_from_nonzero_isize, - check_nonzero_u32_try_from_nonzero_isize_should_panic, - ); - generate_nonzero_int_try_from_nonzero_int_harness!( - isize => u64, - check_nonzero_u64_try_from_nonzero_isize, - check_nonzero_u64_try_from_nonzero_isize_should_panic, - ); - generate_nonzero_int_try_from_nonzero_int_harness!( - isize => u128, - check_nonzero_u128_try_from_nonzero_isize, - check_nonzero_u128_try_from_nonzero_isize_should_panic, - ); - generate_nonzero_int_try_from_nonzero_int_harness!( - isize => usize, - check_nonzero_usize_try_from_nonzero_isize, - check_nonzero_usize_try_from_nonzero_isize_should_panic, + generate_nonzero_int_try_from_nonzero_int_harnesses!( + check_nonzero_int_try_from_i128, + i128 => ( + [u8, u16, u32, u64, u128, usize, i8, i16, i32, i64, isize], + [], + ) ); macro_rules! generate_float_to_int_harness { @@ -1186,53 +825,37 @@ mod verify { }; } + macro_rules! generate_float_to_int_harnesses { + ($ns:ident, $(($Float:tt => $($Int:tt),+ $(,)?)),+ $(,)?) => { + mod $ns { + use super::*; + + $( + mod $Float { + use super::*; + + $( + mod $Int { + use super::*; + + generate_float_to_int_harness!( + $Float => $Int, + check_float_to_int_unchecked + ); + } + )+ + } + )+ + } + }; + } + // float -> integer unchecked - generate_float_to_int_harness!(f16 => u8, check_u8_from_f16_unchecked); - generate_float_to_int_harness!(f16 => u16, check_u16_from_f16_unchecked); - generate_float_to_int_harness!(f16 => u32, check_u32_from_f16_unchecked); - generate_float_to_int_harness!(f16 => u64, check_u64_from_f16_unchecked); - generate_float_to_int_harness!(f16 => u128, check_u128_from_f16_unchecked); - generate_float_to_int_harness!(f16 => usize, check_usize_from_f16_unchecked); - generate_float_to_int_harness!(f16 => i8, check_i8_from_f16_unchecked); - generate_float_to_int_harness!(f16 => i16, check_i16_from_f16_unchecked); - generate_float_to_int_harness!(f16 => i32, check_i32_from_f16_unchecked); - generate_float_to_int_harness!(f16 => i64, check_i64_from_f16_unchecked); - generate_float_to_int_harness!(f16 => i128, check_i128_from_f16_unchecked); - generate_float_to_int_harness!(f16 => isize, check_isize_from_f16_unchecked); - generate_float_to_int_harness!(f32 => u8, check_u8_from_f32_unchecked); - generate_float_to_int_harness!(f32 => u16, check_u16_from_f32_unchecked); - generate_float_to_int_harness!(f32 => u32, check_u32_from_f32_unchecked); - generate_float_to_int_harness!(f32 => u64, check_u64_from_f32_unchecked); - generate_float_to_int_harness!(f32 => u128, check_u128_from_f32_unchecked); - generate_float_to_int_harness!(f32 => usize, check_usize_from_f32_unchecked); - generate_float_to_int_harness!(f32 => i8, check_i8_from_f32_unchecked); - generate_float_to_int_harness!(f32 => i16, check_i16_from_f32_unchecked); - generate_float_to_int_harness!(f32 => i32, check_i32_from_f32_unchecked); - generate_float_to_int_harness!(f32 => i64, check_i64_from_f32_unchecked); - generate_float_to_int_harness!(f32 => i128, check_i128_from_f32_unchecked); - generate_float_to_int_harness!(f32 => isize, check_isize_from_f32_unchecked); - generate_float_to_int_harness!(f64 => u8, check_u8_from_f64_unchecked); - generate_float_to_int_harness!(f64 => u16, check_u16_from_f64_unchecked); - generate_float_to_int_harness!(f64 => u32, check_u32_from_f64_unchecked); - generate_float_to_int_harness!(f64 => u64, check_u64_from_f64_unchecked); - generate_float_to_int_harness!(f64 => u128, check_u128_from_f64_unchecked); - generate_float_to_int_harness!(f64 => usize, check_usize_from_f64_unchecked); - generate_float_to_int_harness!(f64 => i8, check_i8_from_f64_unchecked); - generate_float_to_int_harness!(f64 => i16, check_i16_from_f64_unchecked); - generate_float_to_int_harness!(f64 => i32, check_i32_from_f64_unchecked); - generate_float_to_int_harness!(f64 => i64, check_i64_from_f64_unchecked); - generate_float_to_int_harness!(f64 => i128, check_i128_from_f64_unchecked); - generate_float_to_int_harness!(f64 => isize, check_isize_from_f64_unchecked); - generate_float_to_int_harness!(f128 => u8, check_u8_from_f128_unchecked); - generate_float_to_int_harness!(f128 => u16, check_u16_from_f128_unchecked); - generate_float_to_int_harness!(f128 => u32, check_u32_from_f128_unchecked); - generate_float_to_int_harness!(f128 => u64, check_u64_from_f128_unchecked); - generate_float_to_int_harness!(f128 => u128, check_u128_from_f128_unchecked); - generate_float_to_int_harness!(f128 => usize, check_usize_from_f128_unchecked); - generate_float_to_int_harness!(f128 => i8, check_i8_from_f128_unchecked); - generate_float_to_int_harness!(f128 => i16, check_i16_from_f128_unchecked); - generate_float_to_int_harness!(f128 => i32, check_i32_from_f128_unchecked); - generate_float_to_int_harness!(f128 => i64, check_i64_from_f128_unchecked); - generate_float_to_int_harness!(f128 => i128, check_i128_from_f128_unchecked); - generate_float_to_int_harness!(f128 => isize, check_isize_from_f128_unchecked); + generate_float_to_int_harnesses!( + check_f16_to_int_unchecked, + (f16 => u8, u16, u32, u64, u128, usize, i8, i16, i32, i64, i128, isize), + (f32 => u8, u16, u32, u64, u128, usize, i8, i16, i32, i64, i128, isize), + (f64 => u8, u16, u32, u64, u128, usize, i8, i16, i32, i64, i128, isize), + (f128 => u8, u16, u32, u64, u128, usize, i8, i16, i32, i64, i128, isize), + ); }