10 #include <boost/test/unit_test.hpp>
18 static const int64_t values[] = { 0, 1, -2, 127, 128, -255, 256, (1LL << 15) - 1, -(1LL << 16), (1LL << 24) - 1, (1LL << 31), 1 - (1LL << 32), 1LL << 40 };
20 static const int64_t offsets[] = { 1, 0x79, 0x80, 0x81, 0xFF, 0x7FFF, 0x8000, 0xFFFF, 0x10000};
27 static void CheckCreateVch(
const long& num)
37 CBigNum bignum3(scriptnum2.getvch());
38 CScriptNum scriptnum3(bignum2.getvch(),
false);
42 static void CheckCreateInt(
const long& num)
53 static void CheckAdd(
const long& num1,
const long& num2)
65 bool invalid = (((num2 > 0) && (num1 > (std::numeric_limits<long>::max() - num2))) ||
66 ((num2 < 0) && (num1 < (std::numeric_limits<long>::min() - num2))));
69 BOOST_CHECK(verify(bignum1 + bignum2, scriptnum1 + scriptnum2));
70 BOOST_CHECK(verify(bignum1 + bignum2, scriptnum1 + num2));
71 BOOST_CHECK(verify(bignum1 + bignum2, scriptnum2 + num1));
75 static void CheckNegate(
const long& num)
81 if (num != std::numeric_limits<long>::min())
85 static void CheckSubtract(
const long& num1,
const long& num2)
94 invalid = ((num2 > 0 && num1 < std::numeric_limits<long>::min() + num2) ||
95 (num2 < 0 && num1 > std::numeric_limits<long>::max() + num2));
98 BOOST_CHECK(verify(bignum1 - bignum2, scriptnum1 - scriptnum2));
99 BOOST_CHECK(verify(bignum1 - bignum2, scriptnum1 - num2));
102 invalid = ((num1 > 0 && num2 < std::numeric_limits<long>::min() + num1) ||
103 (num1 < 0 && num2 > std::numeric_limits<long>::max() + num1));
106 BOOST_CHECK(verify(bignum2 - bignum1, scriptnum2 - scriptnum1));
107 BOOST_CHECK(verify(bignum2 - bignum1, scriptnum2 - num1));
111 static void CheckCompare(
const long& num1,
const long& num2)
118 BOOST_CHECK((bignum1 == bignum1) == (scriptnum1 == scriptnum1));
119 BOOST_CHECK((bignum1 != bignum1) == (scriptnum1 != scriptnum1));
120 BOOST_CHECK((bignum1 < bignum1) == (scriptnum1 < scriptnum1));
121 BOOST_CHECK((bignum1 > bignum1) == (scriptnum1 > scriptnum1));
122 BOOST_CHECK((bignum1 >= bignum1) == (scriptnum1 >= scriptnum1));
123 BOOST_CHECK((bignum1 <= bignum1) == (scriptnum1 <= scriptnum1));
125 BOOST_CHECK((bignum1 == bignum1) == (scriptnum1 == num1));
126 BOOST_CHECK((bignum1 != bignum1) == (scriptnum1 != num1));
127 BOOST_CHECK((bignum1 < bignum1) == (scriptnum1 < num1));
128 BOOST_CHECK((bignum1 > bignum1) == (scriptnum1 > num1));
129 BOOST_CHECK((bignum1 >= bignum1) == (scriptnum1 >= num1));
130 BOOST_CHECK((bignum1 <= bignum1) == (scriptnum1 <= num1));
132 BOOST_CHECK((bignum1 == bignum2) == (scriptnum1 == scriptnum2));
133 BOOST_CHECK((bignum1 != bignum2) == (scriptnum1 != scriptnum2));
134 BOOST_CHECK((bignum1 < bignum2) == (scriptnum1 < scriptnum2));
135 BOOST_CHECK((bignum1 > bignum2) == (scriptnum1 > scriptnum2));
136 BOOST_CHECK((bignum1 >= bignum2) == (scriptnum1 >= scriptnum2));
137 BOOST_CHECK((bignum1 <= bignum2) == (scriptnum1 <= scriptnum2));
139 BOOST_CHECK((bignum1 == bignum2) == (scriptnum1 == num2));
140 BOOST_CHECK((bignum1 != bignum2) == (scriptnum1 != num2));
141 BOOST_CHECK((bignum1 < bignum2) == (scriptnum1 < num2));
142 BOOST_CHECK((bignum1 > bignum2) == (scriptnum1 > num2));
143 BOOST_CHECK((bignum1 >= bignum2) == (scriptnum1 >= num2));
144 BOOST_CHECK((bignum1 <= bignum2) == (scriptnum1 <= num2));
147 static void RunCreate(
const long& num)
159 static void RunOperators(
const long& num1,
const int64_t& num2)
161 CheckAdd(num1, num2);
162 CheckSubtract(num1, num2);
164 CheckCompare(num1, num2);
169 for(
size_t i = 0; i <
sizeof(values) /
sizeof(values[0]); ++i)
171 for(
size_t j = 0; j <
sizeof(offsets) /
sizeof(offsets[0]); ++j)
173 RunCreate(values[i]);
174 RunCreate(values[i] + offsets[j]);
175 RunCreate(values[i] - offsets[j]);
182 for(
size_t i = 0; i <
sizeof(values) /
sizeof(values[0]); ++i)
184 for(
size_t j = 0; j <
sizeof(offsets) /
sizeof(offsets[0]); ++j)
186 RunOperators(values[i], values[i]);
187 RunOperators(values[i], -values[i]);
188 RunOperators(values[i], values[j]);
189 RunOperators(values[i], -values[j]);
190 RunOperators(values[i] + values[j], values[j]);
191 RunOperators(values[i] + values[j], -values[j]);
192 RunOperators(values[i] - values[j], values[j]);
193 RunOperators(values[i] - values[j], -values[j]);
194 RunOperators(values[i] + values[j], values[i] + values[j]);
195 RunOperators(values[i] + values[j], values[i] - values[j]);
196 RunOperators(values[i] - values[j], values[i] + values[j]);
197 RunOperators(values[i] - values[j], values[i] - values[j]);
std::vector< unsigned char > getvch() const
static const size_t nDefaultMaxNumSize
std::vector< unsigned char > getvch() const
BOOST_AUTO_TEST_SUITE_END()
#define BOOST_CHECK_THROW(stmt, excMatch)
#define BOOST_FIXTURE_TEST_SUITE(a, b)
#define BOOST_CHECK(expr)
BOOST_AUTO_TEST_CASE(creation)