summaryrefslogtreecommitdiffstats
path: root/vendor/zerovec/src/lib.rs
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/zerovec/src/lib.rs')
-rw-r--r--vendor/zerovec/src/lib.rs41
1 files changed, 40 insertions, 1 deletions
diff --git a/vendor/zerovec/src/lib.rs b/vendor/zerovec/src/lib.rs
index add52f113..961d62f34 100644
--- a/vendor/zerovec/src/lib.rs
+++ b/vendor/zerovec/src/lib.rs
@@ -403,7 +403,8 @@ pub use zerovec_derive::make_ule;
///
/// This can be attached to structs containing only [`AsULE`] types with the last fields being
/// [`Cow<'a, str>`](alloc::borrow::Cow), [`ZeroSlice`], or [`VarZeroSlice`]. If there is more than one such field, it will be represented
-/// using [`MultiFieldsULE`](crate::ule::MultiFieldsULE) and getters will be generated.
+/// using [`MultiFieldsULE`](crate::ule::MultiFieldsULE) and getters will be generated. Other VarULE fields will be detected if they are
+/// tagged with `#[zerovec::varule(NameOfVarULETy)]`.
///
/// The type must be [`PartialEq`] and [`Eq`].
///
@@ -517,3 +518,41 @@ pub use zerovec_derive::make_ule;
/// ```
#[cfg(feature = "derive")]
pub use zerovec_derive::make_varule;
+
+#[cfg(test)]
+mod tests {
+ use super::*;
+ use core::mem::size_of;
+
+ /// Checks that the size of the type is one of the given sizes.
+ /// The size might differ across Rust versions or channels.
+ macro_rules! check_size_of {
+ ($sizes:pat, $type:path) => {
+ assert!(
+ matches!(size_of::<$type>(), $sizes),
+ concat!(stringify!($type), " is of size {}"),
+ size_of::<$type>()
+ );
+ };
+ }
+
+ #[test]
+ fn check_sizes() {
+ check_size_of!(24, ZeroVec<u8>);
+ check_size_of!(24, ZeroVec<u32>);
+ check_size_of!(32 | 24, VarZeroVec<[u8]>);
+ check_size_of!(32 | 24, VarZeroVec<str>);
+ check_size_of!(48, ZeroMap<u32, u32>);
+ check_size_of!(56 | 48, ZeroMap<u32, str>);
+ check_size_of!(56 | 48, ZeroMap<str, u32>);
+ check_size_of!(64 | 48, ZeroMap<str, str>);
+ check_size_of!(120 | 96, ZeroMap2d<str, str, str>);
+ check_size_of!(32 | 24, vecs::FlexZeroVec);
+
+ check_size_of!(32, Option<ZeroVec<u8>>);
+ check_size_of!(32, Option<VarZeroVec<str>>);
+ check_size_of!(64 | 56, Option<ZeroMap<str, str>>);
+ check_size_of!(120 | 104, Option<ZeroMap2d<str, str, str>>);
+ check_size_of!(32, Option<vecs::FlexZeroVec>);
+ }
+}