Bitcoin Core 32.99.0
P2P Digital Currency
Loading...
Searching...
No Matches
Macros | Functions | Variables
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_)    TmpL = _A_##L; TmpL _OP_##= _B_##L; BOOST_CHECK(TmpL == (_A_##L _OP_ _B_##L));
 

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_ 
)     TmpL = _A_##L; TmpL _OP_##= _B_##L; BOOST_CHECK(TmpL == (_A_##L _OP_ _B_##L));

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]
constexpr auto Ticks(Dur2 d)
Helper to count the seconds of a duration/time_point.
Definition time.h:82

Definition at line 214 of file arith_uint256_tests.cpp.

Function Documentation

◆ almostEqual()

static bool almostEqual ( double  d1,
double  d2 
)
static

Definition at line 372 of file arith_uint256_tests.cpp.

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

◆ arith_uint256V()

static 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()

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

Definition at line 55 of file arith_uint256_tests.cpp.

Here is the call graph for this function:

◆ BOOST_AUTO_TEST_CASE() [1/9]

BOOST_AUTO_TEST_CASE ( bignum_SetCompact  )

Definition at line 415 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.

Here is the call graph for this function:

◆ BOOST_AUTO_TEST_CASE() [3/9]

BOOST_AUTO_TEST_CASE ( conversion  )

Definition at line 570 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 353 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 377 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 332 of file arith_uint256_tests.cpp.

◆ BOOST_AUTO_TEST_CASE() [7/9]

BOOST_AUTO_TEST_CASE ( operator_with_self  )

Definition at line 587 of file arith_uint256_tests.cpp.

◆ BOOST_AUTO_TEST_CASE() [8/9]

BOOST_AUTO_TEST_CASE ( plusMinus  )

Definition at line 288 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))

◆ BOOST_CHECK() [15/32]

BOOST_CHECK ( OneL !  = ZeroL)

◆ BOOST_CHECK() [16/32]

BOOST_CHECK ( OneL.ToString() !  = ArrayToString(ZeroArray, 32))

◆ BOOST_CHECK() [17/32]

BOOST_CHECK ( OneL.  ToString() = =ArrayToString(OneArray, 32))

◆ 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))

◆ BOOST_CHECK() [21/32]

BOOST_CHECK ( R1L<=~~  R1L)

◆ BOOST_CHECK() [22/32]

BOOST_CHECK ( R2L.  ToString() = =ArrayToString(R2Array, 32))

◆ 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))

◆ 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   
)

◆ BOOST_CHECK_EQUAL() [5/10]

BOOST_CHECK_EQUAL ( UintToArith256(uint256::FromHex(OneL.ToString()).value())  ,
OneL   
)

◆ BOOST_CHECK_EQUAL() [6/10]

BOOST_CHECK_EQUAL ( UintToArith256(uint256::FromHex(R1ArrayHex).value())  ,
R1L   
)

◆ BOOST_CHECK_EQUAL() [7/10]

BOOST_CHECK_EQUAL ( UintToArith256(uint256::FromHex(R1L.ToString()).value())  ,
R1L   
)

◆ BOOST_CHECK_EQUAL() [8/10]

BOOST_CHECK_EQUAL ( UintToArith256(uint256::FromHex(R2L.ToString()).value())  ,
R2L   
)

◆ BOOST_CHECK_EQUAL() [9/10]

BOOST_CHECK_EQUAL ( UintToArith256(uint256::FromHex(ZeroL.ToString()).value())  ,
ZeroL   
)

◆ 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()

static 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 call graph for this function:
Here is the caller graph for this function:

◆ shiftArrayRight()

static 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 call graph for this function:
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

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

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

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

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
#define BOOST_CHECK(expr)
Definition object.cpp:16

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

Definition at line 42 of file arith_uint256_tests.cpp.