13 changes: 13 additions & 0 deletions libc/test/include/stdbit_test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,11 @@ unsigned stdc_leading_ones_us(unsigned short) noexcept { return 0xBBU; }
unsigned stdc_leading_ones_ui(unsigned) noexcept { return 0xBCU; }
unsigned stdc_leading_ones_ul(unsigned long) noexcept { return 0xBDU; }
unsigned stdc_leading_ones_ull(unsigned long long) noexcept { return 0xBFU; }
unsigned stdc_trailing_zeros_uc(unsigned char) noexcept { return 0xCAU; }
unsigned stdc_trailing_zeros_us(unsigned short) noexcept { return 0xCBU; }
unsigned stdc_trailing_zeros_ui(unsigned) noexcept { return 0xCCU; }
unsigned stdc_trailing_zeros_ul(unsigned long) noexcept { return 0xCDU; }
unsigned stdc_trailing_zeros_ull(unsigned long long) noexcept { return 0xCFU; }
}

#include "include/llvm-libc-macros/stdbit-macros.h"
Expand All @@ -52,3 +57,11 @@ TEST(LlvmLibcStdbitTest, TypeGenericMacroLeadingOnes) {
EXPECT_EQ(stdc_leading_ones(0UL), 0xBDU);
EXPECT_EQ(stdc_leading_ones(0ULL), 0xBFU);
}

TEST(LlvmLibcStdbitTest, TypeGenericMacroTrailingZeros) {
EXPECT_EQ(stdc_trailing_zeros(static_cast<unsigned char>(0U)), 0xCAU);
EXPECT_EQ(stdc_trailing_zeros(static_cast<unsigned short>(0U)), 0xCBU);
EXPECT_EQ(stdc_trailing_zeros(0U), 0xCCU);
EXPECT_EQ(stdc_trailing_zeros(0UL), 0xCDU);
EXPECT_EQ(stdc_trailing_zeros(0ULL), 0xCFU);
}
130 changes: 20 additions & 110 deletions libc/test/src/stdbit/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,112 +1,22 @@
add_custom_target(libc-stdbit-tests)

add_libc_test(
stdc_leading_zeros_uc_test
SUITE
libc-stdbit-tests
SRCS
stdc_leading_zeros_uc_test.cpp
DEPENDS
libc.src.__support.CPP.limits
libc.src.stdbit.stdc_leading_zeros_uc
)

add_libc_test(
stdc_leading_zeros_us_test
SUITE
libc-stdbit-tests
SRCS
stdc_leading_zeros_us_test.cpp
DEPENDS
libc.src.__support.CPP.limits
libc.src.stdbit.stdc_leading_zeros_us
)

add_libc_test(
stdc_leading_zeros_ui_test
SUITE
libc-stdbit-tests
SRCS
stdc_leading_zeros_ui_test.cpp
DEPENDS
libc.src.__support.CPP.limits
libc.src.stdbit.stdc_leading_zeros_ui
)

add_libc_test(
stdc_leading_zeros_ul_test
SUITE
libc-stdbit-tests
SRCS
stdc_leading_zeros_ul_test.cpp
DEPENDS
libc.src.__support.CPP.limits
libc.src.stdbit.stdc_leading_zeros_ul
)

add_libc_test(
stdc_leading_zeros_ull_test
SUITE
libc-stdbit-tests
SRCS
stdc_leading_zeros_ull_test.cpp
DEPENDS
libc.src.__support.CPP.limits
libc.src.stdbit.stdc_leading_zeros_ull
)

add_libc_test(
stdc_leading_ones_uc_test
SUITE
libc-stdbit-tests
SRCS
stdc_leading_ones_uc_test.cpp
DEPENDS
libc.src.__support.CPP.limits
libc.src.stdbit.stdc_leading_ones_uc
)

add_libc_test(
stdc_leading_ones_us_test
SUITE
libc-stdbit-tests
SRCS
stdc_leading_ones_us_test.cpp
DEPENDS
libc.src.__support.CPP.limits
libc.src.stdbit.stdc_leading_ones_us
)

add_libc_test(
stdc_leading_ones_ui_test
SUITE
libc-stdbit-tests
SRCS
stdc_leading_ones_ui_test.cpp
DEPENDS
libc.src.__support.CPP.limits
libc.src.stdbit.stdc_leading_ones_ui
)

add_libc_test(
stdc_leading_ones_ul_test
SUITE
libc-stdbit-tests
SRCS
stdc_leading_ones_ul_test.cpp
DEPENDS
libc.src.__support.CPP.limits
libc.src.stdbit.stdc_leading_ones_ul
)

add_libc_test(
stdc_leading_ones_ull_test
SUITE
libc-stdbit-tests
SRCS
stdc_leading_ones_ull_test.cpp
DEPENDS
libc.src.__support.CPP.limits
libc.src.stdbit.stdc_leading_ones_ull
)

