document test changes
This commit is contained in:
parent
2e431c62b6
commit
3924672ccc
1 changed files with 12 additions and 4 deletions
|
@ -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);
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue