20 #include <ripple/basics/Blob.h>
21 #include <ripple/basics/base_uint.h>
22 #include <ripple/basics/hardened_hash.h>
23 #include <ripple/beast/unit_test.h>
24 #include <boost/endian/conversion.hpp>
34 template <std::
size_t Bits>
37 static constexpr
auto const endian = boost::endian::order::big;
66 testcase(
"base_uint: general purpose tests");
75 Blob raw{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12};
80 BEAST_EXPECT(raw.size() == u.size());
81 BEAST_EXPECT(
to_string(u) ==
"0102030405060708090A0B0C");
82 BEAST_EXPECT(*u.data() == 1);
83 BEAST_EXPECT(u.signum() == 1);
85 BEAST_EXPECT(!u.isZero());
86 BEAST_EXPECT(u.isNonZero());
90 BEAST_EXPECT(d == ++t);
103 BEAST_EXPECT(
to_string(v) ==
"FEFDFCFBFAF9F8F7F6F5F4F3");
104 BEAST_EXPECT(*v.data() == 0xfe);
105 BEAST_EXPECT(v.signum() == 1);
107 BEAST_EXPECT(!v.isZero());
108 BEAST_EXPECT(v.isNonZero());
112 BEAST_EXPECT(d == --t);
115 BEAST_EXPECT(
compare(u, v) < 0);
116 BEAST_EXPECT(
compare(v, u) > 0);
119 BEAST_EXPECT(v == u);
123 BEAST_EXPECT(
to_string(z) ==
"000000000000000000000000");
124 BEAST_EXPECT(*z.data() == 0);
125 BEAST_EXPECT(*z.begin() == 0);
126 BEAST_EXPECT(*
std::prev(z.end(), 1) == 0);
127 BEAST_EXPECT(z.signum() == 0);
129 BEAST_EXPECT(z.isZero());
130 BEAST_EXPECT(!z.isNonZero());
133 BEAST_EXPECT(d == 0);
138 BEAST_EXPECT(n ==
test96(1));
140 BEAST_EXPECT(n == beast::zero);
141 BEAST_EXPECT(n == z);
143 BEAST_EXPECT(
to_string(n) ==
"FFFFFFFFFFFFFFFFFFFFFFFF");
145 BEAST_EXPECT(n == z);
155 BEAST_EXPECT(uset.
size() == 4);
159 BEAST_EXPECT(tmp == u);
175 x[i] = (
'G' + (i % 10));
202 static_assert(
test96(
"0").signum() == 0);
203 static_assert(
test96(
"000000000000000000000000").signum() == 0);
204 static_assert(
test96(
"000000000000000000000001").signum() == 1);
205 static_assert(
test96(
"800000000000000000000000").signum() == 1);
210 static_assert(
test96(
"00000000000000000000000").signum() == 0);
213 static_assert(
test96(
"0000000000000000000000000").signum() == 0);
216 static_assert(
test96(
"00000000000000000000000 ").signum() == 1);
217 static_assert(
test96(
"00000000000000000000000/").signum() == 1);
218 static_assert(
test96(
"00000000000000000000000:").signum() == 1);
219 static_assert(
test96(
"00000000000000000000000@").signum() == 1);
220 static_assert(
test96(
"00000000000000000000000G").signum() == 1);
221 static_assert(
test96(
"00000000000000000000000`").signum() == 1);
222 static_assert(
test96(
"00000000000000000000000g").signum() == 1);
223 static_assert(
test96(
"00000000000000000000000~").signum() == 1);
236 [[maybe_unused]]
test96 t96(sView);
245 BEAST_EXPECT(caught);
256 [[maybe_unused]]
test96 t96(sView);
264 BEAST_EXPECT(caught);
271 char const*
const str;
274 constexpr StrBaseUint(
char const* s) : str(s), tst(s)
278 constexpr StrBaseUint testCases[] = {
279 "000000000000000000000000",
280 "000000000000000000000001",
281 "fedcba9876543210ABCDEF91",
282 "19FEDCBA0123456789abcdef",
283 "800000000000000000000000",
284 "fFfFfFfFfFfFfFfFfFfFfFfF"};
286 for (StrBaseUint
const& t : testCases)
290 BEAST_EXPECT(t96 == t.tst);