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