20#include <xrpl/basics/Blob.h>
21#include <xrpl/basics/base_uint.h>
22#include <xrpl/basics/hardened_hash.h>
23#include <xrpl/beast/unit_test.h>
24#include <boost/endian/conversion.hpp>
34template <std::
size_t Bits>
37 static constexpr auto const endian = boost::endian::order::big;
68 static constexpr std::
69 array<std::pair<std::string_view, std::string_view>, 6>
71 {{
"0000000000000000",
"0000000000000001"},
72 {
"0000000000000000",
"ffffffffffffffff"},
73 {
"1234567812345678",
"2345678923456789"},
74 {
"8000000000000000",
"8000000000000001"},
75 {
"aaaaaaaaaaaaaaa9",
"aaaaaaaaaaaaaaaa"},
76 {
"fffffffffffffffe",
"ffffffffffffffff"}}};
78 for (
auto const&
arg : test_args)
84 BEAST_EXPECT(!(u == v));
85 BEAST_EXPECT(!(u > v));
86 BEAST_EXPECT(!(u >= v));
87 BEAST_EXPECT(!(v < u));
88 BEAST_EXPECT(!(v <= u));
90 BEAST_EXPECT(!(v == u));
103 {
"000000000000000000000000",
"000000000000000000000001"},
104 {
"000000000000000000000000",
"ffffffffffffffffffffffff"},
105 {
"0123456789ab0123456789ab",
"123456789abc123456789abc"},
106 {
"555555555555555555555555",
"55555555555a555555555555"},
107 {
"aaaaaaaaaaaaaaa9aaaaaaaa",
"aaaaaaaaaaaaaaaaaaaaaaaa"},
108 {
"fffffffffffffffffffffffe",
"ffffffffffffffffffffffff"},
111 for (
auto const&
arg : test_args)
115 BEAST_EXPECT(u <= v);
116 BEAST_EXPECT(u != v);
117 BEAST_EXPECT(!(u == v));
118 BEAST_EXPECT(!(u > v));
119 BEAST_EXPECT(!(u >= v));
120 BEAST_EXPECT(!(v < u));
121 BEAST_EXPECT(!(v <= u));
122 BEAST_EXPECT(v != u);
123 BEAST_EXPECT(!(v == u));
125 BEAST_EXPECT(v >= u);
126 BEAST_EXPECT(u == u);
127 BEAST_EXPECT(v == v);
135 testcase(
"base_uint: general purpose tests");
147 Blob raw{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12};
152 BEAST_EXPECT(raw.size() == u.size());
153 BEAST_EXPECT(
to_string(u) ==
"0102030405060708090A0B0C");
155 BEAST_EXPECT(*u.data() == 1);
156 BEAST_EXPECT(u.signum() == 1);
158 BEAST_EXPECT(!u.isZero());
159 BEAST_EXPECT(u.isNonZero());
163 BEAST_EXPECT(d == ++t);
172 BEAST_EXPECT(w == u);
176 BEAST_EXPECT(
to_string(v) ==
"FEFDFCFBFAF9F8F7F6F5F4F3");
178 BEAST_EXPECT(*v.data() == 0xfe);
179 BEAST_EXPECT(v.signum() == 1);
181 BEAST_EXPECT(!v.isZero());
182 BEAST_EXPECT(v.isNonZero());
186 BEAST_EXPECT(d == --t);
193 BEAST_EXPECT(v == u);
197 BEAST_EXPECT(
to_string(z) ==
"000000000000000000000000");
199 BEAST_EXPECT(*z.data() == 0);
200 BEAST_EXPECT(*z.begin() == 0);
201 BEAST_EXPECT(*
std::prev(z.end(), 1) == 0);
202 BEAST_EXPECT(z.signum() == 0);
204 BEAST_EXPECT(z.isZero());
205 BEAST_EXPECT(!z.isNonZero());
208 BEAST_EXPECT(d == 0);
213 BEAST_EXPECT(n ==
test96(1));
215 BEAST_EXPECT(n == beast::zero);
216 BEAST_EXPECT(n == z);
218 BEAST_EXPECT(
to_string(n) ==
"FFFFFFFFFFFFFFFFFFFFFFFF");
221 BEAST_EXPECT(n == z);
232 BEAST_EXPECT(uset.
size() == 4);
236 BEAST_EXPECT(tmp == u);
252 x[i] = (
'G' + (i % 10));
279 static_assert(
test96(
"0").signum() == 0);
280 static_assert(
test96(
"000000000000000000000000").signum() == 0);
281 static_assert(
test96(
"000000000000000000000001").signum() == 1);
282 static_assert(
test96(
"800000000000000000000000").signum() == 1);
287 static_assert(
test96(
"00000000000000000000000").signum() == 0);
290 static_assert(
test96(
"0000000000000000000000000").signum() == 0);
293 static_assert(
test96(
"00000000000000000000000 ").signum() == 1);
294 static_assert(
test96(
"00000000000000000000000/").signum() == 1);
295 static_assert(
test96(
"00000000000000000000000:").signum() == 1);
296 static_assert(
test96(
"00000000000000000000000@").signum() == 1);
297 static_assert(
test96(
"00000000000000000000000G").signum() == 1);
298 static_assert(
test96(
"00000000000000000000000`").signum() == 1);
299 static_assert(
test96(
"00000000000000000000000g").signum() == 1);
300 static_assert(
test96(
"00000000000000000000000~").signum() == 1);
313 [[maybe_unused]]
test96 t96(sView);
322 BEAST_EXPECT(caught);
333 [[maybe_unused]]
test96 t96(sView);
341 BEAST_EXPECT(caught);
348 char const*
const str;
351 constexpr StrBaseUint(
char const* s) : str(s), tst(s)
355 constexpr StrBaseUint testCases[] = {
356 "000000000000000000000000",
357 "000000000000000000000001",
358 "fedcba9876543210ABCDEF91",
359 "19FEDCBA0123456789abcdef",
360 "800000000000000000000000",
361 "fFfFfFfFfFfFfFfFfFfFfFfF"};
363 for (StrBaseUint
const& t : testCases)
367 BEAST_EXPECT(t96 == t.tst);
testcase_t testcase
Memberspace for declaring test cases.
std::string const & arg() const
Return the argument associated with the runner.
Integers of any length that is a multiple of 32-bits.
static std::size_t constexpr bytes
constexpr bool parseHex(std::string_view sv)
Parse a hex string into a base_uint.
constexpr int signum() const
void hash_append(Hasher &h, Account const &v) noexcept
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.
std::string to_short_string(base_uint< Bits, Tag > const &a)
std::string to_string(base_uint< Bits, Tag > const &a)
void run() override
Runs the suite.
static constexpr auto const endian
static constexpr std::size_t WIDTH
void operator()(void const *key, std::size_t len) noexcept
std::array< std::uint8_t, WIDTH > data_