aboutsummaryrefslogtreecommitdiff
path: root/libc/test
diff options
context:
space:
mode:
authorNick Desaulniers <nickdesaulniers@users.noreply.github.com>2024-03-07 08:38:04 -0800
committerGitHub <noreply@github.com>2024-03-07 08:38:04 -0800
commit101a13df71734b06116846a3a39c0880eb33456d (patch)
tree98383fb90aad4d920761d29fba74585febc87d5a /libc/test
parent904a6aedca422d43f4f893bb97b2990e86b909e4 (diff)
downloadllvm-101a13df71734b06116846a3a39c0880eb33456d.zip
llvm-101a13df71734b06116846a3a39c0880eb33456d.tar.gz
llvm-101a13df71734b06116846a3a39c0880eb33456d.tar.bz2
[libc][stdbit] implement stdc_bit_floor (C23) (#84233)
Diffstat (limited to 'libc/test')
-rw-r--r--libc/test/include/stdbit_test.cpp17
-rw-r--r--libc/test/src/stdbit/CMakeLists.txt1
-rw-r--r--libc/test/src/stdbit/stdc_bit_floor_uc_test.cpp22
-rw-r--r--libc/test/src/stdbit/stdc_bit_floor_ui_test.cpp21
-rw-r--r--libc/test/src/stdbit/stdc_bit_floor_ul_test.cpp21
-rw-r--r--libc/test/src/stdbit/stdc_bit_floor_ull_test.cpp21
-rw-r--r--libc/test/src/stdbit/stdc_bit_floor_us_test.cpp22
7 files changed, 125 insertions, 0 deletions
diff --git a/libc/test/include/stdbit_test.cpp b/libc/test/include/stdbit_test.cpp
index dfb7c97..20820d5 100644
--- a/libc/test/include/stdbit_test.cpp
+++ b/libc/test/include/stdbit_test.cpp
@@ -91,6 +91,13 @@ unsigned stdc_bit_width_us(unsigned short) noexcept { return 0x4BU; }
unsigned stdc_bit_width_ui(unsigned) noexcept { return 0x4CU; }
unsigned stdc_bit_width_ul(unsigned long) noexcept { return 0x4DU; }
unsigned stdc_bit_width_ull(unsigned long long) noexcept { return 0x4EU; }
+unsigned char stdc_bit_floor_uc(unsigned char) noexcept { return 0x5AU; }
+unsigned short stdc_bit_floor_us(unsigned short) noexcept { return 0x5BU; }
+unsigned stdc_bit_floor_ui(unsigned) noexcept { return 0x5CU; }
+unsigned long stdc_bit_floor_ul(unsigned long) noexcept { return 0x5DU; }
+unsigned long long stdc_bit_floor_ull(unsigned long long) noexcept {
+ return 0x5EU;
+}
}
#include "include/llvm-libc-macros/stdbit-macros.h"
@@ -190,3 +197,13 @@ TEST(LlvmLibcStdbitTest, TypeGenericMacroBitWidth) {
EXPECT_EQ(stdc_bit_width(1UL), 0x4DU);
EXPECT_EQ(stdc_bit_width(1ULL), 0x4EU);
}
+
+TEST(LlvmLibcStdbitTest, TypeGenericMacroBitFloor) {
+ EXPECT_EQ(stdc_bit_floor(static_cast<unsigned char>(0U)),
+ static_cast<unsigned char>(0x5AU));
+ EXPECT_EQ(stdc_bit_floor(static_cast<unsigned short>(0U)),
+ static_cast<unsigned short>(0x5BU));
+ EXPECT_EQ(stdc_bit_floor(0U), 0x5CU);
+ EXPECT_EQ(stdc_bit_floor(0UL), 0x5DUL);
+ EXPECT_EQ(stdc_bit_floor(0ULL), 0x5EULL);
+}
diff --git a/libc/test/src/stdbit/CMakeLists.txt b/libc/test/src/stdbit/CMakeLists.txt
index f7e17d7..3aed56c 100644
--- a/libc/test/src/stdbit/CMakeLists.txt
+++ b/libc/test/src/stdbit/CMakeLists.txt
@@ -13,6 +13,7 @@ set(prefixes
count_ones
has_single_bit
bit_width
+ bit_floor
)
set(suffixes c s i l ll)
foreach(prefix IN LISTS prefixes)
diff --git a/libc/test/src/stdbit/stdc_bit_floor_uc_test.cpp b/libc/test/src/stdbit/stdc_bit_floor_uc_test.cpp
new file mode 100644
index 0000000..254abd0
--- /dev/null
+++ b/libc/test/src/stdbit/stdc_bit_floor_uc_test.cpp
@@ -0,0 +1,22 @@
+//===-- Unittests for stdc_bit_floor_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_bit_floor_uc.h"
+#include "test/UnitTest/Test.h"
+
+TEST(LlvmLibcStdcBitfloorUcTest, Zero) {
+ EXPECT_EQ(LIBC_NAMESPACE::stdc_bit_floor_uc(0U),
+ static_cast<unsigned char>(0));
+}
+
+TEST(LlvmLibcStdcBitfloorUcTest, Ones) {
+ for (unsigned i = 0U; i != UCHAR_WIDTH; ++i)
+ EXPECT_EQ(LIBC_NAMESPACE::stdc_bit_floor_uc(UCHAR_MAX >> i),
+ static_cast<unsigned char>(1 << (UCHAR_WIDTH - i - 1)));
+}
diff --git a/libc/test/src/stdbit/stdc_bit_floor_ui_test.cpp b/libc/test/src/stdbit/stdc_bit_floor_ui_test.cpp
new file mode 100644
index 0000000..5379040
--- /dev/null
+++ b/libc/test/src/stdbit/stdc_bit_floor_ui_test.cpp
@@ -0,0 +1,21 @@
+//===-- Unittests for stdc_bit_floor_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_bit_floor_ui.h"
+#include "test/UnitTest/Test.h"
+
+TEST(LlvmLibcStdcBitfloorUiTest, Zero) {
+ EXPECT_EQ(LIBC_NAMESPACE::stdc_bit_floor_ui(0U), 0U);
+}
+
+TEST(LlvmLibcStdcBitfloorUiTest, Ones) {
+ for (unsigned i = 0U; i != INT_WIDTH; ++i)
+ EXPECT_EQ(LIBC_NAMESPACE::stdc_bit_floor_ui(UINT_MAX >> i),
+ 1U << (UINT_WIDTH - i - 1));
+}
diff --git a/libc/test/src/stdbit/stdc_bit_floor_ul_test.cpp b/libc/test/src/stdbit/stdc_bit_floor_ul_test.cpp
new file mode 100644
index 0000000..1c57443
--- /dev/null
+++ b/libc/test/src/stdbit/stdc_bit_floor_ul_test.cpp
@@ -0,0 +1,21 @@
+//===-- Unittests for stdc_bit_floor_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_bit_floor_ul.h"
+#include "test/UnitTest/Test.h"
+
+TEST(LlvmLibcStdcBitfloorUlTest, Zero) {
+ EXPECT_EQ(LIBC_NAMESPACE::stdc_bit_floor_ul(0UL), 0UL);
+}
+
+TEST(LlvmLibcStdcBitfloorUlTest, Ones) {
+ for (unsigned i = 0U; i != ULONG_WIDTH; ++i)
+ EXPECT_EQ(LIBC_NAMESPACE::stdc_bit_floor_ul(ULONG_MAX >> i),
+ 1UL << (ULONG_WIDTH - i - 1));
+}
diff --git a/libc/test/src/stdbit/stdc_bit_floor_ull_test.cpp b/libc/test/src/stdbit/stdc_bit_floor_ull_test.cpp
new file mode 100644
index 0000000..4717d42
--- /dev/null
+++ b/libc/test/src/stdbit/stdc_bit_floor_ull_test.cpp
@@ -0,0 +1,21 @@
+//===-- Unittests for stdc_bit_floor_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_bit_floor_ull.h"
+#include "test/UnitTest/Test.h"
+
+TEST(LlvmLibcStdcBitfloorUllTest, Zero) {
+ EXPECT_EQ(LIBC_NAMESPACE::stdc_bit_floor_ull(0ULL), 0ULL);
+}
+
+TEST(LlvmLibcStdcBitfloorUllTest, Ones) {
+ for (unsigned i = 0U; i != ULLONG_WIDTH; ++i)
+ EXPECT_EQ(LIBC_NAMESPACE::stdc_bit_floor_ull(ULLONG_MAX >> i),
+ 1ULL << (ULLONG_WIDTH - i - 1));
+}
diff --git a/libc/test/src/stdbit/stdc_bit_floor_us_test.cpp b/libc/test/src/stdbit/stdc_bit_floor_us_test.cpp
new file mode 100644
index 0000000..4df87fb
--- /dev/null
+++ b/libc/test/src/stdbit/stdc_bit_floor_us_test.cpp
@@ -0,0 +1,22 @@
+//===-- Unittests for stdc_bit_floor_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_bit_floor_us.h"
+#include "test/UnitTest/Test.h"
+
+TEST(LlvmLibcStdcBitfloorUsTest, Zero) {
+ EXPECT_EQ(LIBC_NAMESPACE::stdc_bit_floor_us(0U),
+ static_cast<unsigned short>(0));
+}
+
+TEST(LlvmLibcStdcBitfloorUsTest, Ones) {
+ for (unsigned i = 0U; i != USHRT_WIDTH; ++i)
+ EXPECT_EQ(LIBC_NAMESPACE::stdc_bit_floor_us(USHRT_MAX >> i),
+ static_cast<unsigned short>(1 << (USHRT_WIDTH - i - 1)));
+}