@@ -28,3 +28,68 @@ TEST(BitvectorTest, IncrementUntilZero) {
2828 bv.incrementUntilZero (pos);
2929 EXPECT_EQ (pos, 8u );
3030}
31+
32+ TEST (BitvectorTest, ConstructWithValue) {
33+ bowen::bitvector<> bv (10 , true );
34+ ASSERT_EQ (bv.size (), 10u );
35+ for (size_t i = 0 ; i < bv.size (); ++i) {
36+ EXPECT_TRUE (bv[i]);
37+ }
38+ }
39+
40+ TEST (BitvectorTest, OutOfRangeThrows) {
41+ bowen::bitvector<> bv (5 );
42+ EXPECT_THROW (bv[5 ], std::out_of_range);
43+ EXPECT_THROW (bv.set_bit (5 , true ), std::out_of_range);
44+ }
45+
46+ TEST (BitvectorTest, CopyAndAssignment) {
47+ bowen::bitvector<> bv1;
48+ bv1.push_back (false );
49+ bv1.push_back (true );
50+
51+ bowen::bitvector<> bv2 (bv1);
52+ ASSERT_EQ (bv2.size (), bv1.size ());
53+ EXPECT_FALSE (bv2[0 ]);
54+ EXPECT_TRUE (bv2[1 ]);
55+
56+ bv1.set_bit (0 , true );
57+ EXPECT_TRUE (bv1[0 ]);
58+ EXPECT_FALSE (bv2[0 ]);
59+
60+ bowen::bitvector<> bv3;
61+ bv3 = bv1;
62+ ASSERT_EQ (bv3.size (), bv1.size ());
63+ EXPECT_TRUE (bv3[0 ]);
64+ EXPECT_TRUE (bv3[1 ]);
65+ }
66+
67+ TEST (BitvectorTest, AssignResizesAndSets) {
68+ bowen::bitvector<> bv;
69+ bv.assign (12 , true );
70+ ASSERT_EQ (bv.size (), 12u );
71+ for (size_t i = 0 ; i < bv.size (); ++i)
72+ EXPECT_TRUE (bv[i]);
73+
74+ bv.assign (4 , false );
75+ ASSERT_EQ (bv.size (), 4u );
76+ for (size_t i = 0 ; i < bv.size (); ++i)
77+ EXPECT_FALSE (bv[i]);
78+ }
79+
80+ TEST (BitvectorTest, IteratorTraversal) {
81+ bowen::bitvector<> bv;
82+ bv.push_back (true );
83+ bv.push_back (false );
84+ bv.push_back (true );
85+
86+ std::vector<bool > values;
87+ auto it = bv.begin ();
88+ for (size_t i = 0 ; i < bv.size (); ++i, ++it) {
89+ values.push_back (*it);
90+ }
91+ ASSERT_EQ (values.size (), 3u );
92+ EXPECT_TRUE (values[0 ]);
93+ EXPECT_FALSE (values[1 ]);
94+ EXPECT_TRUE (values[2 ]);
95+ }
0 commit comments