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		MemoryUsageStatic as _
33	};
34
35	const SIZE_SIZE: usize = cfg_select! {
36		target_pointer_width = "16" => { 2 }
37		target_pointer_width = "32" => { 4 }
38		target_pointer_width = "64" => { 8 }
39	};
40
41	macro_rules! test_num {
42		{ $($test_name:ident($ty:ident): $usage:expr)* } => {
43			$(
44				#[test]
45				fn $test_name() {
46					let num: $ty = 24u8 as _; // 7
47
48					assert_eq!(num.memory_usage(), $usage);
49					assert_eq!($ty::MEMORY_USAGE, $usage);
50				}
51			)*
52		}
53	}
54
55	test_num! {
56		u8_usage(u8): 1
57		u16_usage(u16): 2
58		u32_usage(u32): 4
59		u64_usage(u64): 8
60		u128_usage(u128): 16
61		usize_usage(usize): SIZE_SIZE
62
63		i8_usage(i8): 1
64		i16_usage(i16): 2
65		i32_usage(i32): 4
66		i64_usage(i64): 8
67		i128_usage(i128): 16
68		isize_usage(isize): SIZE_SIZE
69
70		f32_usage(f32): 4
71		f64_usage(f64): 8
72	}
73
74	#[cfg(feature = "nightly")]
75	test_num! {
76		f16_usage(f16): 2
77		f128_usage(f128): 16
78	}
79}