1*2a7ed8fcSSiva Chandra Reddy //===-- Unittests for Bitset ----------------------------------------------===//
2*2a7ed8fcSSiva Chandra Reddy //
3*2a7ed8fcSSiva Chandra Reddy // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4*2a7ed8fcSSiva Chandra Reddy // See https://llvm.org/LICENSE.txt for license information.
5*2a7ed8fcSSiva Chandra Reddy // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6*2a7ed8fcSSiva Chandra Reddy //
7*2a7ed8fcSSiva Chandra Reddy //===----------------------------------------------------------------------===//
8*2a7ed8fcSSiva Chandra Reddy 
9*2a7ed8fcSSiva Chandra Reddy #include "src/__support/CPP/Bitset.h"
10*2a7ed8fcSSiva Chandra Reddy #include "utils/UnitTest/Test.h"
11*2a7ed8fcSSiva Chandra Reddy 
TEST(LlvmLibcBitsetTest,SetBitForSizeEqualToOne)12*2a7ed8fcSSiva Chandra Reddy TEST(LlvmLibcBitsetTest, SetBitForSizeEqualToOne) {
13*2a7ed8fcSSiva Chandra Reddy   __llvm_libc::cpp::Bitset<1> bitset;
14*2a7ed8fcSSiva Chandra Reddy   EXPECT_FALSE(bitset.test(0));
15*2a7ed8fcSSiva Chandra Reddy   bitset.set(0);
16*2a7ed8fcSSiva Chandra Reddy   EXPECT_TRUE(bitset.test(0));
17*2a7ed8fcSSiva Chandra Reddy }
18*2a7ed8fcSSiva Chandra Reddy 
TEST(LlvmLibcBitsetTest,SetsBitsForSizeEqualToTwo)19*2a7ed8fcSSiva Chandra Reddy TEST(LlvmLibcBitsetTest, SetsBitsForSizeEqualToTwo) {
20*2a7ed8fcSSiva Chandra Reddy   __llvm_libc::cpp::Bitset<2> bitset;
21*2a7ed8fcSSiva Chandra Reddy   bitset.set(0);
22*2a7ed8fcSSiva Chandra Reddy   EXPECT_TRUE(bitset.test(0));
23*2a7ed8fcSSiva Chandra Reddy   bitset.set(1);
24*2a7ed8fcSSiva Chandra Reddy   EXPECT_TRUE(bitset.test(1));
25*2a7ed8fcSSiva Chandra Reddy }
26*2a7ed8fcSSiva Chandra Reddy 
TEST(LlvmLibcBitsetTest,SetsAllBitsForSizeLessThanEight)27*2a7ed8fcSSiva Chandra Reddy TEST(LlvmLibcBitsetTest, SetsAllBitsForSizeLessThanEight) {
28*2a7ed8fcSSiva Chandra Reddy   __llvm_libc::cpp::Bitset<7> bitset;
29*2a7ed8fcSSiva Chandra Reddy   for (size_t i = 0; i < 7; ++i)
30*2a7ed8fcSSiva Chandra Reddy     bitset.set(i);
31*2a7ed8fcSSiva Chandra Reddy   // Verify all bits are now set.
32*2a7ed8fcSSiva Chandra Reddy   for (size_t j = 0; j < 7; ++j)
33*2a7ed8fcSSiva Chandra Reddy     EXPECT_TRUE(bitset.test(j));
34*2a7ed8fcSSiva Chandra Reddy }
35*2a7ed8fcSSiva Chandra Reddy 
TEST(LlvmLibcBitsetTest,SetsAllBitsForSizeLessThanSixteen)36*2a7ed8fcSSiva Chandra Reddy TEST(LlvmLibcBitsetTest, SetsAllBitsForSizeLessThanSixteen) {
37*2a7ed8fcSSiva Chandra Reddy   __llvm_libc::cpp::Bitset<15> bitset;
38*2a7ed8fcSSiva Chandra Reddy   for (size_t i = 0; i < 15; ++i)
39*2a7ed8fcSSiva Chandra Reddy     bitset.set(i);
40*2a7ed8fcSSiva Chandra Reddy   // Verify all bits are now set.
41*2a7ed8fcSSiva Chandra Reddy   for (size_t j = 0; j < 15; ++j)
42*2a7ed8fcSSiva Chandra Reddy     EXPECT_TRUE(bitset.test(j));
43*2a7ed8fcSSiva Chandra Reddy }
44*2a7ed8fcSSiva Chandra Reddy 
TEST(LlvmLibcBitsetTest,SetsAllBitsForSizeLessThanThirtyTwo)45*2a7ed8fcSSiva Chandra Reddy TEST(LlvmLibcBitsetTest, SetsAllBitsForSizeLessThanThirtyTwo) {
46*2a7ed8fcSSiva Chandra Reddy   __llvm_libc::cpp::Bitset<31> bitset;
47*2a7ed8fcSSiva Chandra Reddy   for (size_t i = 0; i < 31; ++i)
48*2a7ed8fcSSiva Chandra Reddy     bitset.set(i);
49*2a7ed8fcSSiva Chandra Reddy   // Verify all bits are now set.
50*2a7ed8fcSSiva Chandra Reddy   for (size_t j = 0; j < 31; ++j)
51*2a7ed8fcSSiva Chandra Reddy     EXPECT_TRUE(bitset.test(j));
52*2a7ed8fcSSiva Chandra Reddy }
53*2a7ed8fcSSiva Chandra Reddy 
TEST(LlvmLibcBitsetTest,DefaultHasNoSetBits)54*2a7ed8fcSSiva Chandra Reddy TEST(LlvmLibcBitsetTest, DefaultHasNoSetBits) {
55*2a7ed8fcSSiva Chandra Reddy   __llvm_libc::cpp::Bitset<64> bitset;
56*2a7ed8fcSSiva Chandra Reddy   for (size_t i = 0; i < 64; ++i) {
57*2a7ed8fcSSiva Chandra Reddy     EXPECT_FALSE(bitset.test(i));
58*2a7ed8fcSSiva Chandra Reddy   }
59*2a7ed8fcSSiva Chandra Reddy   // Same for odd number.
60*2a7ed8fcSSiva Chandra Reddy   __llvm_libc::cpp::Bitset<65> odd_bitset;
61*2a7ed8fcSSiva Chandra Reddy   for (size_t i = 0; i < 65; ++i) {
62*2a7ed8fcSSiva Chandra Reddy     EXPECT_FALSE(odd_bitset.test(i));
63*2a7ed8fcSSiva Chandra Reddy   }
64*2a7ed8fcSSiva Chandra Reddy }
65*2a7ed8fcSSiva Chandra Reddy 
TEST(LlvmLibcBitsetTest,SettingBitXDoesNotSetBitY)66*2a7ed8fcSSiva Chandra Reddy TEST(LlvmLibcBitsetTest, SettingBitXDoesNotSetBitY) {
67*2a7ed8fcSSiva Chandra Reddy   for (size_t i = 0; i < 256; ++i) {
68*2a7ed8fcSSiva Chandra Reddy     // Initialize within the loop to start with a fresh Bitset.
69*2a7ed8fcSSiva Chandra Reddy     __llvm_libc::cpp::Bitset<256> bitset;
70*2a7ed8fcSSiva Chandra Reddy     bitset.set(i);
71*2a7ed8fcSSiva Chandra Reddy 
72*2a7ed8fcSSiva Chandra Reddy     for (size_t neighbor = 0; neighbor < 256; ++neighbor) {
73*2a7ed8fcSSiva Chandra Reddy       if (neighbor == i)
74*2a7ed8fcSSiva Chandra Reddy         EXPECT_TRUE(bitset.test(neighbor));
75*2a7ed8fcSSiva Chandra Reddy       else
76*2a7ed8fcSSiva Chandra Reddy         EXPECT_FALSE(bitset.test(neighbor));
77*2a7ed8fcSSiva Chandra Reddy     }
78*2a7ed8fcSSiva Chandra Reddy   }
79*2a7ed8fcSSiva Chandra Reddy   // Same for odd number.
80*2a7ed8fcSSiva Chandra Reddy   for (size_t i = 0; i < 255; ++i) {
81*2a7ed8fcSSiva Chandra Reddy 
82*2a7ed8fcSSiva Chandra Reddy     __llvm_libc::cpp::Bitset<255> bitset;
83*2a7ed8fcSSiva Chandra Reddy     bitset.set(i);
84*2a7ed8fcSSiva Chandra Reddy 
85*2a7ed8fcSSiva Chandra Reddy     for (size_t neighbor = 0; neighbor < 255; ++neighbor) {
86*2a7ed8fcSSiva Chandra Reddy       if (neighbor == i)
87*2a7ed8fcSSiva Chandra Reddy         EXPECT_TRUE(bitset.test(neighbor));
88*2a7ed8fcSSiva Chandra Reddy       else
89*2a7ed8fcSSiva Chandra Reddy         EXPECT_FALSE(bitset.test(neighbor));
90*2a7ed8fcSSiva Chandra Reddy     }
91*2a7ed8fcSSiva Chandra Reddy   }
92*2a7ed8fcSSiva Chandra Reddy }
93*2a7ed8fcSSiva Chandra Reddy 
TEST(LlvmLibcBitsetTest,SettingBitXDoesNotResetBitY)94*2a7ed8fcSSiva Chandra Reddy TEST(LlvmLibcBitsetTest, SettingBitXDoesNotResetBitY) {
95*2a7ed8fcSSiva Chandra Reddy   __llvm_libc::cpp::Bitset<128> bitset;
96*2a7ed8fcSSiva Chandra Reddy   for (size_t i = 0; i < 128; ++i)
97*2a7ed8fcSSiva Chandra Reddy     bitset.set(i);
98*2a7ed8fcSSiva Chandra Reddy 
99*2a7ed8fcSSiva Chandra Reddy   // Verify all bits are now set.
100*2a7ed8fcSSiva Chandra Reddy   for (size_t j = 0; j < 128; ++j)
101*2a7ed8fcSSiva Chandra Reddy     EXPECT_TRUE(bitset.test(j));
102*2a7ed8fcSSiva Chandra Reddy }
103