summaryrefslogtreecommitdiff
path: root/test/unit/util
diff options
context:
space:
mode:
authorAina Niemetz <aina.niemetz@gmail.com>2021-03-19 10:28:14 -0700
committerGitHub <noreply@github.com>2021-03-19 17:28:14 +0000
commit58e219362b2e9a7d7b9b9b526760c392cd50e878 (patch)
treeedc5b6e8f4307942a914d13c218197328c8cb6bf /test/unit/util
parent95f5be640fd362098a54e222d56d49144fe0efbe (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.cpp21
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));
generated by cgit on debian on lair
contact matthew@masot.net with questions or feedback