Skip to main content

wiwi_memory_usage/impls/
marker.rs

1use crate::macros::{ impl_memory_usage_static, impl_memory_usage_size_of };
2use core::marker::*;
3
4impl_memory_usage_static! {
5	{ T: ?Sized }
6	PhantomData<T>
7	=> size_of::<PhantomData<T>>();
8}
9
10impl_memory_usage_size_of! {
11	PhantomPinned
12}
13
14#[cfg(feature = "nightly")]
15impl_memory_usage_static! {
16	{ T: ?Sized }
17	PhantomCovariant<T>
18	=> size_of::<PhantomCovariant<T>>();
19}
20
21#[cfg(feature = "nightly")]
22impl_memory_usage_static! {
23	{ 'h }
24	PhantomCovariantLifetime<'h>
25	=> size_of::<PhantomCovariantLifetime<'h>>();
26}
27
28#[cfg(feature = "nightly")]
29impl_memory_usage_static! {
30	{ T: ?Sized }
31	PhantomContravariant<T>
32	=> size_of::<PhantomContravariant<T>>();
33}
34
35#[cfg(feature = "nightly")]
36impl_memory_usage_static! {
37	{ 'h }
38	PhantomContravariantLifetime<'h>
39	=> size_of::<PhantomContravariantLifetime<'h>>();
40}
41
42#[cfg(feature = "nightly")]
43impl_memory_usage_static! {
44	{ T: ?Sized }
45	PhantomInvariant<T>
46	=> size_of::<PhantomInvariant<T>>();
47}
48
49#[cfg(feature = "nightly")]
50impl_memory_usage_static! {
51	{ 'h }
52	PhantomInvariantLifetime<'h>
53	=> size_of::<PhantomInvariantLifetime<'h>>();
54}
55
56#[cfg(test)]
57mod tests {
58	use super::*;
59	use crate::{
60		MemoryUsage as _,
61		MemoryUsageStatic as _
62	};
63
64	#[test]
65	fn phantom_data_usage() {
66		let phantom = PhantomData::<usize>;
67
68		assert_eq!(phantom.memory_usage(), 0);
69		assert_eq!(<PhantomData<usize>>::MEMORY_USAGE, 0);
70	}
71
72	#[cfg(feature = "nightly")]
73	macro_rules! phantom_data_variance_usage {
74		{ $($test_name:ident($ty:path))* } => {
75			$(
76				#[test]
77				fn $test_name() {
78					let phantom: $ty = variance();
79
80					assert_eq!(phantom.memory_usage(), 0);
81					assert_eq!(<$ty>::MEMORY_USAGE, 0);
82				}
83			)*
84		}
85	}
86
87	#[cfg(feature = "nightly")]
88	phantom_data_variance_usage! {
89		phantom_covariant_usage(PhantomCovariant<usize>)
90		phantom_covariant_lifetime_usage(PhantomCovariantLifetime<'static>)
91
92		phantom_contravariant_usage(PhantomContravariant<usize>)
93		phantom_contravariant_lifetime_usage(PhantomContravariantLifetime<'static>)
94
95		phantom_invariant_usage(PhantomInvariant<usize>)
96		phantom_invariant_lifetime_usage(PhantomInvariantLifetime<'static>)
97	}
98}