@@ -386,6 +386,35 @@ BOOST_AUTO_TEST_CASE(from_hex)
386386 TestFromHex<Wtxid>();
387387}
388388
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+
389418BOOST_AUTO_TEST_CASE ( check_ONE )
390419{
391420 uint256 one = uint256S (" 0000000000000000000000000000000000000000000000000000000000000001" );
0 commit comments