wiwi_memory_usage/impls/
string.rs1#[cfg(feature = "std")]
2use crate::macros::impl_memory_usage;
3use crate::macros::impl_memory_usage_const;
4
5impl_memory_usage_const! {
6 str |self| self.len();
7}
8
9#[cfg(feature = "std")]
10impl_memory_usage! {
11 String
12 |self| size_of::<String>() + self.capacity();
13 compacted |self| size_of::<String>() + self.len();
14 compact |self| {
15 let old_cap = self.capacity();
16 self.shrink_to_fit();
17 old_cap - self.len()
18 };
19 }
22
23#[cfg(test)]
24mod tests {
25 #[cfg(feature = "std")]
26 use crate::MemoryUsageStatic as _;
27 use crate::{ MemoryUsage as _, MemoryUsageConst as _ };
28
29 #[test]
30 fn str_usage() {
31 let str = "awawawa";
32
33 assert_eq!(str.memory_usage(), 7);
34 assert_eq!(str.memory_usage_const(), 7);
35 }
36
37 #[cfg(feature = "std")]
38 #[test]
39 fn string_usage() {
40 let string_size = <*const u8>::MEMORY_USAGE + usize::MEMORY_USAGE + usize::MEMORY_USAGE;
41
42 let mut string = String::with_capacity(247);
43 let string_capacity = string.capacity();
44 string.push_str("awawawa");
45 let expected = string_size + string_capacity;
46 let expected_compacted = string_size + 7;
47 let expected_compact = expected - expected_compacted;
48
49 assert_eq!(string.memory_usage(), expected);
50 assert_eq!(string.memory_usage_compacted(), expected_compacted);
51 assert_eq!(string.compact_memory(), expected_compact);
52 }
53}