document test changes

This commit is contained in:
Erik Desjardins 2020-07-16 18:54:26 -04:00
parent 2e431c62b6
commit 3924672ccc

View file

@ -103,11 +103,19 @@ enum Option2<A, B> {
None
}
// Two layouts are considered for `CanBeNicheFilledButShouldnt`:
// Niche-filling:
// { u32 (4 bytes), NonZeroU8 + tag in niche (1 byte), padding (3 bytes) }
// Tagged:
// { tag (1 byte), NonZeroU8 (1 byte), padding (2 bytes), u32 (4 bytes) }
// Both are the same size (due to padding),
// but the tagged layout is better as the tag creates a niche with 254 invalid values,
// allowing types like `Option<Option<CanBeNicheFilledButShouldnt>>` to fit into 8 bytes.
pub enum CanBeNicheFilledButShouldnt {
A(NonZeroU8, u32),
B
}
pub enum AlwaysTagged {
pub enum AlwaysTaggedBecauseItHasNoNiche {
A(u8, u32),
B
}
@ -159,7 +167,7 @@ pub fn main() {
assert_eq!(size_of::<CanBeNicheFilledButShouldnt>(), 8);
assert_eq!(size_of::<Option<CanBeNicheFilledButShouldnt>>(), 8);
assert_eq!(size_of::<Option<Option<CanBeNicheFilledButShouldnt>>>(), 8);
assert_eq!(size_of::<AlwaysTagged>(), 8);
assert_eq!(size_of::<Option<AlwaysTagged>>(), 8);
assert_eq!(size_of::<Option<Option<AlwaysTagged>>>(), 8);
assert_eq!(size_of::<AlwaysTaggedBecauseItHasNoNiche>(), 8);
assert_eq!(size_of::<Option<AlwaysTaggedBecauseItHasNoNiche>>(), 8);
assert_eq!(size_of::<Option<Option<AlwaysTaggedBecauseItHasNoNiche>>>(), 8);
}