Skip to main content

wiwi_memory_usage/impls/
nonzero.rs

1use crate::macros::impl_memory_usage_size_of;
2use core::num::NonZero;
3
4// NonZero is generic, but the trait in the trait bound is unstable impl detail
5// so we must list it out
6
7impl_memory_usage_size_of! {
8	NonZero<u8>
9	NonZero<u16>
10	NonZero<u32>
11	NonZero<u64>
12	NonZero<u128>
13	NonZero<usize>
14
15	NonZero<i8>
16	NonZero<i16>
17	NonZero<i32>
18	NonZero<i64>
19	NonZero<i128>
20	NonZero<isize>
21
22	NonZero<char>
23}
24
25#[cfg(test)]
26mod tests {
27	use super::*;
28	use crate::{
29		MemoryUsage as _,
30		MemoryUsageConst as _,
31		MemoryUsageStatic as _
32	};
33
34	macro_rules! test_nonzero {
35		{ $($test_name:ident($ty:ident = $val:literal))* } => {
36			$(
37				#[test]
38				fn $test_name() {
39					let num_nonzero: NonZero<$ty> = NonZero::new($val).unwrap();
40					let num: $ty = $val;
41
42					assert_eq!(num_nonzero.memory_usage(), num.memory_usage());
43					assert_eq!(num_nonzero.memory_usage_const(), num.memory_usage_const());
44					assert_eq!(<NonZero<$ty>>::MEMORY_USAGE, $ty::MEMORY_USAGE);
45				}
46			)*
47		}
48	}
49
50	test_nonzero! {
51		nonzero_u8_usage(u8 = 247)
52		nonzero_u16_usage(u16 = 247)
53		nonzero_u32_usage(u32 = 247)
54		nonzero_u64_usage(u64 = 247)
55		nonzero_u128_usage(u128 = 247)
56		nonzero_usize_usage(usize = 247)
57
58		nonzero_i8_usage(i8 = 24) // 7
59		nonzero_i16_usage(i16 = 247)
60		nonzero_i32_usage(i32 = 247)
61		nonzero_i64_usage(i64 = 247)
62		nonzero_i128_usage(i128 = 247)
63		nonzero_isize_usage(isize = 247)
64		nonzero_char_usage(char = '2') //47
65	}
66}