Bitcoin Core 31.0.0
P2P Digital Currency
Loading...
Searching...
No Matches
arith_uint256_tests.cpp File Reference
#include <arith_uint256.h>
#include <test/util/common.h>
#include <uint256.h>
#include <boost/test/unit_test.hpp>
#include <cmath>
#include <cstdint>
#include <iomanip>
#include <limits>
#include <sstream>
#include <string>
#include <vector>
Include dependency graph for arith_uint256_tests.cpp:

Go to the source code of this file.

Macros

#define CHECKBITWISEOPERATOR(_A_, _B_, _OP_)
#define CHECKASSIGNMENTOPERATOR(_A_, _B_, _OP_)

Functions

static arith_uint256 arith_uint256V (const std::vector< unsigned char > &vch)
 Convert vector to arith_uint256, via uint256 blob.
static std::string ArrayToString (const unsigned char A[], unsigned int width)
 BOOST_CHECK (R1L.ToString()==ArrayToString(R1Array, 32))
 BOOST_CHECK (R2L.ToString()==ArrayToString(R2Array, 32))
 BOOST_CHECK (ZeroL.ToString()==ArrayToString(ZeroArray, 32))
 BOOST_CHECK (OneL.ToString()==ArrayToString(OneArray, 32))
 BOOST_CHECK (MaxL.ToString()==ArrayToString(MaxArray, 32))
 BOOST_CHECK (OneL.ToString() !=ArrayToString(ZeroArray, 32))
 BOOST_CHECK (R1L !=R2L)
 BOOST_CHECK (ZeroL !=OneL)
 BOOST_CHECK (OneL !=ZeroL)
 BOOST_CHECK (MaxL !=ZeroL)
 BOOST_CHECK (~MaxL==ZeroL)
 BOOST_CHECK (((R1L ^ R2L) ^ R1L)==R2L)
 for (unsigned int i=0;i< 256;++i) == (MaxL << i))
 BOOST_CHECK (ZeroL==(OneL<< 256))
 BOOST_CHECK_EQUAL (UintToArith256(uint256::FromHex(R1L.ToString()).value()), R1L)
 BOOST_CHECK_EQUAL (UintToArith256(uint256::FromHex(R2L.ToString()).value()), R2L)
 BOOST_CHECK_EQUAL (UintToArith256(uint256::FromHex(ZeroL.ToString()).value()), ZeroL)
 BOOST_CHECK_EQUAL (UintToArith256(uint256::FromHex(OneL.ToString()).value()), OneL)
 BOOST_CHECK_EQUAL (UintToArith256(uint256::FromHex(MaxL.ToString()).value()), MaxL)
 BOOST_CHECK_EQUAL (UintToArith256(uint256::FromHex(R1ArrayHex).value()), R1L)
 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)
 BOOST_CHECK_EQUAL (R1L &arith_uint256{0xffffffffffffffff}, arith_uint256{R1LLow64})
 BOOST_CHECK_EQUAL (ZeroL, arith_uint256{0})
 BOOST_CHECK_EQUAL (OneL, arith_uint256{1})
 BOOST_CHECK_EQUAL (arith_uint256{0xffffffffffffffff}, arith_uint256{0xffffffffffffffffULL})
 BOOST_CHECK (tmpL==~ZeroL)
static void shiftArrayRight (unsigned char *to, const unsigned char *from, unsigned int arrayLength, unsigned int bitsToShift)
static void shiftArrayLeft (unsigned char *to, const unsigned char *from, unsigned int arrayLength, unsigned int bitsToShift)
 BOOST_AUTO_TEST_CASE (shifts)
 BOOST_CHECK (arith_uint256V(std::vector< unsigned char >(TmpArray, TmpArray+32))==(~R1L))
 BOOST_CHECK (-ZeroL==ZeroL)
 BOOST_AUTO_TEST_CASE (bitwiseOperators)
 BOOST_CHECK_LT (ZeroL, OneL)
 BOOST_AUTO_TEST_CASE (plusMinus)
 BOOST_AUTO_TEST_CASE (multiply)
 BOOST_AUTO_TEST_CASE (divide)
