From 622ced8a74f5da6de973439c6dac90e60c5203ae Mon Sep 17 00:00:00 2001 From: Jack Grigg Date: Thu, 8 Sep 2016 12:46:00 +1200 Subject: [PATCH] Adjust test to account for integer division precision loss --- src/gtest/test_pow.cpp | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/gtest/test_pow.cpp b/src/gtest/test_pow.cpp index ee05b69ec..ac3ce59e1 100644 --- a/src/gtest/test_pow.cpp +++ b/src/gtest/test_pow.cpp @@ -29,10 +29,12 @@ TEST(PoW, DifficultyAveraging) { blocks[firstBlk].GetMedianTimePast(), params), GetNextWorkRequired(&blocks[lastBlk], nullptr, params)); - // Result should be unchanged - // TODO: This should be 0x1e7fffff, and just before GetNextWorkRequired() - // returns, it is. Somehow it ends up off by one.... - EXPECT_EQ(0x1e7ffffe, GetNextWorkRequired(&blocks[lastBlk], nullptr, params)); + // Result should be unchanged, modulo integer division precision loss + arith_uint256 bnRes; + bnRes.SetCompact(0x1e7fffff); + bnRes /= params.AveragingWindowTimespan(); + bnRes *= params.AveragingWindowTimespan(); + EXPECT_EQ(bnRes.GetCompact(), GetNextWorkRequired(&blocks[lastBlk], nullptr, params)); // Randomise the final block time (plus 1 to ensure it is always different) blocks[lastBlk].nTime += GetRand(params.nPowTargetSpacing/2) + 1;