Skip to main content

wiwi_memory_usage/impls/
number.rs

1use crate::macros::impl_memory_usage_size_of;
2
3impl_memory_usage_size_of! {
4	u8
5	u16
6	u32
7	u64
8	u128
9	usize
10
11	i8
12	i16
13	i32
14	i64
15	i128
16	isize
17
18	f32
19	f64
20}
21
22#[cfg(feature = "nightly")]
23impl_memory_usage_size_of! {
24	f16
25	f128
26}
27
28#[cfg(test)]
29mod tests {
30	use crate::{
31		MemoryUsage as _,
32		MemoryUsageConst as _,
33		MemoryUsageStatic as _
34	};
35
36	const SIZE_SIZE: usize = cfg_select! {
37		target_pointer_width = "16" => { 2 }
38		target_pointer_width = "32" => { 4 }
39		target_pointer_width = "64" => { 8 }
40	};
41
42	macro_rules! test_num {
43		{ $($test_name:ident($ty:ident): $usage:expr)* } => {
44			$(
45				#[test]
46				fn $test_name() {
47					let num: $ty = 24u8 as _; // 7
48
49					assert_eq!(num.memory_usage(), $usage);
50					assert_eq!(num.memory_usage_const(), $usage);
51					assert_eq!($ty::MEMORY_USAGE, $usage);
52				}
53			)*
54		}
55	}
56
57	test_num! {
58		u8_usage(u8): 1
59		u16_usage(u16): 2
60		u32_usage(u32): 4
61		u64_usage(u64): 8
62		u128_usage(u128): 16
63		usize_usage(usize): SIZE_SIZE
64
65		i8_usage(i8): 1
66		i16_usage(i16): 2
67		i32_usage(i32): 4
68		i64_usage(i64): 8
69		i128_usage(i128): 16
70		isize_usage(isize): SIZE_SIZE
71
72		f32_usage(f32): 4
73		f64_usage(f64): 8
74	}
75
76	#[cfg(feature = "nightly")]
77	test_num! {
78		f16_usage(f16): 2
79		f128_usage(f128): 16
80	}
81}