Files
clang-p2996/libc/test/utils/CPP/bitset_test.cpp
Siva Chandra Reddy f362aea42d [libc][NFC] Move utils/CPP to src/__support/CPP.
The idea is to move all pieces related to the actual libc sources to the
"src" directory. This allows downstream users to ship and build just the
"src" directory.

Reviewed By: michaelrj

Differential Revision: https://reviews.llvm.org/D112653
2021-10-28 15:50:00 +00:00

103 lines
2.8 KiB
C++

//===-- Unittests for Bitset ----------------------------------------------===//
//
// 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/Bitset.h"
#include "utils/UnitTest/Test.h"
TEST(LlvmLibcBitsetTest, SetBitForSizeEqualToOne) {
__llvm_libc::cpp::Bitset<1> bitset;
EXPECT_FALSE(bitset.test(0));
bitset.set(0);
EXPECT_TRUE(bitset.test(0));
}
TEST(LlvmLibcBitsetTest, SetsBitsForSizeEqualToTwo) {
__llvm_libc::cpp::Bitset<2> bitset;
bitset.set(0);
EXPECT_TRUE(bitset.test(0));
bitset.set(1);
EXPECT_TRUE(bitset.test(1));
}
TEST(LlvmLibcBitsetTest, SetsAllBitsForSizeLessThanEight) {
__llvm_libc::cpp::Bitset<7> bitset;
for (size_t i = 0; i < 7; ++i)
bitset.set(i);
// Verify all bits are now set.
for (size_t j = 0; j < 7; ++j)
EXPECT_TRUE(bitset.test(j));
}
TEST(LlvmLibcBitsetTest, SetsAllBitsForSizeLessThanSixteen) {
__llvm_libc::cpp::Bitset<15> bitset;
for (size_t i = 0; i < 15; ++i)
bitset.set(i);
// Verify all bits are now set.
for (size_t j = 0; j < 15; ++j)
EXPECT_TRUE(bitset.test(j));
}
TEST(LlvmLibcBitsetTest, SetsAllBitsForSizeLessThanThirtyTwo) {
__llvm_libc::cpp::Bitset<31> bitset;
for (size_t i = 0; i < 31; ++i)
bitset.set(i);
// Verify all bits are now set.
for (size_t j = 0; j < 31; ++j)
EXPECT_TRUE(bitset.test(j));
}
TEST(LlvmLibcBitsetTest, DefaultHasNoSetBits) {
__llvm_libc::cpp::Bitset<64> bitset;
for (size_t i = 0; i < 64; ++i) {
EXPECT_FALSE(bitset.test(i));
}
// Same for odd number.
__llvm_libc::cpp::Bitset<65> odd_bitset;
for (size_t i = 0; i < 65; ++i) {
EXPECT_FALSE(odd_bitset.test(i));
}
}
TEST(LlvmLibcBitsetTest, SettingBitXDoesNotSetBitY) {
for (size_t i = 0; i < 256; ++i) {
// Initialize within the loop to start with a fresh Bitset.
__llvm_libc::cpp::Bitset<256> bitset;
bitset.set(i);
for (size_t neighbor = 0; neighbor < 256; ++neighbor) {
if (neighbor == i)
EXPECT_TRUE(bitset.test(neighbor));
else
EXPECT_FALSE(bitset.test(neighbor));
}
}
// Same for odd number.
for (size_t i = 0; i < 255; ++i) {
__llvm_libc::cpp::Bitset<255> bitset;
bitset.set(i);
for (size_t neighbor = 0; neighbor < 255; ++neighbor) {
if (neighbor == i)
EXPECT_TRUE(bitset.test(neighbor));
else
EXPECT_FALSE(bitset.test(neighbor));
}
}
}
TEST(LlvmLibcBitsetTest, SettingBitXDoesNotResetBitY) {
__llvm_libc::cpp::Bitset<128> bitset;
for (size_t i = 0; i < 128; ++i)
bitset.set(i);
// Verify all bits are now set.
for (size_t j = 0; j < 128; ++j)
EXPECT_TRUE(bitset.test(j));
}