wiwi_memory_usage/impls/
array.rs1use crate::{ MemoryUsage, MemoryUsageConst, MemoryUsageStatic };
2use crate::macros::{
3 impl_memory_usage,
4 impl_memory_usage_only_const,
5 impl_memory_usage_only_static
6};
7
8impl_memory_usage! {
9 { T: MemoryUsage, const N: usize } [T; N]
10 |self| self.as_slice().memory_usage();
11 compacted |self| self.as_slice().memory_usage_compacted();
12 compact |self| self.as_mut_slice().compact_memory();
13 ref compacted |self| self.as_slice().memory_usage_compacted_ref();
14 ref compact |self| self.as_slice().compact_memory_ref();
15}
16
17impl_memory_usage_only_const! {
18 { T: MemoryUsageConst, const N: usize }
19 { T: [const] MemoryUsageConst, const N: usize }
20 [T; N]
21 |self| self.as_slice().memory_usage_const();
22}
23
24impl_memory_usage_only_static! {
25 { T: MemoryUsageStatic, const N: usize }
26 { T: [const] MemoryUsageStatic, const N: usize }
27 [T; N]
28 => T::MEMORY_USAGE * N;
30}
31
32#[cfg(test)]
33mod tests {
34 use super::*;
35
36 #[test]
37 fn array_usage() {
38 let str_size = usize::MEMORY_USAGE + <*const ()>::MEMORY_USAGE;
39
40 let array = [1u8, 2, 3, 4, 5];
41
42 assert_eq!(array.memory_usage(), 5);
43 assert_eq!(array.memory_usage_const(), 5);
44 assert_eq!(<[u8; 5]>::MEMORY_USAGE, 5);
45
46 let array = ["1", "12", "123"];
47 let expected = (3 * str_size) + 1 + 2 + 3;
48
49 assert_eq!(array.memory_usage(), expected);
50 assert_eq!(array.memory_usage_const(), expected);
51 }
52}