From 17fe75276dcb7351fa7c23af345fad4adda1fe8d Mon Sep 17 00:00:00 2001 From: Krzysztof Szenk Date: Sat, 10 Jun 2017 22:03:23 +0200 Subject: [PATCH 1/4] Math: fixed bit setting bug in BoolVector::set --- src/Magnum/Math/BoolVector.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Magnum/Math/BoolVector.h b/src/Magnum/Math/BoolVector.h index 367704dac..8b6a169eb 100644 --- a/src/Magnum/Math/BoolVector.h +++ b/src/Magnum/Math/BoolVector.h @@ -122,7 +122,7 @@ template class BoolVector { /** @brief Set bit at given position */ BoolVector& set(std::size_t i, bool value) { - _data[i/8] |= ((value & 0x01) << i%8); + _data[i/8] &= ~(1 << i%8) | (value << i%8); return *this; } From 49b9d9fb7ab3de3b42f3df69e91409ff74e6caa0 Mon Sep 17 00:00:00 2001 From: Krzysztof Szenk Date: Sat, 10 Jun 2017 23:35:28 +0200 Subject: [PATCH 2/4] Fixed a fix --- src/Magnum/Math/BoolVector.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Magnum/Math/BoolVector.h b/src/Magnum/Math/BoolVector.h index 8b6a169eb..0ccc4b9bd 100644 --- a/src/Magnum/Math/BoolVector.h +++ b/src/Magnum/Math/BoolVector.h @@ -122,7 +122,7 @@ template class BoolVector { /** @brief Set bit at given position */ BoolVector& set(std::size_t i, bool value) { - _data[i/8] &= ~(1 << i%8) | (value << i%8); + _data[i/8] ^= (-Byte(value) ^ _data[i/8]) & (0x01 << i); return *this; } From 5632c4768cc67a60e95642bcf97145bcebc8df89 Mon Sep 17 00:00:00 2001 From: Krzysztof Szenk Date: Sun, 11 Jun 2017 01:14:22 +0200 Subject: [PATCH 3/4] Forgot a modulo --- src/Magnum/Math/BoolVector.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Magnum/Math/BoolVector.h b/src/Magnum/Math/BoolVector.h index 0ccc4b9bd..fac2aad88 100644 --- a/src/Magnum/Math/BoolVector.h +++ b/src/Magnum/Math/BoolVector.h @@ -122,7 +122,7 @@ template class BoolVector { /** @brief Set bit at given position */ BoolVector& set(std::size_t i, bool value) { - _data[i/8] ^= (-Byte(value) ^ _data[i/8]) & (0x01 << i); + _data[i/8] ^= (-Byte(value) ^ _data[i/8]) & (0x01 << i%8); return *this; } From f34f5ef45634d287347007b88199f1a48f6269bc Mon Sep 17 00:00:00 2001 From: Krzysztof Szenk Date: Sun, 11 Jun 2017 12:47:17 +0200 Subject: [PATCH 4/4] Added a test case for BoolVector::set Also thought, that it'd be nice to cover bit setting from 1 to 0. --- src/Magnum/Math/Test/BoolVectorTest.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/Magnum/Math/Test/BoolVectorTest.cpp b/src/Magnum/Math/Test/BoolVectorTest.cpp index d03fe0053..2f1ce344a 100644 --- a/src/Magnum/Math/Test/BoolVectorTest.cpp +++ b/src/Magnum/Math/Test/BoolVectorTest.cpp @@ -169,6 +169,9 @@ void BoolVectorTest::data() { d.set(15, true); CORRADE_VERIFY(d[15]); CORRADE_COMPARE(d, BoolVector19(0x08, 0x83, 0x04)); + d.set(15, false); + CORRADE_VERIFY(!d[15]); + CORRADE_COMPARE(d, BoolVector19(0x08, 0x03, 0x04)); } void BoolVectorTest::compare() {