@@ -386,6 +386,35 @@ BOOST_AUTO_TEST_CASE(from_hex)
386
386
TestFromHex<Wtxid>();
387
387
}
388
388
389
+ BOOST_AUTO_TEST_CASE (from_user_hex)
390
+ {
391
+ BOOST_CHECK_EQUAL (uint256::FromUserHex (" " ).value (), uint256::ZERO);
392
+ BOOST_CHECK_EQUAL (uint256::FromUserHex (" 0x" ).value (), uint256::ZERO);
393
+ BOOST_CHECK_EQUAL (uint256::FromUserHex (" 0" ).value (), uint256::ZERO);
394
+ BOOST_CHECK_EQUAL (uint256::FromUserHex (" 00" ).value (), uint256::ZERO);
395
+ BOOST_CHECK_EQUAL (uint256::FromUserHex (" 1" ).value (), uint256::ONE);
396
+ BOOST_CHECK_EQUAL (uint256::FromUserHex (" 0x10" ).value (), uint256{0x10 });
397
+ BOOST_CHECK_EQUAL (uint256::FromUserHex (" 10" ).value (), uint256{0x10 });
398
+ BOOST_CHECK_EQUAL (uint256::FromUserHex (" 0xFf" ).value (), uint256{0xff });
399
+ BOOST_CHECK_EQUAL (uint256::FromUserHex (" Ff" ).value (), uint256{0xff });
400
+ const std::string valid_hex_64{" 0x0123456789abcdef0123456789abcdef0123456789ABDCEF0123456789ABCDEF" };
401
+ BOOST_REQUIRE_EQUAL (valid_hex_64.size (), 2 + 64 ); // 0x prefix and 64 hex digits
402
+ BOOST_CHECK_EQUAL (uint256::FromUserHex (valid_hex_64.substr (2 )).value ().ToString (), ToLower (valid_hex_64.substr (2 )));
403
+ BOOST_CHECK_EQUAL (uint256::FromUserHex (valid_hex_64.substr (0 )).value ().ToString (), ToLower (valid_hex_64.substr (2 )));
404
+
405
+ BOOST_CHECK (!uint256::FromUserHex (" 0x0 " )); // no spaces at end,
406
+ BOOST_CHECK (!uint256::FromUserHex (" 0x0" )); // or beginning,
407
+ BOOST_CHECK (!uint256::FromUserHex (" 0x 0" )); // or middle,
408
+ BOOST_CHECK (!uint256::FromUserHex (" " )); // etc.
409
+ BOOST_CHECK (!uint256::FromUserHex (" 0x0ga" )); // invalid character
410
+ BOOST_CHECK (!uint256::FromUserHex (" x0" )); // broken prefix
411
+ BOOST_CHECK (!uint256::FromUserHex (" 0x0x00" )); // two prefixes not allowed
412
+ BOOST_CHECK (!uint256::FromUserHex (valid_hex_64.substr (2 ) + " 0" )); // 1 hex digit too many
413
+ BOOST_CHECK (!uint256::FromUserHex (valid_hex_64 + " a" )); // 1 hex digit too many
414
+ BOOST_CHECK (!uint256::FromUserHex (valid_hex_64 + " " )); // whitespace after max length
415
+ BOOST_CHECK (!uint256::FromUserHex (valid_hex_64 + " z" )); // invalid character after max length
416
+ }
417
+
389
418
BOOST_AUTO_TEST_CASE ( check_ONE )
390
419
{
391
420
uint256 one = uint256S (" 0000000000000000000000000000000000000000000000000000000000000001" );
0 commit comments