61 changes: 61 additions & 0 deletions libc/test/src/stdbit/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ add_libc_test(
SRCS
stdc_leading_zeros_uc_test.cpp
DEPENDS
libc.src.__support.CPP.limits
libc.src.stdbit.stdc_leading_zeros_uc
)

Expand All @@ -17,6 +18,7 @@ add_libc_test(
SRCS
stdc_leading_zeros_us_test.cpp
DEPENDS
libc.src.__support.CPP.limits
libc.src.stdbit.stdc_leading_zeros_us
)

Expand All @@ -27,6 +29,7 @@ add_libc_test(
SRCS
stdc_leading_zeros_ui_test.cpp
DEPENDS
libc.src.__support.CPP.limits
libc.src.stdbit.stdc_leading_zeros_ui
)

Expand All @@ -37,6 +40,7 @@ add_libc_test(
SRCS
stdc_leading_zeros_ul_test.cpp
DEPENDS
libc.src.__support.CPP.limits
libc.src.stdbit.stdc_leading_zeros_ul
)

Expand All @@ -47,5 +51,62 @@ add_libc_test(
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
)

22 changes: 22 additions & 0 deletions libc/test/src/stdbit/stdc_leading_ones_uc_test.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
//===-- Unittests for stdc_leading_ones_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_leading_ones_uc.h"
#include "test/UnitTest/Test.h"

TEST(LlvmLibcStdcLeadingOnesUcTest, All) {
EXPECT_EQ(LIBC_NAMESPACE::stdc_leading_ones_uc(UCHAR_MAX),
static_cast<unsigned char>(UCHAR_WIDTH));
}

TEST(LlvmLibcStdcLeadingOnesUcTest, ZeroHot) {
for (unsigned i = 0U; i != UCHAR_WIDTH; ++i)
EXPECT_EQ(LIBC_NAMESPACE::stdc_leading_ones_uc(~(1U << i)),
static_cast<unsigned char>(UCHAR_WIDTH - i - 1));
}
22 changes: 22 additions & 0 deletions libc/test/src/stdbit/stdc_leading_ones_ui_test.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
//===-- Unittests for stdc_leading_ones_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_leading_ones_ui.h"
#include "test/UnitTest/Test.h"

TEST(LlvmLibcStdcLeadingOnesUiTest, All) {
EXPECT_EQ(LIBC_NAMESPACE::stdc_leading_ones_ui(UINT_MAX),
static_cast<unsigned>(UINT_WIDTH));
}

TEST(LlvmLibcStdcLeadingOnesUiTest, ZeroHot) {
for (unsigned i = 0U; i != UINT_WIDTH; ++i)
EXPECT_EQ(LIBC_NAMESPACE::stdc_leading_ones_ui(~(1U << i)),
static_cast<unsigned>(UINT_WIDTH - i - 1));
}
22 changes: 22 additions & 0 deletions libc/test/src/stdbit/stdc_leading_ones_ul_test.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
//===-- Unittests for stdc_leading_ones_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_leading_ones_ul.h"
#include "test/UnitTest/Test.h"

TEST(LlvmLibcStdcLeadingOnesUlTest, All) {
EXPECT_EQ(LIBC_NAMESPACE::stdc_leading_ones_ul(ULONG_MAX),
static_cast<unsigned long>(ULONG_WIDTH));
}

TEST(LlvmLibcStdcLeadingOnesUlTest, ZeroHot) {
for (unsigned i = 0U; i != ULONG_WIDTH; ++i)
EXPECT_EQ(LIBC_NAMESPACE::stdc_leading_ones_ul(~(1UL << i)),
static_cast<unsigned long>(ULONG_WIDTH - i - 1));
}
22 changes: 22 additions & 0 deletions libc/test/src/stdbit/stdc_leading_ones_ull_test.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
//===-- Unittests for stdc_leading_ones_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_leading_ones_ull.h"
#include "test/UnitTest/Test.h"

TEST(LlvmLibcStdcLeadingOnesUllTest, All) {
EXPECT_EQ(LIBC_NAMESPACE::stdc_leading_ones_ull(ULLONG_MAX),
static_cast<unsigned long long>(ULLONG_WIDTH));
}

TEST(LlvmLibcStdcLeadingOnesUllTest, ZeroHot) {
for (unsigned i = 0U; i != ULLONG_WIDTH; ++i)
EXPECT_EQ(LIBC_NAMESPACE::stdc_leading_ones_ull(~(1ULL << i)),
static_cast<unsigned long long>(ULLONG_WIDTH - i - 1));
}
22 changes: 22 additions & 0 deletions libc/test/src/stdbit/stdc_leading_ones_us_test.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
//===-- Unittests for stdc_leading_ones_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_leading_ones_us.h"
#include "test/UnitTest/Test.h"

TEST(LlvmLibcStdcLeadingOnesUsTest, All) {
EXPECT_EQ(LIBC_NAMESPACE::stdc_leading_ones_us(USHRT_MAX),
static_cast<unsigned short>(USHRT_WIDTH));
}

TEST(LlvmLibcStdcLeadingOnesUsTest, ZeroHot) {
for (unsigned i = 0U; i != USHRT_WIDTH; ++i)
EXPECT_EQ(LIBC_NAMESPACE::stdc_leading_ones_us(~(1U << i)),
static_cast<unsigned short>(USHRT_WIDTH - i - 1));
}