Skip to main content

wiwi_memory_usage/impls/
array.rs

1use 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	// todo this is dyn because slice is dyn for now
8	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	// todo this is dyn because slice is dyn for now
20	dyn [T; N]
21	// each element counts its own stack usage too
22	=> 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}