251 constexpr unsigned int num_chars{T::size() * 2};
252 static_assert(num_chars <= 64);
253 const std::string valid_64char_input{
"0123456789abcdef0123456789ABCDEF0123456789abcdef0123456789ABCDEF"};
254 const auto valid_input{valid_64char_input.substr(0, num_chars)};
257 auto valid_result{T::FromHex(valid_input)};
258 BOOST_REQUIRE(valid_result);
265 BOOST_CHECK(!T::FromHex(valid_input.substr(0, num_chars / 2)));
266 BOOST_CHECK(!T::FromHex(valid_input.substr(0, num_chars - 1)));
271 std::string invalid_chars{R
"( !"#$%&'()*+,-./:;<=>?@GHIJKLMNOPQRSTUVWXYZ[\]^_`ghijklmnopqrstuvwxyz{|}~)"};
272 for (
auto c : invalid_chars) {
273 BOOST_CHECK(!T::FromHex(valid_input.substr(0, num_chars - 1) + c));
276 std::string invalid_prefix{
"0x" + valid_input};
277 BOOST_CHECK(!T::FromHex(std::string_view(invalid_prefix.data(), num_chars)));
282 std::string chars_68{valid_64char_input +
"0123"};
283 BOOST_CHECK_EQUAL(T::FromHex(std::string_view(chars_68.data(), num_chars)).value().ToString(),
ToLower(valid_input));
284 BOOST_CHECK(!T::FromHex(std::string_view(chars_68.data(), num_chars - 1)));
285 BOOST_CHECK(!T::FromHex(std::string_view(chars_68.data(), num_chars + 1)));