diff options
Diffstat (limited to 'libc/test/src/__support/math_extras_test.cpp')
-rw-r--r-- | libc/test/src/__support/math_extras_test.cpp | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/libc/test/src/__support/math_extras_test.cpp b/libc/test/src/__support/math_extras_test.cpp index ed064363d446..e642248881a4 100644 --- a/libc/test/src/__support/math_extras_test.cpp +++ b/libc/test/src/__support/math_extras_test.cpp @@ -13,6 +13,14 @@ namespace LIBC_NAMESPACE { +// TODO: add UInt<128> support. +using UnsignedTypesNoBigInt = testing::TypeList< +#if defined(LIBC_TYPES_HAS_INT128) + __uint128_t, +#endif // LIBC_TYPES_HAS_INT128 + unsigned char, unsigned short, unsigned int, unsigned long, + unsigned long long>; + TEST(LlvmLibcBlockMathExtrasTest, mask_trailing_ones) { EXPECT_EQ(0_u8, (mask_leading_ones<uint8_t, 0>())); EXPECT_EQ(0_u8, (mask_trailing_ones<uint8_t, 0>())); @@ -61,4 +69,36 @@ TEST(LlvmLibcBlockMathExtrasTest, mask_trailing_ones) { (mask_leading_ones<UInt128, 128>())); } +TYPED_TEST(LlvmLibcBitTest, FirstLeadingZero, UnsignedTypesNoBigInt) { + EXPECT_EQ(first_leading_zero<T>(cpp::numeric_limits<T>::max()), 0); + for (int i = 0U; i != cpp::numeric_limits<T>::digits; ++i) + EXPECT_EQ(first_leading_zero<T>(~(T(1) << i)), + cpp::numeric_limits<T>::digits - i); +} + +TYPED_TEST(LlvmLibcBitTest, FirstLeadingOne, UnsignedTypesNoBigInt) { + EXPECT_EQ(first_leading_one<T>(static_cast<T>(0)), 0); + for (int i = 0U; i != cpp::numeric_limits<T>::digits; ++i) + EXPECT_EQ(first_leading_one<T>(T(1) << i), + cpp::numeric_limits<T>::digits - i); +} + +TYPED_TEST(LlvmLibcBitTest, FirstTrailingZero, UnsignedTypesNoBigInt) { + EXPECT_EQ(first_trailing_zero<T>(cpp::numeric_limits<T>::max()), 0); + for (int i = 0U; i != cpp::numeric_limits<T>::digits; ++i) + EXPECT_EQ(first_trailing_zero<T>(~(T(1) << i)), i + 1); +} + +TYPED_TEST(LlvmLibcBitTest, FirstTrailingOne, UnsignedTypesNoBigInt) { + EXPECT_EQ(first_trailing_one<T>(cpp::numeric_limits<T>::max()), 0); + for (int i = 0U; i != cpp::numeric_limits<T>::digits; ++i) + EXPECT_EQ(first_trailing_one<T>(T(1) << i), i + 1); +} + +TYPED_TEST(LlvmLibcBitTest, CountZeros, UnsignedTypesNoBigInt) { + EXPECT_EQ(count_zeros(T(0)), cpp::numeric_limits<T>::digits); + for (int i = 0; i != cpp::numeric_limits<T>::digits; ++i) + EXPECT_EQ(count_zeros<T>(cpp::numeric_limits<T>::max() >> i), i); +} + } // namespace LIBC_NAMESPACE |