aboutsummaryrefslogtreecommitdiff
path: root/src/test
diff options
context:
space:
mode:
authorWladimir J. van der Laan <laanwj@gmail.com>2018-04-09 05:50:26 +0200
committerWladimir J. van der Laan <laanwj@gmail.com>2018-04-09 05:57:19 +0200
commit4781813b56177f8cfc1bf3d4160f75f3ec15e7e2 (patch)
treee76f7df8fb6bdd8682ad315b590878238694569c /src/test
parent27278dffe877ab95488f2e0fada53edb9590487f (diff)
parentb120f7bdbee83c00e46a9ec6d0cd09a816631f45 (diff)
downloadbitcoin-4781813b56177f8cfc1bf3d4160f75f3ec15e7e2.tar.xz
Merge #12537: [arith_uint256] Make it safe to use "self" in operators
b120f7b [test] Add tests for self usage in arith_uint256 (Karl-Johan Alm) 08b17de [arith_uint256] Do not destroy *this content if passed-in operator may reference it (Karl-Johan Alm) Pull request description: Before this fix (see test commit), `v *= v` would result in `0` because `operator*=` set `*this` (`==b`) to `0` at the start. This patch changes the code to use `a` as temporary for `*this`~~, with drawback that `*this` is set to `a` at the end, an extra `=` operation in other words~~. Tree-SHA512: 8028a99880c3198a39c4bcc5056169735ba960625d553e15c0317510a52940c875f7a1fefe14e1af7fcf10c07a246411994a328cb1507bf3eaf1b6e7425390dc
Diffstat (limited to 'src/test')
-rw-r--r--src/test/uint256_tests.cpp13
1 files changed, 13 insertions, 0 deletions
diff --git a/src/test/uint256_tests.cpp b/src/test/uint256_tests.cpp
index ad5478e829..20ed29f59b 100644
--- a/src/test/uint256_tests.cpp
+++ b/src/test/uint256_tests.cpp
@@ -266,4 +266,17 @@ BOOST_AUTO_TEST_CASE( conversion )
BOOST_CHECK(R2L.GetHex() == UintToArith256(R2L).GetHex());
}
+BOOST_AUTO_TEST_CASE( operator_with_self )
+{
+ arith_uint256 v = UintToArith256(uint256S("02"));
+ v *= v;
+ BOOST_CHECK(v == UintToArith256(uint256S("04")));
+ v /= v;
+ BOOST_CHECK(v == UintToArith256(uint256S("01")));
+ v += v;
+ BOOST_CHECK(v == UintToArith256(uint256S("02")));
+ v -= v;
+ BOOST_CHECK(v == UintToArith256(uint256S("0")));
+}
+
BOOST_AUTO_TEST_SUITE_END()