Skip to main content

wiwi_memory_usage/impls/
slice.rs

1use crate::MemoryUsage;
2use crate::macros::impl_memory_usage;
3
4impl_memory_usage! {
5	{ T: MemoryUsage }
6	{ T: [const] MemoryUsage }
7	// todo this is only dyn because mapping methods aren't const, can be rewritten
8	dyn [T]
9	|self| {
10		// each element counts its own stack usage too
11		self.iter().map(T::memory_usage).sum()
12	};
13	compacted |self| self.iter().map(T::memory_usage_compacted).sum();
14	compact |self| self.iter_mut().map(T::compact_memory).sum();
15	ref compacted |self| self.iter().map(T::memory_usage_compacted_ref).sum();
16	ref compact |self| self.iter().map(T::compact_memory_ref).sum();
17}
18
19#[cfg(test)]
20mod tests {
21	use super::*;
22	use crate::MemoryUsageStatic as _;
23
24	#[test]
25	fn slice_usage() {
26		let str_size = usize::MEMORY_USAGE + <*const ()>::MEMORY_USAGE;
27
28		let slice = &[1u8, 2, 3, 4, 5] as &[_];
29
30		assert_eq!((*slice).memory_usage(), 5);
31
32		let slice = &["1", "12", "123"] as &[_];
33		let expected = (3 * str_size) + 1 + 2 + 3;
34
35		assert_eq!((*slice).memory_usage(), expected);
36	}
37}