mirror of
https://github.com/bitcoin/bitcoin.git
synced 2026-01-19 23:03:45 +01:00
Merge bitcoin/bitcoin#30618: test: support std::optional in BOOST_CHECK_* and increase FromUserHex fuzz feature coverage
1eac96a503Compare FromUserHex result against other hex validators and parsers (Lőrinc)19947863e1Use BOOST_CHECK_EQUAL for optional, arith_uint256, uint256, uint160 (Lőrinc)743ac30e34Add std::optional support to Boost's equality check (Lőrinc) Pull request description: Enhanced `FromUserHex` coverage by: * Added `std::optional` support to `BOOST_CHECK_EQUAL`, allowing direct comparisons of `std::optional<T>` with other `T` expected values. * Increased fuzz testing for hex parsing to validate against other hex validators and parsers. ---- * Use BOOST_CHECK_EQUAL for https://github.com/bitcoin/bitcoin/pull/30569#discussion_r1706637780 arith_uint256, uint256, uint160 Example error before: > unknown location:0: fatal error: in "validation_chainstatemanager_tests/chainstatemanager_args": std::bad_optional_access: bad_optional_access test/validation_chainstatemanager_tests.cpp:781: last checkpoint after: > test/validation_chainstatemanager_tests.cpp:801: error: in "validation_chainstatemanager_tests/chainstatemanager_args": check set_opts({"-assumevalid=0"}).assumed_valid_block == uint256::ZERO has failed [std::nullopt != 0000000000000000000000000000000000000000000000000000000000000000] ACKs for top commit: stickies-v: re-ACK1eac96a503ryanofsky: Code review ACK1eac96a503. Only changes since last review were auto type and fuzz test tweaks. hodlinator: ACK1eac96a503Tree-SHA512: f1d2c65f0ee4e97830700be5b330189207b11ed0c89a8cebf0f97d43308402a6b3732e10130c79a0c044f7d2eeabfb5359990825aadf02c4ec19428dcd982b00
This commit is contained in:
@@ -299,15 +299,15 @@ BOOST_AUTO_TEST_CASE(from_hex)
|
||||
|
||||
BOOST_AUTO_TEST_CASE(from_user_hex)
|
||||
{
|
||||
BOOST_CHECK_EQUAL(uint256::FromUserHex("").value(), uint256::ZERO);
|
||||
BOOST_CHECK_EQUAL(uint256::FromUserHex("0x").value(), uint256::ZERO);
|
||||
BOOST_CHECK_EQUAL(uint256::FromUserHex("0").value(), uint256::ZERO);
|
||||
BOOST_CHECK_EQUAL(uint256::FromUserHex("00").value(), uint256::ZERO);
|
||||
BOOST_CHECK_EQUAL(uint256::FromUserHex("1").value(), uint256::ONE);
|
||||
BOOST_CHECK_EQUAL(uint256::FromUserHex("0x10").value(), uint256{0x10});
|
||||
BOOST_CHECK_EQUAL(uint256::FromUserHex("10").value(), uint256{0x10});
|
||||
BOOST_CHECK_EQUAL(uint256::FromUserHex("0xFf").value(), uint256{0xff});
|
||||
BOOST_CHECK_EQUAL(uint256::FromUserHex("Ff").value(), uint256{0xff});
|
||||
BOOST_CHECK_EQUAL(uint256::FromUserHex(""), uint256::ZERO);
|
||||
BOOST_CHECK_EQUAL(uint256::FromUserHex("0x"), uint256::ZERO);
|
||||
BOOST_CHECK_EQUAL(uint256::FromUserHex("0"), uint256::ZERO);
|
||||
BOOST_CHECK_EQUAL(uint256::FromUserHex("00"), uint256::ZERO);
|
||||
BOOST_CHECK_EQUAL(uint256::FromUserHex("1"), uint256::ONE);
|
||||
BOOST_CHECK_EQUAL(uint256::FromUserHex("0x10"), uint256{0x10});
|
||||
BOOST_CHECK_EQUAL(uint256::FromUserHex("10"), uint256{0x10});
|
||||
BOOST_CHECK_EQUAL(uint256::FromUserHex("0xFf"), uint256{0xff});
|
||||
BOOST_CHECK_EQUAL(uint256::FromUserHex("Ff"), uint256{0xff});
|
||||
const std::string valid_hex_64{"0x0123456789abcdef0123456789abcdef0123456789ABDCEF0123456789ABCDEF"};
|
||||
BOOST_REQUIRE_EQUAL(valid_hex_64.size(), 2 + 64); // 0x prefix and 64 hex digits
|
||||
BOOST_CHECK_EQUAL(uint256::FromUserHex(valid_hex_64.substr(2)).value().ToString(), ToLower(valid_hex_64.substr(2)));
|
||||
@@ -334,7 +334,7 @@ BOOST_AUTO_TEST_CASE( check_ONE )
|
||||
|
||||
BOOST_AUTO_TEST_CASE(FromHex_vs_uint256)
|
||||
{
|
||||
auto runtime_uint{uint256::FromHex("4A5E1E4BAAB89F3A32518A88C31BC87F618f76673e2cc77ab2127b7afdeda33b").value()};
|
||||
auto runtime_uint{uint256::FromHex("4A5E1E4BAAB89F3A32518A88C31BC87F618f76673e2cc77ab2127b7afdeda33b")};
|
||||
constexpr uint256 consteval_uint{ "4a5e1e4baab89f3a32518a88c31bc87f618f76673e2cc77ab2127b7afdeda33b"};
|
||||
BOOST_CHECK_EQUAL(consteval_uint, runtime_uint);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user