@@ -73,3 +73,33 @@ TEST(hex, validate_hex)
7373 EXPECT_FALSE (validate_hex (" 0" ));
7474 EXPECT_FALSE (validate_hex (" WXYZ" ));
7575}
76+
77+ TEST (hex, from_hex_to_custom_type)
78+ {
79+ struct X
80+ {
81+ uint8_t bytes[4 ];
82+ };
83+ constexpr auto test = [](std::string_view in) {
84+ return evmc::hex ({evmc::from_hex<X>(in).value ().bytes , sizeof (X)});
85+ };
86+
87+ static_assert (evmc::from_hex<X>(" 01" ).value ().bytes [3 ] == 0x01 ); // Works in constexpr.
88+
89+ EXPECT_EQ (test (" 01020304" ), " 01020304" );
90+ EXPECT_EQ (test (" 010203" ), " 00010203" );
91+ EXPECT_EQ (test (" 0102" ), " 00000102" );
92+ EXPECT_EQ (test (" 01" ), " 00000001" );
93+ EXPECT_EQ (test (" " ), " 00000000" );
94+
95+ EXPECT_EQ (test (" 0x01020304" ), " 01020304" );
96+ EXPECT_EQ (test (" 0x010203" ), " 00010203" );
97+ EXPECT_EQ (test (" 0x0102" ), " 00000102" );
98+ EXPECT_EQ (test (" 0x01" ), " 00000001" );
99+ EXPECT_EQ (test (" 0x" ), " 00000000" );
100+
101+ EXPECT_FALSE (evmc::from_hex<X>(" 0" ));
102+ EXPECT_FALSE (evmc::from_hex<X>(" 0x " ));
103+ EXPECT_FALSE (evmc::from_hex<X>(" 0xf" ));
104+ EXPECT_FALSE (evmc::from_hex<X>(" 0x 00" ));
105+ }
0 commit comments