From 9fe95754fe3884f5f33d060613455dda18ac7fa9 Mon Sep 17 00:00:00 2001 From: Vlad Gluhovsky Date: Tue, 7 Jul 2015 00:53:48 +0200 Subject: [PATCH 1/3] FixedHash::operator++() introduced --- libdevcore/FixedHash.h | 1 + test/libdevcore/FixedHash.cpp | 36 +++++++++++++++++++++++++++++++++++ 2 files changed, 37 insertions(+) diff --git a/libdevcore/FixedHash.h b/libdevcore/FixedHash.h index a5b65458c..449848654 100644 --- a/libdevcore/FixedHash.h +++ b/libdevcore/FixedHash.h @@ -105,6 +105,7 @@ public: FixedHash& operator&=(FixedHash const& _c) { for (unsigned i = 0; i < N; ++i) m_data[i] &= _c.m_data[i]; return *this; } FixedHash operator&(FixedHash const& _c) const { return FixedHash(*this) &= _c; } FixedHash operator~() const { FixedHash ret; for (unsigned i = 0; i < N; ++i) ret[i] = ~m_data[i]; return ret; } + FixedHash& operator++() { for (unsigned i = size; i > 0 && !++m_data[--i]; ) {}; return *this; } /// @returns true if all one-bits in @a _c are set in this object. bool contains(FixedHash const& _c) const { return (*this & _c) == _c; } diff --git a/test/libdevcore/FixedHash.cpp b/test/libdevcore/FixedHash.cpp index 9a6ebe0e0..e990a3bd0 100644 --- a/test/libdevcore/FixedHash.cpp +++ b/test/libdevcore/FixedHash.cpp @@ -100,6 +100,42 @@ BOOST_AUTO_TEST_CASE(FixedHashContains) BOOST_CHECK(!h1.contains(h3)); } +void incrementSingleIteration(unsigned seed) +{ + unsigned next = seed + 1; + + FixedHash<4> h1(seed); + FixedHash<4> h2 = h1; + FixedHash<4> h3(next); + + FixedHash<32> hh1(seed); + FixedHash<32> hh2 = hh1; + FixedHash<32> hh3(next); + + BOOST_CHECK_EQUAL(++h2, h3); + BOOST_CHECK_EQUAL(++hh2, hh3); + + BOOST_CHECK(h2 > h1); + BOOST_CHECK(hh2 > hh1); + + unsigned reverse1 = ((FixedHash<4>::Arith)h2).convert_to(); + unsigned reverse2 = ((FixedHash<32>::Arith)hh2).convert_to(); + + BOOST_CHECK_EQUAL(next, reverse1); + BOOST_CHECK_EQUAL(next, reverse2); +} + +BOOST_AUTO_TEST_CASE(FixedHashIncrement) +{ + incrementSingleIteration(0); + incrementSingleIteration(1); + incrementSingleIteration(0xBAD); + incrementSingleIteration(0xBEEF); + incrementSingleIteration(0xFFFF); + incrementSingleIteration(0xFEDCBA); + incrementSingleIteration(0x7FFFFFFF); +} + BOOST_AUTO_TEST_SUITE_END() } From 694ab29b8deba473b61a287c3af61b0105c13892 Mon Sep 17 00:00:00 2001 From: Vlad Gluhovsky Date: Tue, 7 Jul 2015 01:46:23 +0200 Subject: [PATCH 2/3] style update --- libdevcore/FixedHash.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libdevcore/FixedHash.h b/libdevcore/FixedHash.h index 449848654..bf0444774 100644 --- a/libdevcore/FixedHash.h +++ b/libdevcore/FixedHash.h @@ -105,7 +105,7 @@ public: FixedHash& operator&=(FixedHash const& _c) { for (unsigned i = 0; i < N; ++i) m_data[i] &= _c.m_data[i]; return *this; } FixedHash operator&(FixedHash const& _c) const { return FixedHash(*this) &= _c; } FixedHash operator~() const { FixedHash ret; for (unsigned i = 0; i < N; ++i) ret[i] = ~m_data[i]; return ret; } - FixedHash& operator++() { for (unsigned i = size; i > 0 && !++m_data[--i]; ) {}; return *this; } + FixedHash& operator++() { for (unsigned i = size; i > 0 && !++m_data[--i]; ) {} return *this; } /// @returns true if all one-bits in @a _c are set in this object. bool contains(FixedHash const& _c) const { return (*this & _c) == _c; } From d2a20ef120931e5a3ca1dd563266e30bb55daadc Mon Sep 17 00:00:00 2001 From: Vlad Gluhovsky Date: Tue, 7 Jul 2015 11:16:41 +0200 Subject: [PATCH 3/3] test updated --- test/libdevcore/FixedHash.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/test/libdevcore/FixedHash.cpp b/test/libdevcore/FixedHash.cpp index e990a3bd0..dc5ced2c1 100644 --- a/test/libdevcore/FixedHash.cpp +++ b/test/libdevcore/FixedHash.cpp @@ -134,6 +134,10 @@ BOOST_AUTO_TEST_CASE(FixedHashIncrement) incrementSingleIteration(0xFFFF); incrementSingleIteration(0xFEDCBA); incrementSingleIteration(0x7FFFFFFF); + + FixedHash<4> h(0xFFFFFFFF); + FixedHash<4> zero; + BOOST_CHECK_EQUAL(++h, zero); } BOOST_AUTO_TEST_SUITE_END()