46#include <boost/test/unit_test.hpp>
48using namespace std::literals;
74 explicit NoCopyOrMove(
int i) : i{i} { }
76 NoCopyOrMove() =
delete;
77 NoCopyOrMove(
const NoCopyOrMove&) =
delete;
78 NoCopyOrMove(NoCopyOrMove&&) =
delete;
79 NoCopyOrMove& operator=(
const NoCopyOrMove&) =
delete;
80 NoCopyOrMove& operator=(NoCopyOrMove&&) =
delete;
82 operator bool()
const {
return i != 0; }
84 int get_ip1() {
return i + 1; }
88 [&]() {
Assume(get_ip1()); }();
89 return Assume(get_ip1() != 5);
97 const std::unique_ptr<int> p_two =
Assert(std::make_unique<int>(2));
99 const int two = *
Assert(p_two);
103 const bool result{
Assume(two == 2)};
116 const int nine{*
Assert(std::optional<int>{9})};
128 BOOST_ERROR(
"break was swallowed!");
138 BOOST_ERROR(
"break was swallowed!");
142constexpr char HEX_PARSE_INPUT[] =
"04678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11d5f";
144 0x04, 0x67, 0x8a, 0xfd, 0xb0, 0xfe, 0x55, 0x48, 0x27, 0x19, 0x67, 0xf1, 0xa6, 0x71, 0x30, 0xb7,
145 0x10, 0x5c, 0xd6, 0xa8, 0x28, 0xe0, 0x39, 0x09, 0xa6, 0x79, 0x62, 0xe0, 0xea, 0x1f, 0x61, 0xde,
146 0xb6, 0x49, 0xf6, 0xbc, 0x3f, 0x4c, 0xef, 0x38, 0xc4, 0xf3, 0x55, 0x04, 0xe5, 0x1e, 0xc1, 0x12,
147 0xde, 0x5c, 0x38, 0x4d, 0xf7, 0xba, 0x0b, 0x8d, 0x57, 0x8a, 0x4c, 0x70, 0x2b, 0x6b, 0xf1, 0x1d,
153 std::vector<unsigned char> result;
157 constexpr std::array<std::byte, 65> hex_literal_array{
operator""_hex<util::detail::Hex(HEX_PARSE_INPUT)>()};
159 BOOST_CHECK_EQUAL_COLLECTIONS(hex_literal_span.begin(), hex_literal_span.end(), expected.begin(), expected.end());
161 const std::vector<std::byte> hex_literal_vector{
operator""_hex_v<util::detail::Hex(HEX_PARSE_INPUT)>()};
163 BOOST_CHECK_EQUAL_COLLECTIONS(hex_literal_span.begin(), hex_literal_span.end(), expected.begin(), expected.end());
165 constexpr std::array<uint8_t, 65> hex_literal_array_uint8{
operator""_hex_u8<util::detail::Hex(HEX_PARSE_INPUT)>()};
166 BOOST_CHECK_EQUAL_COLLECTIONS(hex_literal_array_uint8.begin(), hex_literal_array_uint8.end(), expected.begin(), expected.end());
168 result =
operator""_hex_v_u8<util::detail::Hex(HEX_PARSE_INPUT)>();
169 BOOST_CHECK_EQUAL_COLLECTIONS(result.begin(), result.end(), expected.begin(), expected.end());
172 BOOST_CHECK_EQUAL_COLLECTIONS(result.begin(), result.end(), expected.begin(), expected.end());
175 BOOST_CHECK_EQUAL_COLLECTIONS(result.begin(), result.end(), expected.begin(), expected.end());
178 expected = {0x12, 0x34, 0x56, 0x78};
180 BOOST_CHECK_EQUAL_COLLECTIONS(result.begin(), result.end(), expected.begin(), expected.end());
181 result = TryParseHex<uint8_t>(
"12 34 56 78").value();
182 BOOST_CHECK_EQUAL_COLLECTIONS(result.begin(), result.end(), expected.begin(), expected.end());
185 expected = {0x89, 0x34, 0x56, 0x78};
187 BOOST_CHECK_EQUAL_COLLECTIONS(result.begin(), result.end(), expected.begin(), expected.end());
188 result = TryParseHex<uint8_t>(
" 89 34 56 78").value();
189 BOOST_CHECK_EQUAL_COLLECTIONS(result.begin(), result.end(), expected.begin(), expected.end());
192 expected = {0xff, 0xaa};
194 BOOST_CHECK_EQUAL_COLLECTIONS(result.begin(), result.end(), expected.begin(), expected.end());
195 result = TryParseHex<uint8_t>(
" Ff aA ").value();
196 BOOST_CHECK_EQUAL_COLLECTIONS(result.begin(), result.end(), expected.begin(), expected.end());
199 static_assert(
""_hex.empty());
200 static_assert(
""_hex_u8.empty());
211 const std::string with_embedded_null{
" 11 "s
242 constexpr std::string_view out_exp{
"04678afdb0"};
253 auto input = std::string();
254 for (
size_t i=0; i<256; ++i) {
255 input.push_back(
static_cast<char>(i));
259 BOOST_TEST_REQUIRE(hex.size() == 512);
260 static constexpr auto hexmap = std::string_view(
"0123456789abcdef");
261 for (
size_t i = 0; i < 256; ++i) {
262 auto upper = hexmap.find(hex[i * 2]);
263 auto lower = hexmap.find(hex[i * 2 + 1]);
264 BOOST_TEST_REQUIRE(upper != std::string_view::npos);
265 BOOST_TEST_REQUIRE(lower != std::string_view::npos);
266 BOOST_TEST_REQUIRE(i == upper*16 + lower);
273 std::array mut_arr{uint8_t{0xaa}, uint8_t{0xbb}};
275 mut_bytes[1] = std::byte{0x11};
288 const auto op_upper = [](
const std::string&
s) {
return ToUpper(
s); };
296 const std::string original(
"A test \"%s\" string '%s'.");
297 auto test_replaceall = [&original](
const std::string& search,
const std::string& substitute,
const std::string& expected) {
298 auto test = original;
303 test_replaceall(
"",
"foo", original);
304 test_replaceall(original,
"foo",
"foo");
305 test_replaceall(
"%s",
"foo",
"A test \"foo\" string 'foo'.");
306 test_replaceall(
"\"",
"foo",
"A test foo%sfoo string '%s'.");
307 test_replaceall(
"'",
"foo",
"A test \"%s\" string foo%sfoo.");
322 BOOST_CHECK_EQUAL(
TrimString(std::string(
"\x05\x04\x03\x02\x01\x00", 6), std::string(
"\x05\x04\x03\x02\x01", 5)), std::string(
"\0", 1));
355 const std::string valid{
"2000-01-01T00:00:01Z"};
357 for (
auto mut{0U}; mut < valid.size(); ++mut) {
358 std::string invalid{valid};
509 for (
int mod=2;mod<11;mod++)
513 int err = 30*10000./mod*sqrt((1./mod*(1-1./mod))/10000.);
515 while(mask<mod-1)mask=(mask<<1)+1;
519 for (
int i = 0; i < 10000; i++) {
522 rval=m_rng.rand32()&mask;
523 }
while(rval>=(uint32_t)mod);
544#define B "check_prefix"
545#define E "check_postfix"
548 int64_t s64t = -9223372036854775807LL;
549 uint64_t u64t = 18446744073709551615ULL;
554 size_t st = 12345678;
555 ssize_t sst = -12345678;
560 ptrdiff_t pt = 87654321;
561 ptrdiff_t spt = -87654321;
581 for (
const auto& num_sleep : {0ms, 1ms}) {
595 const auto steady_ms_0 = Now<SteadyMilliseconds>();
596 const auto steady_0 = std::chrono::steady_clock::now();
597 const auto ms_0 = GetTime<std::chrono::milliseconds>();
598 const auto us_0 = GetTime<std::chrono::microseconds>();
600 BOOST_CHECK(steady_ms_0 < Now<SteadyMilliseconds>());
601 BOOST_CHECK(steady_0 + 1ms <= std::chrono::steady_clock::now());
602 BOOST_CHECK(ms_0 < GetTime<std::chrono::milliseconds>());
603 BOOST_CHECK(us_0 < GetTime<std::chrono::microseconds>());
625 constexpr T MAXI{std::numeric_limits<T>::max()};
645 TestAddMatrixOverflow<T>();
646 constexpr T MINI{std::numeric_limits<T>::min()};
647 constexpr T MAXI{std::numeric_limits<T>::max()};
665 TestAddMatrixOverflow<unsigned>();
666 TestAddMatrix<signed>();
728 BOOST_CHECK(!ToIntegral<T>(
"-32482348723847471234"));
729 BOOST_CHECK(!ToIntegral<T>(
"32482348723847471234"));
744 RunToIntegralTests<uint64_t>();
745 RunToIntegralTests<int64_t>();
746 RunToIntegralTests<uint32_t>();
747 RunToIntegralTests<int32_t>();
748 RunToIntegralTests<uint16_t>();
749 RunToIntegralTests<int16_t>();
750 RunToIntegralTests<uint8_t>();
751 RunToIntegralTests<int8_t>();
753 BOOST_CHECK(!ToIntegral<int64_t>(
"-9223372036854775809"));
754 BOOST_CHECK_EQUAL(ToIntegral<int64_t>(
"-9223372036854775808").value(), -9'223'372'036'854'775'807LL - 1LL);
755 BOOST_CHECK_EQUAL(ToIntegral<int64_t>(
"9223372036854775807").value(), 9'223'372'036'854'775'807);
756 BOOST_CHECK(!ToIntegral<int64_t>(
"9223372036854775808"));
760 BOOST_CHECK_EQUAL(ToIntegral<uint64_t>(
"18446744073709551615").value(), 18'446'744'073'709'551'615ULL);
761 BOOST_CHECK(!ToIntegral<uint64_t>(
"18446744073709551616"));
796 return strtoll(str.c_str(),
nullptr, 10);
826 BOOST_CHECK_EQUAL(LocaleIndependentAtoi<int32_t>(
"-32482348723847471234"), -2'147'483'647 - 1);
827 BOOST_CHECK_EQUAL(LocaleIndependentAtoi<int32_t>(
"32482348723847471234"), 2'147'483'647);
829 BOOST_CHECK_EQUAL(LocaleIndependentAtoi<int64_t>(
"-9223372036854775809"), -9'223'372'036'854'775'807LL - 1LL);
830 BOOST_CHECK_EQUAL(LocaleIndependentAtoi<int64_t>(
"-9223372036854775808"), -9'223'372'036'854'775'807LL - 1LL);
831 BOOST_CHECK_EQUAL(LocaleIndependentAtoi<int64_t>(
"9223372036854775807"), 9'223'372'036'854'775'807);
832 BOOST_CHECK_EQUAL(LocaleIndependentAtoi<int64_t>(
"9223372036854775808"), 9'223'372'036'854'775'807);
834 std::map<std::string, int64_t> atoi64_test_pairs = {
835 {
"-9223372036854775809", std::numeric_limits<int64_t>::min()},
836 {
"-9223372036854775808", -9'223'372'036'854'775'807LL - 1LL},
837 {
"9223372036854775807", 9'223'372'036'854'775'807},
838 {
"9223372036854775808", std::numeric_limits<int64_t>::max()},
845 for (
const auto& pair : atoi64_test_pairs) {
850 for (
const auto& pair : atoi64_test_pairs) {
856 BOOST_CHECK_EQUAL(LocaleIndependentAtoi<uint64_t>(
"18446744073709551615"), 18'446'744'073'709'551'615ULL);
857 BOOST_CHECK_EQUAL(LocaleIndependentAtoi<uint64_t>(
"18446744073709551616"), 18'446'744'073'709'551'615ULL);
859 BOOST_CHECK_EQUAL(LocaleIndependentAtoi<int32_t>(
"-2147483649"), -2'147'483'648LL);
860 BOOST_CHECK_EQUAL(LocaleIndependentAtoi<int32_t>(
"-2147483648"), -2'147'483'648LL);
866 BOOST_CHECK_EQUAL(LocaleIndependentAtoi<uint32_t>(
"4294967295"), 4'294'967'295U);
867 BOOST_CHECK_EQUAL(LocaleIndependentAtoi<uint32_t>(
"4294967296"), 4'294'967'295U);
1068 BOOST_CHECK_EQUAL(
FormatParagraph(
"This_is_a_very_long_test_string_without_any_spaces_so_it_should_just_get_returned_as_is_despite_the_length until it gets here", 79),
"This_is_a_very_long_test_string_without_any_spaces_so_it_should_just_get_returned_as_is_despite_the_length\nuntil it gets here");
1071 BOOST_CHECK_EQUAL(
FormatParagraph(
"a b c d e f g h i j k l m n o p q r s t u v w x y z 1 2 3 4 5 6 7 8 9 a b c de f g h i j k l m n o p", 79),
"a b c d e f g h i j k l m n o p q r s t u v w x y z 1 2 3 4 5 6 7 8 9 a b c de\nf g h i j k l m n o p");
1072 BOOST_CHECK_EQUAL(
FormatParagraph(
"x\na b c d e f g h i j k l m n o p q r s t u v w x y z 1 2 3 4 5 6 7 8 9 a b c de f g h i j k l m n o p", 79),
"x\na b c d e f g h i j k l m n o p q r s t u v w x y z 1 2 3 4 5 6 7 8 9 a b c de\nf g h i j k l m n o p");
1074 BOOST_CHECK_EQUAL(
FormatParagraph(
"x\na b c d e f g h i j k l m n o p q r s t u v w x y z 1 2 3 4 5 6 7 8 9 a b c de f g h i j k l m n o p q r s t u v w x y z 0 1 2 3 4 5 6 7 8 9 a b c d e fg h i j k", 79, 4),
"x\na b c d e f g h i j k l m n o p q r s t u v w x y z 1 2 3 4 5 6 7 8 9 a b c de\n f g h i j k l m n o p q r s t u v w x y z 0 1 2 3 4 5 6 7 8 9 a b c d e fg\n h i j k");
1076 BOOST_CHECK_EQUAL(
FormatParagraph(
"This is a very long test string. This is a second sentence in the very long test string.", 79),
"This is a very long test string. This is a second sentence in the very long\ntest string.");
1077 BOOST_CHECK_EQUAL(
FormatParagraph(
"This is a very long test string.\nThis is a second sentence in the very long test string. This is a third sentence in the very long test string.", 79),
"This is a very long test string.\nThis is a second sentence in the very long test string. This is a third\nsentence in the very long test string.");
1078 BOOST_CHECK_EQUAL(
FormatParagraph(
"This is a very long test string.\n\nThis is a second sentence in the very long test string. This is a third sentence in the very long test string.", 79),
"This is a very long test string.\n\nThis is a second sentence in the very long test string. This is a third\nsentence in the very long test string.");
1079 BOOST_CHECK_EQUAL(
FormatParagraph(
"Testing that normal newlines do not get indented.\nLike here.", 79),
"Testing that normal newlines do not get indented.\nLike here.");
1084 std::vector<std::string> comments;
1085 comments.emplace_back(
"comment1");
1086 std::vector<std::string> comments2;
1087 comments2.emplace_back(
"comment1");
1183 int rv = read(fd, &ch, 1);
1195 rv = write(fd, &ch, 1);
1201 rv = write(fd, &ch, 1);
1216 fs::path dirname = m_args.GetDataDirBase() /
"lock_dir";
1222 void (*old_handler)(int) = signal(SIGCHLD, SIG_DFL);
1302 signal(SIGCHLD, old_handler);
1307 fs::remove_all(dirname);
1347 return std::string(span.
begin(), span.
end());
1358 input =
"MilkToastHoney";
1360 success =
Const(
"", sp);
1364 success =
Const(
"Milk", sp);
1368 success =
Const(
"Bread", sp);
1371 success =
Const(
"Toast", sp);
1375 success =
Const(
"Honeybadger", sp);
1378 success =
Const(
"Honey", sp);
1383 input =
"Foo(Bar(xy,z()))";
1386 success =
Func(
"FooBar", sp);
1389 success =
Func(
"Foo(", sp);
1392 success =
Func(
"Foo", sp);
1396 success =
Func(
"Bar", sp);
1400 success =
Func(
"xy", sp);
1406 input =
"(n*(n-1))/2";
1418 input =
"(aaaaa,bbbbb()),c";
1430 input =
"((a),(b),(c)),xxx";
1437 std::vector<Span<const char>> results;
1440 results =
Split(input,
'x');
1447 input =
"one#two#three";
1448 results =
Split(input,
'-');
1452 input =
"one#two#three";
1453 results =
Split(input,
'#');
1459 input =
"*foo*bar*";
1460 results =
Split(input,
'*');
1472 std::vector<std::string> result =
SplitString(
"",
'-');
1479 std::vector<std::string> result =
SplitString(
"-",
'-');
1487 std::vector<std::string> result =
SplitString(
"--",
'-');
1496 std::vector<std::string> result =
SplitString(
"abc",
'-');
1503 std::vector<std::string> result =
SplitString(
"a-b",
'-');
1511 std::vector<std::string> result =
SplitString(
"AAA",
'a');
1518 using V = std::vector<std::string>;
1519 BOOST_TEST(
SplitString(
"a,b.c:d;e",
",;") == V({
"a",
"b.c:d",
"e"}));
1520 BOOST_TEST(
SplitString(
"a,b.c:d;e",
",;:.") == V({
"a",
"b",
"c",
"d",
"e"}));
1521 BOOST_TEST(
SplitString(
"a,b.c:d;e",
"") == V({
"a,b.c:d;e"}));
1522 BOOST_TEST(
SplitString(
"aaa",
"bcdefg") == V({
"aaa"}));
1523 BOOST_TEST(
SplitString(
"x\0a,b"s,
"\0"s) == V({
"x",
"a,b"}));
1524 BOOST_TEST(
SplitString(
"x\0a,b"s,
'\0') == V({
"x",
"a,b"}));
1525 BOOST_TEST(
SplitString(
"x\0a,b"s,
"\0,"s) == V({
"x",
"a",
"b"}));
1526 BOOST_TEST(
SplitString(
"abcdefg",
"bcd") == V({
"a",
"",
"",
"efg"}));
1539 const std::string NUL(
"O\x00O", 3);
1548 const Tracker* origin;
1552 Tracker() noexcept : origin(this) {}
1553 Tracker(
const Tracker&
t) noexcept : origin(
t.origin), copies(
t.copies + 1) {}
1554 Tracker(Tracker&&
t) noexcept : origin(
t.origin), copies(
t.copies) {}
1555 Tracker& operator=(
const Tracker&
t)
noexcept
1559 copies =
t.copies + 1;
1582 auto v2 =
Vector(std::move(t2));
1587 auto v3 =
Vector(t1, std::move(t2));
1594 auto v4 =
Vector(std::move(v3[0]), v3[1], std::move(t3));
1603 auto v5 =
Cat(v1, v4);
1614 auto v6 =
Cat(std::move(v1), v3);
1623 auto v7 =
Cat(v2, std::move(v4));
1634 auto v8 =
Cat(std::move(v2), std::move(v3));
1646 const std::array<unsigned char, 32> privkey_bytes = {
1649 0xD9, 0x7F, 0x51, 0x08, 0xF1, 0x1C, 0xDA, 0x6E,
1650 0xEE, 0xBA, 0xAA, 0x42, 0x0F, 0xEF, 0x07, 0x26,
1651 0xB1, 0xF8, 0x98, 0x06, 0x0B, 0x98, 0x48, 0x9F,
1652 0xA3, 0x09, 0x84, 0x63, 0xC0, 0x03, 0x28, 0x66
1655 const std::string message =
"Trust no one";
1657 const std::string expected_signature =
1658 "IPojfrX2dfPnH26UegfbGQQLrdK844DlHq5157/P6h57WyuS/Qsl+h/WSVGDF4MUi4rWSswW38oimDYfNNUBUOk=";
1661 std::string generated_signature;
1663 BOOST_REQUIRE_MESSAGE(!privkey.
IsValid(),
1664 "Confirm the private key is invalid");
1666 BOOST_CHECK_MESSAGE(!
MessageSign(privkey, message, generated_signature),
1667 "Sign with an invalid private key");
1669 privkey.
Set(privkey_bytes.begin(), privkey_bytes.end(),
true);
1671 BOOST_REQUIRE_MESSAGE(privkey.
IsValid(),
1672 "Confirm the private key is valid");
1674 BOOST_CHECK_MESSAGE(
MessageSign(privkey, message, generated_signature),
1675 "Sign with a valid private key");
1685 "signature should be irrelevant",
1691 "3B5fQsEXEaV8v6U3ejYc8XaKXAkyQj2MjV",
1692 "signature should be irrelevant",
1698 "1KqbBpLy5FARmTPD4VZnDDpYjkUvkr82Pm",
1699 "invalid signature, not in base64 encoding",
1700 "message should be irrelevant"),
1705 "1KqbBpLy5FARmTPD4VZnDDpYjkUvkr82Pm",
1706 "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=",
1707 "message should be irrelevant"),
1712 "15CRxFdyRpGZLW9w8HnHvVduizdL5jKNbs",
1713 "IPojfrX2dfPnH26UegfbGQQLrdK844DlHq5157/P6h57WyuS/Qsl+h/WSVGDF4MUi4rWSswW38oimDYfNNUBUOk=",
1714 "I never signed this"),
1719 "15CRxFdyRpGZLW9w8HnHvVduizdL5jKNbs",
1720 "IPojfrX2dfPnH26UegfbGQQLrdK844DlHq5157/P6h57WyuS/Qsl+h/WSVGDF4MUi4rWSswW38oimDYfNNUBUOk=",
1726 "11canuhp9X2NocwCq7xNrQYTmUgZAnLK3",
1727 "IIcaIENoYW5jZWxsb3Igb24gYnJpbmsgb2Ygc2Vjb25kIGJhaWxvdXQgZm9yIGJhbmtzIAaHRtbCeDZINyavx14=",
1734 const std::string unsigned_tx =
"...";
1735 const std::string prefixed_message =
1738 std::string(1, (
char)unsigned_tx.length()) +
1742 const uint256 message_hash1 =
Hash(prefixed_message);
1746 BOOST_CHECK_NE(message_hash1, signature_hash);
1812 fs::path tmpfolder = m_args.GetDataDirBase();
1813 fs::path tmpfile = tmpfolder /
"read_binary.dat";
1814 std::string expected_text;
1815 for (
int i = 0; i < 30; i++) {
1816 expected_text +=
"0123456789";
1819 std::ofstream file{tmpfile};
1820 file << expected_text;
1830 auto [valid, text] =
ReadBinaryFile(tmpfile, expected_text.size() / 2);
1836 fs::path invalid_file = tmpfolder /
"invalid_binary.dat";
1845 fs::path tmpfolder = m_args.GetDataDirBase();
1846 fs::path tmpfile = tmpfolder /
"write_binary.dat";
1847 std::string expected_text =
"bitcoin";
1849 std::string actual_text;
1850 std::ifstream file{tmpfile};
1851 file >> actual_text;
1859 std::vector<uint8_t> v = {1, 2, 3};
1866 std::vector<bool> v = {
false,
true,
false,
false,
true,
true};
1873 std::deque<int> v = {1, 3, 3, 7};
int64_t CAmount
Amount in satoshis (Can be negative)
static constexpr CAmount COIN
The amount of satoshis in one BTC.
#define Assert(val)
Identity function.
#define Assume(val)
Assume is the identity function.
An encapsulated private key.
bool IsValid() const
Check whether this private key is valid.
void Set(const T pbegin, const T pend, bool fCompressedIn)
Initialize using begin and end iterators to byte data.
A Span is an object that can refer to a contiguous sequence of objects.
constexpr C * begin() const noexcept
constexpr C * end() const noexcept
Path class wrapper to block calls to the fs::path(std::string) implicit constructor and the fs::path:...
std::string FormatSubVersion(const std::string &name, int nClientVersion, const std::vector< std::string > &comments)
Format the subversion field according to BIP 14 spec (https://github.com/bitcoin/bips/blob/master/bip...
uint256 MessageHash(const std::string &message)
Hashes a message for signing and verification in a manner that prevents inadvertently signing a trans...
bool MessageSign(const CKey &privkey, const std::string &message, std::string &signature)
Sign a message.
const std::string MESSAGE_MAGIC
Text used to signify that a signed message follows and to prevent inadvertently signing a transaction...
MessageVerificationResult MessageVerify(const std::string &address, const std::string &signature, const std::string &message)
Verify a signed message.
BOOST_FIXTURE_TEST_SUITE(cuckoocache_tests, BasicTestingSetup)
Test Suite for CuckooCache.
BOOST_AUTO_TEST_SUITE_END()
void ReleaseDirectoryLocks()
Release all directory locks.
uint256 Hash(const T &in1)
Compute the 256-bit hash of an object.
#define T(expected, seed, data)
std::string HexStr(const Span< const uint8_t > s)
Convert a span of bytes to a lower-case hexadecimal string.
std::optional< CAmount > ParseMoney(const std::string &money_string)
Parse an amount denoted in full coins.
std::string FormatMoney(const CAmount n)
Money parsing/formatting utilities.
std::string LogEscapeMessage(std::string_view str)
Belts and suspenders: make sure outgoing log messages don't contain potentially suspicious characters...
static bool create_directories(const std::filesystem::path &p)
Create directory (and if necessary its parents), unless the leaf directory already exists or is a sym...
bool Const(const std::string &str, Span< const char > &sp)
Parse a constant.
Span< const char > Expr(Span< const char > &sp)
Extract the expression that sp begins with.
bool Func(const std::string &str, Span< const char > &sp)
Parse a function call.
""_hex is a compile-time user-defined literal returning a std::array<std::byte>, equivalent to ParseH...
std::vector< std::string > SplitString(std::string_view str, char sep)
consteval uint8_t ConstevalHexDigit(const char c)
consteval version of HexDigit() without the lookup table.
std::string_view TrimStringView(std::string_view str, std::string_view pattern=" \f\n\r\t\v")
std::string_view RemovePrefixView(std::string_view str, std::string_view prefix)
std::string TrimString(std::string_view str, std::string_view pattern=" \f\n\r\t\v")
std::string RemovePrefix(std::string_view str, std::string_view prefix)
auto Join(const C &container, const S &separator, UnaryOp unary_op)
Join all container items.
std::vector< T > Split(const Span< const char > &sp, std::string_view separators)
Split a string on any char found in separators, returning a vector.
void ReplaceAll(std::string &in_out, const std::string &search, const std::string &substitute)
LockResult LockDirectory(const fs::path &directory, const fs::path &lockfile_name, bool probe_only)
#define BOOST_CHECK_EQUAL(v1, v2)
#define BOOST_CHECK(expr)
std::optional< T > CheckedAdd(const T i, const T j) noexcept
T SaturatingAdd(const T i, const T j) noexcept
bool WriteBinaryFile(const fs::path &filename, const std::string &data)
Write contents of std::string to a file.
std::pair< bool, std::string > ReadBinaryFile(const fs::path &filename, size_t maxsize)
Read full contents of a file and return them in a std::string.
@ ERR_MALFORMED_SIGNATURE
The provided signature couldn't be parsed (maybe invalid base64).
@ ERR_INVALID_ADDRESS
The provided address is invalid.
@ ERR_ADDRESS_NO_KEY
The provided address is valid but does not refer to a public key.
@ ERR_NOT_SIGNED
The message was not signed with the private key of the provided address.
@ OK
The message verification was successful.
@ ERR_PUBKEY_NOT_RECOVERED
A public key could not be recovered from the provided signature and message.
Span< const std::byte > MakeByteSpan(V &&v) noexcept
constexpr auto MakeUCharSpan(V &&v) -> decltype(UCharSpanCast(Span{std::forward< V >(v)}))
Like the Span constructor, but for (const) unsigned char member types only.
Span< std::byte > MakeWritableByteSpan(V &&v) noexcept
constexpr bool IsDigit(char c)
Tests if the given character is a decimal digit.
bool TimingResistantEqual(const T &a, const T &b)
Timing-attack-resistant comparison.
std::vector< Byte > ParseHex(std::string_view hex_str)
Like TryParseHex, but returns an empty vector on invalid input.
@ SAFE_CHARS_UA_COMMENT
BIP-0014 subset.
static time_point now() noexcept
Return current system time or mocked time, if set.
#define TRY_LOCK(cs, name)
@ ZEROS
Seed with a compile time constant of zeros.
void UninterruptibleSleep(const std::chrono::microseconds &n)
int64_t GetTime()
DEPRECATED Use either ClockType::now() or Now<TimePointType>() if a cast is needed.
std::string FormatISO8601Date(int64_t nTime)
void SetMockTime(int64_t nMockTimeIn)
DEPRECATED Use SetMockTime with chrono type.
std::optional< int64_t > ParseISO8601DateTime(std::string_view str)
std::string FormatISO8601DateTime(int64_t nTime)
ISO 8601 formatting is preferred.
std::string Capitalize(std::string str)
Capitalizes the first character of the given string.
bool ParseInt32(std::string_view str, int32_t *out)
Convert string to signed 32-bit integer with strict parse error feedback.
bool ParseUInt16(std::string_view str, uint16_t *out)
Convert decimal string to unsigned 16-bit integer with strict parse error feedback.
std::string ToUpper(std::string_view str)
Returns the uppercase equivalent of the given string.
bool ParseFixedPoint(std::string_view val, int decimals, int64_t *amount_out)
Parse number as fixed point according to JSON number syntax.
bool ParseInt64(std::string_view str, int64_t *out)
Convert string to signed 64-bit integer with strict parse error feedback.
bool ParseUInt8(std::string_view str, uint8_t *out)
Convert decimal string to unsigned 8-bit integer with strict parse error feedback.
bool ParseUInt64(std::string_view str, uint64_t *out)
Convert decimal string to unsigned 64-bit integer with strict parse error feedback.
bool IsHex(std::string_view str)
std::string FormatParagraph(std::string_view in, size_t width, size_t indent)
Format a paragraph of text to a fixed width, adding spaces for indentation to any added line.
bool ParseUInt32(std::string_view str, uint32_t *out)
Convert decimal string to unsigned 32-bit integer with strict parse error feedback.
std::optional< std::vector< Byte > > TryParseHex(std::string_view str)
Parse the hex string into bytes (uint8_t or std::byte).
std::optional< uint64_t > ParseByteUnits(std::string_view str, ByteUnit default_multiplier)
Parse a string with suffix unit [k|K|m|M|g|G|t|T].
std::string ToLower(std::string_view str)
Returns the lowercase equivalent of the given string.
std::string SanitizeString(std::string_view str, int rule)
Remove unsafe chars.
int64_t atoi64_legacy(const std::string &str)
constexpr uint8_t HEX_PARSE_OUTPUT[]
constexpr char HEX_PARSE_INPUT[]
static void TestOtherProcess(fs::path dirname, fs::path lockname, int fd)
static constexpr char ExitCommand
static constexpr char UnlockCommand
static void TestAddMatrixOverflow()
static void TestAddMatrix()
BOOST_AUTO_TEST_CASE(util_check)
static void RunToIntegralTests()
static const std::string STRING_WITH_EMBEDDED_NULL_CHAR
static constexpr char LockCommand
static std::string SpanToStr(const Span< const char > &span)
V Cat(V v1, V &&v2)
Concatenate two vectors, moving elements.
std::vector< typename std::common_type< Args... >::type > Vector(Args &&... args)
Construct a vector with the specified elements.
void ClearShrink(V &v) noexcept
Clear a vector (or std::deque) and release its allocated memory.