@@ -112,6 +112,34 @@ enum NicheWithData {
112
112
D ( u32 , u32 ) ,
113
113
}
114
114
115
+ // A type with almost 2^16 invalid values.
116
+ #[ repr( u16 ) ]
117
+ pub enum NicheU16 {
118
+ _0,
119
+ }
120
+
121
+ pub enum EnumManyVariant < X > {
122
+ Dataful ( u8 , X ) ,
123
+
124
+ // 0x100 niche variants.
125
+ _00, _01, _02, _03, _04, _05, _06, _07, _08, _09, _0A, _0B, _0C, _0D, _0E, _0F,
126
+ _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _1A, _1B, _1C, _1D, _1E, _1F,
127
+ _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _2A, _2B, _2C, _2D, _2E, _2F,
128
+ _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _3A, _3B, _3C, _3D, _3E, _3F,
129
+ _40, _41, _42, _43, _44, _45, _46, _47, _48, _49, _4A, _4B, _4C, _4D, _4E, _4F,
130
+ _50, _51, _52, _53, _54, _55, _56, _57, _58, _59, _5A, _5B, _5C, _5D, _5E, _5F,
131
+ _60, _61, _62, _63, _64, _65, _66, _67, _68, _69, _6A, _6B, _6C, _6D, _6E, _6F,
132
+ _70, _71, _72, _73, _74, _75, _76, _77, _78, _79, _7A, _7B, _7C, _7D, _7E, _7F,
133
+ _80, _81, _82, _83, _84, _85, _86, _87, _88, _89, _8A, _8B, _8C, _8D, _8E, _8F,
134
+ _90, _91, _92, _93, _94, _95, _96, _97, _98, _99, _9A, _9B, _9C, _9D, _9E, _9F,
135
+ _A0, _A1, _A2, _A3, _A4, _A5, _A6, _A7, _A8, _A9, _AA, _AB, _AC, _AD, _AE, _AF,
136
+ _B0, _B1, _B2, _B3, _B4, _B5, _B6, _B7, _B8, _B9, _BA, _BB, _BC, _BD, _BE, _BF,
137
+ _C0, _C1, _C2, _C3, _C4, _C5, _C6, _C7, _C8, _C9, _CA, _CB, _CC, _CD, _CE, _CF,
138
+ _D0, _D1, _D2, _D3, _D4, _D5, _D6, _D7, _D8, _D9, _DA, _DB, _DC, _DD, _DE, _DF,
139
+ _E0, _E1, _E2, _E3, _E4, _E5, _E6, _E7, _E8, _E9, _EA, _EB, _EC, _ED, _EE, _EF,
140
+ _F0, _F1, _F2, _F3, _F4, _F5, _F6, _F7, _F8, _F9, _FA, _FB, _FC, _FD, _FE, _FF,
141
+ }
142
+
115
143
pub fn main ( ) {
116
144
assert_eq ! ( size_of:: <u8 >( ) , 1 as usize ) ;
117
145
assert_eq ! ( size_of:: <u32 >( ) , 4 as usize ) ;
@@ -172,4 +200,14 @@ pub fn main() {
172
200
assert_eq ! ( size_of:: <FillPadding >( ) , 8 ) ;
173
201
assert_eq ! ( size_of:: <Option <FillPadding >>( ) , 8 ) ;
174
202
assert_eq ! ( size_of:: <Option <Option <FillPadding >>>( ) , 8 ) ;
203
+
204
+ assert_eq ! ( size_of:: <Result <( std:: num:: NonZeroU8 , u8 , u8 ) , u16 >>( ) , 4 ) ;
205
+ assert_eq ! ( size_of:: <Option <Result <( std:: num:: NonZeroU8 , u8 , u8 ) , u16 >>>( ) , 4 ) ;
206
+ assert_eq ! ( size_of:: <Result <( std:: num:: NonZeroU8 , u8 , u8 , u8 ) , u16 >>( ) , 4 ) ;
207
+
208
+ assert_eq ! ( size_of:: <EnumManyVariant <u16 >>( ) , 6 ) ;
209
+ assert_eq ! ( size_of:: <EnumManyVariant <NicheU16 >>( ) , 4 ) ;
210
+ assert_eq ! ( size_of:: <EnumManyVariant <Option <NicheU16 >>>( ) , 4 ) ;
211
+ assert_eq ! ( size_of:: <EnumManyVariant <Option2 <NicheU16 , u8 >>>( ) , 6 ) ;
212
+ assert_eq ! ( size_of:: <EnumManyVariant <Option <( NicheU16 , u8 ) >>>( ) , 6 ) ;
175
213
}
0 commit comments