@@ -176,6 +176,69 @@ void TestDetermineMinBitSize(void)
176176 printf (" TestDetermineMinBitSize() passed\n " );
177177}
178178
179+ void TestMaskForBitSize (void )
180+ {
181+ VerifyOrQuit (MaskForBitSize<uint8_t >(0 ) == 0 );
182+ VerifyOrQuit (MaskForBitSize<uint8_t >(1 ) == 0x01 );
183+ VerifyOrQuit (MaskForBitSize<uint8_t >(2 ) == 0x03 );
184+ VerifyOrQuit (MaskForBitSize<uint8_t >(3 ) == 0x07 );
185+ VerifyOrQuit (MaskForBitSize<uint8_t >(4 ) == 0x0f );
186+ VerifyOrQuit (MaskForBitSize<uint8_t >(7 ) == 0x7f );
187+ VerifyOrQuit (MaskForBitSize<uint8_t >(8 ) == 0xff );
188+ VerifyOrQuit (MaskForBitSize<uint8_t >(9 ) == 0xff );
189+
190+ VerifyOrQuit (MaskForBitSize<uint16_t >(0 ) == 0 );
191+ VerifyOrQuit (MaskForBitSize<uint16_t >(7 ) == 0x007f );
192+ VerifyOrQuit (MaskForBitSize<uint16_t >(8 ) == 0x00ff );
193+ VerifyOrQuit (MaskForBitSize<uint16_t >(11 ) == 0x07ff );
194+ VerifyOrQuit (MaskForBitSize<uint16_t >(16 ) == 0xffff );
195+ VerifyOrQuit (MaskForBitSize<uint16_t >(20 ) == 0xffff );
196+
197+ VerifyOrQuit (MaskForBitSize<uint32_t >(0 ) == 0 );
198+ VerifyOrQuit (MaskForBitSize<uint32_t >(16 ) == 0x0000ffff );
199+ VerifyOrQuit (MaskForBitSize<uint32_t >(31 ) == 0x7fffffff );
200+ VerifyOrQuit (MaskForBitSize<uint32_t >(32 ) == 0xffffffff );
201+ VerifyOrQuit (MaskForBitSize<uint32_t >(33 ) == 0xffffffff );
202+
203+ VerifyOrQuit (MaskForBitSize<uint64_t >(0 ) == 0 );
204+ VerifyOrQuit (MaskForBitSize<uint64_t >(32 ) == 0xffffffffULL );
205+ VerifyOrQuit (MaskForBitSize<uint64_t >(63 ) == 0x7fffffffffffffffULL );
206+ VerifyOrQuit (MaskForBitSize<uint64_t >(64 ) == 0xffffffffffffffffULL );
207+ VerifyOrQuit (MaskForBitSize<uint64_t >(65 ) == 0xffffffffffffffffULL );
208+
209+ // Compile-time checks
210+
211+ static_assert (MaskForBitSize<uint8_t >(0 ) == 0 , " MaskForBitSize<uint8_t>(0) failed" );
212+ static_assert (MaskForBitSize<uint8_t >(1 ) == 0x01 , " MaskForBitSize<uint8_t>(1) failed" );
213+ static_assert (MaskForBitSize<uint8_t >(2 ) == 0x03 , " MaskForBitSize<uint8_t>(2) failed" );
214+ static_assert (MaskForBitSize<uint8_t >(3 ) == 0x07 , " MaskForBitSize<uint8_t>(3) failed" );
215+ static_assert (MaskForBitSize<uint8_t >(4 ) == 0x0f , " MaskForBitSize<uint8_t>(4) failed" );
216+ static_assert (MaskForBitSize<uint8_t >(7 ) == 0x7f , " MaskForBitSize<uint8_t>(7) failed" );
217+ static_assert (MaskForBitSize<uint8_t >(8 ) == 0xff , " MaskForBitSize<uint8_t>(8) failed" );
218+ static_assert (MaskForBitSize<uint8_t >(9 ) == 0xff , " MaskForBitSize<uint8_t>(9) failed" );
219+
220+ static_assert (MaskForBitSize<uint16_t >(0 ) == 0 , " MaskForBitSize<uint16_t>(0) failed" );
221+ static_assert (MaskForBitSize<uint16_t >(7 ) == 0x007f , " MaskForBitSize<uint16_t>(7) failed" );
222+ static_assert (MaskForBitSize<uint16_t >(8 ) == 0x00ff , " MaskForBitSize<uint16_t>(8) failed" );
223+ static_assert (MaskForBitSize<uint16_t >(11 ) == 0x07ff , " MaskForBitSize<uint16_t>(11) failed" );
224+ static_assert (MaskForBitSize<uint16_t >(16 ) == 0xffff , " MaskForBitSize<uint16_t>(16) failed" );
225+ static_assert (MaskForBitSize<uint16_t >(20 ) == 0xffff , " MaskForBitSize<uint16_t>(20) failed" );
226+
227+ static_assert (MaskForBitSize<uint32_t >(0 ) == 0 , " MaskForBitSize<uint32_t>(0) failed" );
228+ static_assert (MaskForBitSize<uint32_t >(16 ) == 0x0000ffff , " MaskForBitSize<uint32_t>(16) failed" );
229+ static_assert (MaskForBitSize<uint32_t >(31 ) == 0x7fffffff , " MaskForBitSize<uint32_t>(31) failed" );
230+ static_assert (MaskForBitSize<uint32_t >(32 ) == 0xffffffff , " MaskForBitSize<uint32_t>(32) failed" );
231+ static_assert (MaskForBitSize<uint32_t >(33 ) == 0xffffffff , " MaskForBitSize<uint32_t>(33) failed" );
232+
233+ static_assert (MaskForBitSize<uint64_t >(0 ) == 0 , " MaskForBitSize<uint64_t>(0) failed" );
234+ static_assert (MaskForBitSize<uint64_t >(32 ) == 0xffffffffULL , " MaskForBitSize<uint64_t>(32) failed" );
235+ static_assert (MaskForBitSize<uint64_t >(63 ) == 0x7fffffffffffffffULL , " MaskForBitSize<uint64_t>(63) failed" );
236+ static_assert (MaskForBitSize<uint64_t >(64 ) == 0xffffffffffffffffULL , " MaskForBitSize<uint64_t>(64) failed" );
237+ static_assert (MaskForBitSize<uint64_t >(65 ) == 0xffffffffffffffffULL , " MaskForBitSize<uint64_t>(65) failed" );
238+
239+ printf (" TestMaskForBitSize() passed\n " );
240+ }
241+
179242} // namespace ot
180243
181244int main (void )
@@ -184,6 +247,7 @@ int main(void)
184247 ot::TestCountMatchingBitsAllCombinations ();
185248 ot::TestCountMatchingBitsExamples ();
186249 ot::TestDetermineMinBitSize ();
250+ ot::TestMaskForBitSize ();
187251
188252 printf (" All tests passed\n " );
189253 return 0 ;
0 commit comments