mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-11-12 15:09:59 +01:00
util: ParseByteUnits - Parse a string with suffix unit [k|K|m|M|g|G|t|T]
A convenience utility for human readable arguments/config e.g. -maxuploadtarget=500g
This commit is contained in:
@@ -2456,4 +2456,52 @@ BOOST_AUTO_TEST_CASE(remove_prefix)
|
||||
BOOST_CHECK_EQUAL(RemovePrefix("", ""), "");
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(util_ParseByteUnits)
|
||||
{
|
||||
auto noop = ByteUnit::NOOP;
|
||||
|
||||
// no multiplier
|
||||
BOOST_CHECK_EQUAL(ParseByteUnits("1", noop).value(), 1);
|
||||
BOOST_CHECK_EQUAL(ParseByteUnits("0", noop).value(), 0);
|
||||
|
||||
BOOST_CHECK_EQUAL(ParseByteUnits("1k", noop).value(), 1000ULL);
|
||||
BOOST_CHECK_EQUAL(ParseByteUnits("1K", noop).value(), 1ULL << 10);
|
||||
|
||||
BOOST_CHECK_EQUAL(ParseByteUnits("2m", noop).value(), 2'000'000ULL);
|
||||
BOOST_CHECK_EQUAL(ParseByteUnits("2M", noop).value(), 2ULL << 20);
|
||||
|
||||
BOOST_CHECK_EQUAL(ParseByteUnits("3g", noop).value(), 3'000'000'000ULL);
|
||||
BOOST_CHECK_EQUAL(ParseByteUnits("3G", noop).value(), 3ULL << 30);
|
||||
|
||||
BOOST_CHECK_EQUAL(ParseByteUnits("4t", noop).value(), 4'000'000'000'000ULL);
|
||||
BOOST_CHECK_EQUAL(ParseByteUnits("4T", noop).value(), 4ULL << 40);
|
||||
|
||||
// check default multiplier
|
||||
BOOST_CHECK_EQUAL(ParseByteUnits("5", ByteUnit::K).value(), 5ULL << 10);
|
||||
|
||||
// NaN
|
||||
BOOST_CHECK(!ParseByteUnits("", noop));
|
||||
BOOST_CHECK(!ParseByteUnits("foo", noop));
|
||||
|
||||
// whitespace
|
||||
BOOST_CHECK(!ParseByteUnits("123m ", noop));
|
||||
BOOST_CHECK(!ParseByteUnits(" 123m", noop));
|
||||
|
||||
// no +-
|
||||
BOOST_CHECK(!ParseByteUnits("-123m", noop));
|
||||
BOOST_CHECK(!ParseByteUnits("+123m", noop));
|
||||
|
||||
// zero padding
|
||||
BOOST_CHECK_EQUAL(ParseByteUnits("020M", noop).value(), 20ULL << 20);
|
||||
|
||||
// fractions not allowed
|
||||
BOOST_CHECK(!ParseByteUnits("0.5T", noop));
|
||||
|
||||
// overflow
|
||||
BOOST_CHECK(!ParseByteUnits("18446744073709551615g", noop));
|
||||
|
||||
// invalid unit
|
||||
BOOST_CHECK(!ParseByteUnits("1x", noop));
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_SUITE_END()
|
||||
|
||||
Reference in New Issue
Block a user