static bool almostEqual (double d1, double d2)
 BOOST_AUTO_TEST_CASE (methods)
 BOOST_AUTO_TEST_CASE (bignum_SetCompact)
 BOOST_CHECK ((~~R1L<< 10)==(R1L<< 10))
 BOOST_CHECK (!(~~R1L< R1L))
 BOOST_CHECK (~~R1L<=R1L)
 BOOST_CHECK (!(~~R1L > R1L))
 BOOST_CHECK (~~R1L >=R1L)
 BOOST_CHECK (!(R1L< ~~R1L))
 BOOST_CHECK (R1L<=~~R1L)
 BOOST_CHECK (!(R1L > ~~R1L))
 BOOST_CHECK (R1L >=~~R1L)
 BOOST_CHECK (~~R1L+R2L==R1L+~~R2L)
 BOOST_CHECK (~~R1L - R2L==R1L - ~~R2L)
 BOOST_CHECK (~R1L !=R1L)
 BOOST_AUTO_TEST_CASE (conversion)
 BOOST_AUTO_TEST_CASE (operator_with_self)

Variables

const unsigned char R1Array []
const char R1ArrayHex [] = "7D1DE5EAF9B156D53208F033B5AA8122D2d2355d5e12292b121156cfdb4a529c"
const double R1Ldouble = 0.4887374590559308955
const arith_uint256 R1L = arith_uint256V(std::vector<unsigned char>(R1Array,R1Array+32))
const uint64_t R1LLow64 = 0x121156cfdb4a529cULL
const unsigned char R2Array []
const arith_uint256 R2L = arith_uint256V(std::vector<unsigned char>(R2Array,R2Array+32))
const unsigned char ZeroArray []
const arith_uint256 ZeroL = arith_uint256V(std::vector<unsigned char>(ZeroArray,ZeroArray+32))
const unsigned char OneArray []
const arith_uint256 OneL = arith_uint256V(std::vector<unsigned char>(OneArray,OneArray+32))
const unsigned char MaxArray []
const arith_uint256 MaxL = arith_uint256V(std::vector<unsigned char>(MaxArray,MaxArray+32))
const arith_uint256 HalfL = (OneL << 255)
uint64_t Tmp64 = 0xc4dab720d9c7acaaULL
arith_uint256 tmpL = ~ZeroL
unsigned char TmpArray [32]

Macro Definition Documentation

◆ CHECKASSIGNMENTOPERATOR

#define CHECKASSIGNMENTOPERATOR ( _A_,
_B_,
_OP_ )
Value:
TmpL = _A_##L; TmpL _OP_##= _B_##L; BOOST_CHECK(TmpL == (_A_##L _OP_ _B_##L));
#define BOOST_CHECK(expr)
Definition object.cpp:16
uint256 TmpL(R1L)

Definition at line 218 of file arith_uint256_tests.cpp.

◆ CHECKBITWISEOPERATOR

