diff options
author | Aina Niemetz <aina.niemetz@gmail.com> | 2021-03-19 10:28:14 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-03-19 17:28:14 +0000 |
commit | 58e219362b2e9a7d7b9b9b526760c392cd50e878 (patch) | |
tree | edc5b6e8f4307942a914d13c218197328c8cb6bf /test/unit/util | |
parent | 95f5be640fd362098a54e222d56d49144fe0efbe (diff) |
BitVector: Change setBit to set the bit in place. (#6176)
Creating BitVectors (and deleting them) is in general expensive because
of the underlying multi-precision Integer. If possible, unnecessary
constructions and desctructions of BitVectors should be avoided.
The most common use case for `setBit` is that for an existing BitVector,
a given bit should be set to a certain value. Not doing this in place
generates unnecessary constructions and destructions of BitVectors.
Diffstat (limited to 'test/unit/util')
-rw-r--r-- | test/unit/util/bitvector_black.cpp | 21 |
1 files changed, 14 insertions, 7 deletions
diff --git a/test/unit/util/bitvector_black.cpp b/test/unit/util/bitvector_black.cpp index c544913a7..3de70cfec 100644 --- a/test/unit/util/bitvector_black.cpp +++ b/test/unit/util/bitvector_black.cpp @@ -28,7 +28,7 @@ class TestUtilBlackBitVector : public TestInternal void SetUp() override { d_zero = BitVector(4); - d_one = d_zero.setBit(0, true); + d_one = BitVector::mkOne(4); d_two = BitVector("0010", 2); d_neg_one = BitVector(4, Integer(-1)); d_ones = BitVector::mkOnes(4); @@ -83,12 +83,19 @@ TEST_F(TestUtilBlackBitVector, conversions) TEST_F(TestUtilBlackBitVector, setBit_getBit) { - ASSERT_EQ(d_one.setBit(1, true).setBit(2, true).setBit(3, true), d_ones); - ASSERT_EQ(d_ones.setBit(0, false).setBit(1, false).setBit(2, false).setBit( - 3, false), - d_zero); - ASSERT_EQ(d_ones.setBit(0, false).setBit(0, true), d_ones); - ASSERT_EQ(d_ones.setBit(0, false), ~BitVector::mkOne(d_one.getSize())); + BitVector ones(d_one); + ASSERT_EQ(ones.setBit(1, true).setBit(2, true).setBit(3, true), d_ones); + + BitVector zero(d_ones); + ASSERT_EQ( + zero.setBit(0, false).setBit(1, false).setBit(2, false).setBit(3, false), + d_zero); + + ones = d_ones; + ASSERT_EQ(ones.setBit(0, false).setBit(0, true), d_ones); + + BitVector not_one(d_ones); + ASSERT_EQ(not_one.setBit(0, false), ~BitVector::mkOne(d_one.getSize())); ASSERT_TRUE(d_ones.isBitSet(3)); ASSERT_FALSE(d_two.isBitSet(3)); |