set(prefixes
leading_zeros
leading_ones
trailing_zeros
)
set(suffixes c s i l ll)
foreach(prefix IN LISTS prefixes)
foreach(suffix IN LISTS suffixes)
add_libc_test(
stdc_${prefix}_u${suffix}_test
SUITE
libc-stdbit-tests
SRCS
stdc_${prefix}_u${suffix}_test.cpp
DEPENDS
libc.src.__support.CPP.limits
libc.src.stdbit.stdc_${prefix}_u${suffix}
)
endforeach()
endforeach()
21 changes: 21 additions & 0 deletions libc/test/src/stdbit/stdc_trailing_zeros_uc_test.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
//===-- Unittests for stdc_trailing_zeros_uc ------------------------------===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//

#include "src/__support/CPP/limits.h"
#include "src/stdbit/stdc_trailing_zeros_uc.h"
#include "test/UnitTest/Test.h"

TEST(LlvmLibcStdcTrailingZerosUcTest, Zero) {
EXPECT_EQ(LIBC_NAMESPACE::stdc_trailing_zeros_uc(0U),
static_cast<unsigned>(UCHAR_WIDTH));
}

TEST(LlvmLibcStdcTrailingZerosUcTest, OneHot) {
for (unsigned i = 0U; i != UCHAR_WIDTH; ++i)
EXPECT_EQ(LIBC_NAMESPACE::stdc_trailing_zeros_uc(1U << i), i);
}
21 changes: 21 additions & 0 deletions libc/test/src/stdbit/stdc_trailing_zeros_ui_test.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
//===-- Unittests for stdc_trailing_zeros_ui ------------------------------===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//

#include "src/__support/CPP/limits.h"
#include "src/stdbit/stdc_trailing_zeros_ui.h"
#include "test/UnitTest/Test.h"

TEST(LlvmLibcStdcTrailingZerosUiTest, Zero) {
EXPECT_EQ(LIBC_NAMESPACE::stdc_trailing_zeros_ui(0U),
static_cast<unsigned>(UINT_WIDTH));
}

TEST(LlvmLibcStdcTrailingZerosUiTest, OneHot) {
for (unsigned i = 0U; i != UINT_WIDTH; ++i)
EXPECT_EQ(LIBC_NAMESPACE::stdc_trailing_zeros_ui(1U << i), i);
}
21 changes: 21 additions & 0 deletions libc/test/src/stdbit/stdc_trailing_zeros_ul_test.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
//===-- Unittests for stdc_trailing_zeros_ul ------------------------------===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//

#include "src/__support/CPP/limits.h"
#include "src/stdbit/stdc_trailing_zeros_ul.h"
#include "test/UnitTest/Test.h"

TEST(LlvmLibcStdcTrailingZerosUlTest, Zero) {
EXPECT_EQ(LIBC_NAMESPACE::stdc_trailing_zeros_ul(0U),
static_cast<unsigned>(ULONG_WIDTH));
}

TEST(LlvmLibcStdcTrailingZerosUlTest, OneHot) {
for (unsigned i = 0U; i != ULONG_WIDTH; ++i)
EXPECT_EQ(LIBC_NAMESPACE::stdc_trailing_zeros_ul(1UL << i), i);
}
21 changes: 21 additions & 0 deletions libc/test/src/stdbit/stdc_trailing_zeros_ull_test.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
//===-- Unittests for stdc_trailing_zeros_ull -----------------------------===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//

#include "src/__support/CPP/limits.h"
#include "src/stdbit/stdc_trailing_zeros_ull.h"
#include "test/UnitTest/Test.h"

TEST(LlvmLibcStdcTrailingZerosUllTest, Zero) {
EXPECT_EQ(LIBC_NAMESPACE::stdc_trailing_zeros_ull(0U),
static_cast<unsigned>(ULLONG_WIDTH));
}

TEST(LlvmLibcStdcTrailingZerosUllTest, OneHot) {
for (unsigned i = 0U; i != ULLONG_WIDTH; ++i)
EXPECT_EQ(LIBC_NAMESPACE::stdc_trailing_zeros_ull(1ULL << i), i);
}
21 changes: 21 additions & 0 deletions libc/test/src/stdbit/stdc_trailing_zeros_us_test.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
//===-- Unittests for stdc_trailing_zeros_us ------------------------------===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//

#include "src/__support/CPP/limits.h"
#include "src/stdbit/stdc_trailing_zeros_us.h"
#include "test/UnitTest/Test.h"

TEST(LlvmLibcStdcTrailingZerosUsTest, Zero) {
EXPECT_EQ(LIBC_NAMESPACE::stdc_trailing_zeros_us(0U),
static_cast<unsigned>(USHRT_WIDTH));
}

TEST(LlvmLibcStdcTrailingZerosUsTest, OneHot) {
for (unsigned i = 0U; i != USHRT_WIDTH; ++i)
EXPECT_EQ(LIBC_NAMESPACE::stdc_trailing_zeros_us(1U << i), i);
}