#define CHECKBITWISEOPERATOR ( _A_,
_B_,
_OP_ )
Value:
for (unsigned int i = 0; i < 32; ++i) { TmpArray[i] = uint8_t(_A_##Array[i] _OP_ _B_##Array[i]); } \
BOOST_CHECK(arith_uint256V(std::vector<unsigned char>(TmpArray,TmpArray+32)) == (_A_##L _OP_ _B_##L));
static arith_uint256 arith_uint256V(const std::vector< unsigned char > &vch)
Convert vector to arith_uint256, via uint256 blob.
unsigned char TmpArray[32]

Definition at line 214 of file arith_uint256_tests.cpp.

Function Documentation

◆ almostEqual()

bool almostEqual ( double d1,
double d2 )
static

Definition at line 366 of file arith_uint256_tests.cpp.

Here is the caller graph for this function:

◆ arith_uint256V()

arith_uint256 arith_uint256V ( const std::vector< unsigned char > & vch)
inlinestatic

Convert vector to arith_uint256, via uint256 blob.

Definition at line 22 of file arith_uint256_tests.cpp.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ ArrayToString()

std::string ArrayToString ( const unsigned char A[],
unsigned int width )
static

Definition at line 55 of file arith_uint256_tests.cpp.

Here is the caller graph for this function:

◆ BOOST_AUTO_TEST_CASE() [1/9]

BOOST_AUTO_TEST_CASE ( bignum_SetCompact )

Definition at line 409 of file arith_uint256_tests.cpp.

Here is the call graph for this function:

◆ BOOST_AUTO_TEST_CASE() [2/9]

BOOST_AUTO_TEST_CASE ( bitwiseOperators )

Definition at line 221 of file arith_uint256_tests.cpp.

◆ BOOST_AUTO_TEST_CASE() [3/9]

BOOST_AUTO_TEST_CASE ( conversion )

Definition at line 564 of file arith_uint256_tests.cpp.

Here is the call graph for this function:

◆ BOOST_AUTO_TEST_CASE() [4/9]

BOOST_AUTO_TEST_CASE ( divide )

Definition at line 347 of file arith_uint256_tests.cpp.

Here is the call graph for this function:

◆ BOOST_AUTO_TEST_CASE() [5/9]

BOOST_AUTO_TEST_CASE ( methods )

Definition at line 371 of file arith_uint256_tests.cpp.

Here is the call graph for this function:

◆ BOOST_AUTO_TEST_CASE() [6/9]

BOOST_AUTO_TEST_CASE ( multiply )

Definition at line 326 of file arith_uint256_tests.cpp.

Here is the call graph for this function:

◆ BOOST_AUTO_TEST_CASE() [7/9]

BOOST_AUTO_TEST_CASE ( operator_with_self )

Definition at line 581 of file arith_uint256_tests.cpp.

◆ BOOST_AUTO_TEST_CASE() [8/9]

BOOST_AUTO_TEST_CASE ( plusMinus )

Definition at line 282 of file arith_uint256_tests.cpp.

Here is the call graph for this function:

◆ BOOST_AUTO_TEST_CASE() [9/9]

BOOST_AUTO_TEST_CASE ( shifts )

Definition at line 154 of file arith_uint256_tests.cpp.

Here is the call graph for this function:

◆ BOOST_CHECK() [1/32]

BOOST_CHECK ( ! R1L > ~~R1L)

◆ BOOST_CHECK() [2/32]

BOOST_CHECK ( ! R1L< ~~R1L)

◆ BOOST_CHECK() [3/32]

BOOST_CHECK ( ! ~~R1L > R1L)

◆ BOOST_CHECK() [4/32]

BOOST_CHECK ( ! ~~R1L< R1L)

◆ BOOST_CHECK() [5/32]

BOOST_CHECK ( ((R1L ^ R2L) ^ R1L) = =R2L)

◆ BOOST_CHECK() [6/32]

BOOST_CHECK ( (arith_uint256(R1L^R2L)^R2L) = =R1L)

◆ BOOST_CHECK() [7/32]

BOOST_CHECK ( (~~R1L<< 10) = =(R1L<< 10))

◆ BOOST_CHECK() [8/32]

BOOST_CHECK ( - ZeroL = =ZeroL)

◆ BOOST_CHECK() [9/32]

BOOST_CHECK ( arith_uint256(OneL) = =OneL)

◆ BOOST_CHECK() [10/32]

BOOST_CHECK ( arith_uint256(R1L) = =R1L)

◆ BOOST_CHECK() [11/32]

BOOST_CHECK ( arith_uint256(ZeroL) = =ZeroL)

◆ BOOST_CHECK() [12/32]

BOOST_CHECK ( arith_uint256V(std::vector< unsigned char >(TmpArray, TmpArray+32)) = =(~R1L))

◆ BOOST_CHECK() [13/32]

BOOST_CHECK ( MaxL ! = ZeroL)

◆ BOOST_CHECK() [14/32]

BOOST_CHECK ( MaxL. ToString() = =ArrayToString(MaxArray, 32))
Here is the call graph for this function:

◆ BOOST_CHECK() [15/32]

BOOST_CHECK ( OneL ! = ZeroL)

◆ BOOST_CHECK() [16/32]

BOOST_CHECK ( OneL.ToString() ! = ArrayToString(ZeroArray, 32))
Here is the call graph for this function:

◆ BOOST_CHECK() [17/32]

BOOST_CHECK ( OneL. ToString() = =ArrayToString(OneArray, 32))
Here is the call graph for this function:

◆ BOOST_CHECK() [18/32]

BOOST_CHECK ( R1L ! = R2L)

◆ BOOST_CHECK() [19/32]

BOOST_CHECK ( R1L >=~~ R1L)

◆ BOOST_CHECK() [20/32]

BOOST_CHECK ( R1L. ToString() = =ArrayToString(R1Array, 32))
Here is the call graph for this function:

◆ BOOST_CHECK() [21/32]

BOOST_CHECK ( R1L<=~~ R1L)

◆ BOOST_CHECK() [22/32]

BOOST_CHECK ( R2L. ToString() = =ArrayToString(R2Array, 32))
Here is the call graph for this function:

◆ BOOST_CHECK() [23/32]

BOOST_CHECK ( tmpL = =~ZeroL)

◆ BOOST_CHECK() [24/32]

BOOST_CHECK ( ZeroL ! = OneL)

◆ BOOST_CHECK() [25/32]

BOOST_CHECK ( ZeroL. ToString() = =ArrayToString(ZeroArray, 32))
Here is the call graph for this function:

◆ BOOST_CHECK() [26/32]

BOOST_CHECK ( ZeroL = =(OneL<< 256))

◆ BOOST_CHECK() [27/32]

BOOST_CHECK ( ~ MaxL = =ZeroL)

◆ BOOST_CHECK() [28/32]

BOOST_CHECK ( ~R1L ! = R1L)

◆ BOOST_CHECK() [29/32]

BOOST_CHECK ( ~~R1L - R2L = =R1L - ~~R2L)

◆ BOOST_CHECK() [30/32]

BOOST_CHECK ( ~~R1L >= R1L)

◆ BOOST_CHECK() [31/32]

BOOST_CHECK ( ~~R1L+ R2L = =R1L+~~R2L)

◆ BOOST_CHECK() [32/32]

BOOST_CHECK ( ~~R1L<= R1L)

◆ BOOST_CHECK_EQUAL() [1/10]

BOOST_CHECK_EQUAL ( arith_uint256{0xffffffffffffffff} ,
arith_uint256{0xffffffffffffffffULL}  )

◆ BOOST_CHECK_EQUAL() [2/10]

BOOST_CHECK_EQUAL ( OneL ,
arith_uint256{1}  )

◆ BOOST_CHECK_EQUAL() [3/10]

BOOST_CHECK_EQUAL ( R1L &arith_uint256{0xffffffffffffffff} ,
arith_uint256{R1LLow64}  )

◆ BOOST_CHECK_EQUAL() [4/10]

BOOST_CHECK_EQUAL ( UintToArith256(uint256::FromHex(MaxL.ToString()).value()) ,
MaxL  )
Here is the call graph for this function:

◆ BOOST_CHECK_EQUAL() [5/10]

BOOST_CHECK_EQUAL ( UintToArith256(uint256::FromHex(OneL.ToString()).value()) ,
OneL  )
Here is the call graph for this function:

◆ BOOST_CHECK_EQUAL() [6/10]

BOOST_CHECK_EQUAL ( UintToArith256(uint256::FromHex(R1ArrayHex).value()) ,
R1L  )
Here is the call graph for this function:

◆ BOOST_CHECK_EQUAL() [7/10]

BOOST_CHECK_EQUAL ( UintToArith256(uint256::FromHex(R1L.ToString()).value()) ,
R1L  )
Here is the call graph for this function:

◆ BOOST_CHECK_EQUAL() [8/10]

BOOST_CHECK_EQUAL ( UintToArith256(uint256::FromHex(R2L.ToString()).value()) ,
R2L  )
Here is the call graph for this function:

◆ BOOST_CHECK_EQUAL() [9/10]

BOOST_CHECK_EQUAL ( UintToArith256(uint256::FromHex(ZeroL.ToString()).value()) ,
ZeroL  )
Here is the call graph for this function:

◆ BOOST_CHECK_EQUAL() [10/10]

BOOST_CHECK_EQUAL ( ZeroL ,
arith_uint256{0}  )

◆ BOOST_CHECK_LT()

BOOST_CHECK_LT ( ZeroL ,
OneL  )
Here is the caller graph for this function:

◆ for()

for ( ) == (MaxL << i))

Definition at line 86 of file arith_uint256_tests.cpp.

Here is the caller graph for this function:

◆ shiftArrayLeft()

void shiftArrayLeft ( unsigned char * to,
const unsigned char * from,
unsigned int arrayLength,
unsigned int bitsToShift )
static

Definition at line 137 of file arith_uint256_tests.cpp.

Here is the caller graph for this function:

◆ shiftArrayRight()

void shiftArrayRight ( unsigned char * to,
const unsigned char * from,
unsigned int arrayLength,
unsigned int bitsToShift )
static

Definition at line 123 of file arith_uint256_tests.cpp.

Here is the caller graph for this function:

Variable Documentation

◆ HalfL

const arith_uint256 HalfL = (OneL << 255)

Definition at line 54 of file arith_uint256_tests.cpp.

◆ MaxArray

const unsigned char MaxArray[]
Initial value:
=
"\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff"
"\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff"

Definition at line 49 of file arith_uint256_tests.cpp.

◆ MaxL

const arith_uint256 MaxL = arith_uint256V(std::vector<unsigned char>(MaxArray,MaxArray+32))

Definition at line 52 of file arith_uint256_tests.cpp.

◆ OneArray

const unsigned char OneArray[]
Initial value:
=
"\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"

Definition at line 44 of file arith_uint256_tests.cpp.

◆ OneL

const arith_uint256 OneL = arith_uint256V(std::vector<unsigned char>(OneArray,OneArray+32))

Definition at line 47 of file arith_uint256_tests.cpp.

◆ R1Array

const unsigned char R1Array[]
Initial value:
=
"\x9c\x52\x4a\xdb\xcf\x56\x11\x12\x2b\x29\x12\x5e\x5d\x35\xd2\xd2"
"\x22\x81\xaa\xb5\x33\xf0\x08\x32\xd5\x56\xb1\xf9\xea\xe5\x1d\x7d"

Definition at line 26 of file arith_uint256_tests.cpp.

◆ R1ArrayHex

const char R1ArrayHex[] = "7D1DE5EAF9B156D53208F033B5AA8122D2d2355d5e12292b121156cfdb4a529c"

Definition at line 29 of file arith_uint256_tests.cpp.

◆ R1L

BOOST_CHECK_LT * R1L = arith_uint256V(std::vector<unsigned char>(R1Array,R1Array+32))

Definition at line 31 of file arith_uint256_tests.cpp.

◆ R1Ldouble

const double R1Ldouble = 0.4887374590559308955

Definition at line 30 of file arith_uint256_tests.cpp.

◆ R1LLow64

const uint64_t R1LLow64 = 0x121156cfdb4a529cULL

Definition at line 32 of file arith_uint256_tests.cpp.

◆ R2Array

const unsigned char R2Array[]
Initial value:
=
"\x70\x32\x1d\x7c\x47\xa5\x6b\x40\x26\x7e\x0a\xc3\xa6\x9c\xb6\xbf"
"\x13\x30\x47\xa3\x19\x2d\xda\x71\x49\x13\x72\xf0\xb4\xca\x81\xd7"

Definition at line 34 of file arith_uint256_tests.cpp.

◆ R2L

BOOST_CHECK_LT * R2L = arith_uint256V(std::vector<unsigned char>(R2Array,R2Array+32))

Definition at line 37 of file arith_uint256_tests.cpp.

◆ Tmp64

uint64_t Tmp64 = 0xc4dab720d9c7acaaULL

Definition at line 85 of file arith_uint256_tests.cpp.

◆ TmpArray

unsigned char TmpArray
Initial value:
{
const arith_uint256 MaxL
const arith_uint256 ZeroL

Definition at line 201 of file arith_uint256_tests.cpp.

◆ tmpL

tmpL = ~ZeroL

Definition at line 116 of file arith_uint256_tests.cpp.

◆ ZeroArray

const unsigned char ZeroArray[]
Initial value:
=
"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"

Definition at line 39 of file arith_uint256_tests.cpp.

◆ ZeroL

const arith_uint256 ZeroL = arith_uint256V(std::vector<unsigned char>(ZeroArray,ZeroArray+32))

Definition at line 42 of file arith_uint256_tests.cpp.