|
|
|
@ -22,6 +22,7 @@ static inline arith_uint256 arith_uint256V(const std::vector<unsigned char>& vch
|
|
|
|
|
{
|
|
|
|
|
return UintToArith256(uint256(vch));
|
|
|
|
|
}
|
|
|
|
|
static inline arith_uint256 arith_uint256S(const std::string& str) { return UintToArith256(uint256S(str)); }
|
|
|
|
|
|
|
|
|
|
const unsigned char R1Array[] =
|
|
|
|
|
"\x9c\x52\x4a\xdb\xcf\x56\x11\x12\x2b\x29\x12\x5e\x5d\x35\xd2\xd2"
|
|
|
|
@ -95,25 +96,25 @@ BOOST_AUTO_TEST_CASE( basics ) // constructors, equality, inequality
|
|
|
|
|
BOOST_CHECK(ZeroL == (OneL << 256));
|
|
|
|
|
|
|
|
|
|
// String Constructor and Copy Constructor
|
|
|
|
|
BOOST_CHECK(arith_uint256("0x"+R1L.ToString()) == R1L);
|
|
|
|
|
BOOST_CHECK(arith_uint256("0x"+R2L.ToString()) == R2L);
|
|
|
|
|
BOOST_CHECK(arith_uint256("0x"+ZeroL.ToString()) == ZeroL);
|
|
|
|
|
BOOST_CHECK(arith_uint256("0x"+OneL.ToString()) == OneL);
|
|
|
|
|
BOOST_CHECK(arith_uint256("0x"+MaxL.ToString()) == MaxL);
|
|
|
|
|
BOOST_CHECK(arith_uint256(R1L.ToString()) == R1L);
|
|
|
|
|
BOOST_CHECK(arith_uint256(" 0x"+R1L.ToString()+" ") == R1L);
|
|
|
|
|
BOOST_CHECK(arith_uint256("") == ZeroL);
|
|
|
|
|
BOOST_CHECK(R1L == arith_uint256(R1ArrayHex));
|
|
|
|
|
BOOST_CHECK(arith_uint256S("0x" + R1L.ToString()) == R1L);
|
|
|
|
|
BOOST_CHECK(arith_uint256S("0x" + R2L.ToString()) == R2L);
|
|
|
|
|
BOOST_CHECK(arith_uint256S("0x" + ZeroL.ToString()) == ZeroL);
|
|
|
|
|
BOOST_CHECK(arith_uint256S("0x" + OneL.ToString()) == OneL);
|
|
|
|
|
BOOST_CHECK(arith_uint256S("0x" + MaxL.ToString()) == MaxL);
|
|
|
|
|
BOOST_CHECK(arith_uint256S(R1L.ToString()) == R1L);
|
|
|
|
|
BOOST_CHECK(arith_uint256S(" 0x" + R1L.ToString() + " ") == R1L);
|
|
|
|
|
BOOST_CHECK(arith_uint256S("") == ZeroL);
|
|
|
|
|
BOOST_CHECK(R1L == arith_uint256S(R1ArrayHex));
|
|
|
|
|
BOOST_CHECK(arith_uint256(R1L) == R1L);
|
|
|
|
|
BOOST_CHECK((arith_uint256(R1L^R2L)^R2L) == R1L);
|
|
|
|
|
BOOST_CHECK(arith_uint256(ZeroL) == ZeroL);
|
|
|
|
|
BOOST_CHECK(arith_uint256(OneL) == OneL);
|
|
|
|
|
|
|
|
|
|
// uint64_t constructor
|
|
|
|
|
BOOST_CHECK( (R1L & arith_uint256("0xffffffffffffffff")) == arith_uint256(R1LLow64));
|
|
|
|
|
BOOST_CHECK((R1L & arith_uint256S("0xffffffffffffffff")) == arith_uint256(R1LLow64));
|
|
|
|
|
BOOST_CHECK(ZeroL == arith_uint256(0));
|
|
|
|
|
BOOST_CHECK(OneL == arith_uint256(1));
|
|
|
|
|
BOOST_CHECK(arith_uint256("0xffffffffffffffff") == arith_uint256(0xffffffffffffffffULL));
|
|
|
|
|
BOOST_CHECK(arith_uint256S("0xffffffffffffffff") == arith_uint256(0xffffffffffffffffULL));
|
|
|
|
|
|
|
|
|
|
// Assignment (from base_uint)
|
|
|
|
|
arith_uint256 tmpL = ~ZeroL; BOOST_CHECK(tmpL == ~ZeroL);
|
|
|
|
@ -282,7 +283,7 @@ BOOST_AUTO_TEST_CASE( comparison ) // <= >= < >
|
|
|
|
|
BOOST_AUTO_TEST_CASE( plusMinus )
|
|
|
|
|
{
|
|
|
|
|
arith_uint256 TmpL = 0;
|
|
|
|
|
BOOST_CHECK(R1L+R2L == arith_uint256(R1LplusR2L));
|
|
|
|
|
BOOST_CHECK(R1L + R2L == arith_uint256S(R1LplusR2L));
|
|
|
|
|
TmpL += R1L;
|
|
|
|
|
BOOST_CHECK(TmpL == R1L);
|
|
|
|
|
TmpL += R2L;
|
|
|
|
@ -346,8 +347,8 @@ BOOST_AUTO_TEST_CASE( multiply )
|
|
|
|
|
|
|
|
|
|
BOOST_AUTO_TEST_CASE( divide )
|
|
|
|
|
{
|
|
|
|
|
arith_uint256 D1L("AD7133AC1977FA2B7");
|
|
|
|
|
arith_uint256 D2L("ECD751716");
|
|
|
|
|
arith_uint256 D1L{arith_uint256S("AD7133AC1977FA2B7")};
|
|
|
|
|
arith_uint256 D2L{arith_uint256S("ECD751716")};
|
|
|
|
|
BOOST_CHECK((R1L / D1L).ToString() == "00000000000000000b8ac01106981635d9ed112290f8895545a7654dde28fb3a");
|
|
|
|
|
BOOST_CHECK((R1L / D2L).ToString() == "000000000873ce8efec5b67150bad3aa8c5fcb70e947586153bf2cec7c37c57a");
|
|
|
|
|
BOOST_CHECK(R1L / OneL == R1L);
|
|
|
|
@ -368,7 +369,7 @@ static bool almostEqual(double d1, double d2)
|
|
|
|
|
return fabs(d1-d2) <= 4*fabs(d1)*std::numeric_limits<double>::epsilon();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
BOOST_AUTO_TEST_CASE( methods ) // GetHex SetHex size() GetLow64 GetSerializeSize, Serialize, Unserialize
|
|
|
|
|
BOOST_AUTO_TEST_CASE(methods) // GetHex operator= size() GetLow64 GetSerializeSize, Serialize, Unserialize
|
|
|
|
|
{
|
|
|
|
|
BOOST_CHECK(R1L.GetHex() == R1L.ToString());
|
|
|
|
|
BOOST_CHECK(R2L.GetHex() == R2L.ToString());
|
|
|
|
@ -376,11 +377,14 @@ BOOST_AUTO_TEST_CASE( methods ) // GetHex SetHex size() GetLow64 GetSerializeSiz
|
|
|
|
|
BOOST_CHECK(MaxL.GetHex() == MaxL.ToString());
|
|
|
|
|
arith_uint256 TmpL(R1L);
|
|
|
|
|
BOOST_CHECK(TmpL == R1L);
|
|
|
|
|
TmpL.SetHex(R2L.ToString()); BOOST_CHECK(TmpL == R2L);
|
|
|
|
|
TmpL.SetHex(ZeroL.ToString()); BOOST_CHECK(TmpL == 0);
|
|
|
|
|
TmpL.SetHex(HalfL.ToString()); BOOST_CHECK(TmpL == HalfL);
|
|
|
|
|
TmpL = R2L;
|
|
|
|
|
BOOST_CHECK(TmpL == R2L);
|
|
|
|
|
TmpL = ZeroL;
|
|
|
|
|
BOOST_CHECK(TmpL == 0);
|
|
|
|
|
TmpL = HalfL;
|
|
|
|
|
BOOST_CHECK(TmpL == HalfL);
|
|
|
|
|
|
|
|
|
|
TmpL.SetHex(R1L.ToString());
|
|
|
|
|
TmpL = R1L;
|
|
|
|
|
BOOST_CHECK(R1L.size() == 32);
|
|
|
|
|
BOOST_CHECK(R2L.size() == 32);
|
|
|
|
|
BOOST_CHECK(ZeroL.size() == 32);
|
|
|
|
|