#include <vector>
#include "gmock/gmock.h"
#include "source/util/bit_vector.h"
namespace spvtools {
namespace utils {
namespace {
using BitVectorTest = ::testing::Test;
TEST(BitVectorTest, Initialize) {
BitVector bvec;
for (int i = 1; i < 10000; i *= 2) {
EXPECT_FALSE(bvec.Get(i));
}
}
TEST(BitVectorTest, Set) {
BitVector bvec;
for (int i = 3; i < 10000; i *= 2) {
bvec.Set(i);
}
for (int i = 1; i < 10000; i *= 2) {
EXPECT_FALSE(bvec.Get(i));
}
for (int i = 3; i < 10000; i *= 2) {
EXPECT_TRUE(bvec.Get(i));
}
}
TEST(BitVectorTest, SetReturnValue) {
BitVector bvec;
for (int i = 3; i < 10000; i *= 2) {
EXPECT_FALSE(bvec.Set(i));
}
for (int i = 3; i < 10000; i *= 2) {
EXPECT_TRUE(bvec.Set(i));
}
}
TEST(BitVectorTest, Clear) {
BitVector bvec;
for (int i = 3; i < 10000; i *= 2) {
bvec.Set(i);
}
for (int i = 3; i < 10000; i *= 2) {
EXPECT_TRUE(bvec.Get(i));
}
for (int i = 6; i < 10000; i *= 2) {
bvec.Clear(i);
}
EXPECT_TRUE(bvec.Get(3));
for (int i = 6; i < 10000; i *= 2) {
EXPECT_FALSE(bvec.Get(i));
}
}
TEST(BitVectorTest, ClearReturnValue) {
BitVector bvec;
for (int i = 3; i < 10000; i *= 2) {
bvec.Set(i);
}
for (int i = 3; i < 10000; i *= 2) {
EXPECT_TRUE(bvec.Clear(i));
}
for (int i = 3; i < 10000; i *= 2) {
EXPECT_FALSE(bvec.Clear(i));
}
}
TEST(BitVectorTest, SimpleOrTest) {
BitVector bvec1;
bvec1.Set(3);
bvec1.Set(4);
BitVector bvec2;
bvec2.Set(2);
bvec2.Set(4);
EXPECT_TRUE(bvec1.Or(bvec2));
EXPECT_FALSE(bvec1.Get(0));
EXPECT_FALSE(bvec1.Get(1));
EXPECT_TRUE(bvec1.Get(2));
EXPECT_TRUE(bvec1.Get(3));
EXPECT_TRUE(bvec1.Get(4));
}
TEST(BitVectorTest, ResizingOrTest) {
BitVector bvec1;
bvec1.Set(3);
bvec1.Set(4);
BitVector bvec2;
bvec2.Set(10000);
EXPECT_TRUE(bvec1.Or(bvec2));
EXPECT_FALSE(bvec1.Get(0));
EXPECT_FALSE(bvec1.Get(1));
EXPECT_FALSE(bvec1.Get(2));
EXPECT_TRUE(bvec1.Get(3));
EXPECT_TRUE(bvec1.Get(10000));
}
TEST(BitVectorTest, SubsetOrTest) {
BitVector bvec1;
bvec1.Set(3);
bvec1.Set(4);
BitVector bvec2;
bvec2.Set(3);
EXPECT_FALSE(bvec1.Or(bvec2));
}
} } }