diff options
author | Samuel Dobson <dobsonsa68@gmail.com> | 2021-11-23 11:31:44 +1300 |
---|---|---|
committer | Samuel Dobson <dobsonsa68@gmail.com> | 2021-11-23 15:48:59 +1300 |
commit | 92f0cafdca11a9463b6f04229c1c47805c97c1b5 (patch) | |
tree | 7b5ecca1ae7b932c40c6fb53e9f4d219d6c9f3ac /src | |
parent | bb4d3e9b970be2a8de3e146623801fc8cbbeb0c7 (diff) | |
download | bitcoin-92f0cafdca11a9463b6f04229c1c47805c97c1b5.tar.xz |
Improve Bech32 boost tests
Diffstat (limited to 'src')
-rw-r--r-- | src/test/bech32_tests.cpp | 78 |
1 files changed, 42 insertions, 36 deletions
diff --git a/src/test/bech32_tests.cpp b/src/test/bech32_tests.cpp index 8eed959228..7601ead5b8 100644 --- a/src/test/bech32_tests.cpp +++ b/src/test/bech32_tests.cpp @@ -70,24 +70,28 @@ BOOST_AUTO_TEST_CASE(bech32_testvectors_invalid) "a12UEL5L", "A12uEL5L", "abcdef1qpzrz9x8gf2tvdw0s3jn54khce6mua7lmqqqxw", + "test1zg69w7y6hn0aqy352euf40x77qddq3dc", }; - static const std::pair<std::string, int> ERRORS[] = { - {"Invalid character or mixed case", 0}, - {"Invalid character or mixed case", 0}, - {"Invalid character or mixed case", 0}, - {"Bech32 string too long", 90}, - {"Missing separator", -1}, - {"Invalid separator position", 0}, - {"Invalid Base 32 character", 2}, - {"Invalid separator position", 2}, - {"Invalid character or mixed case", 8}, - {"Invalid checksum", -1}, // The checksum is calculated using the uppercase form so the entire string is invalid, not just a few characters - {"Invalid separator position", 0}, - {"Invalid separator position", 0}, - {"Invalid character or mixed case", 3}, - {"Invalid character or mixed case", 3}, - {"Invalid checksum", 11} + static const std::pair<std::string, std::vector<int>> ERRORS[] = { + {"Invalid character or mixed case", {0}}, + {"Invalid character or mixed case", {0}}, + {"Invalid character or mixed case", {0}}, + {"Bech32 string too long", {90}}, + {"Missing separator", {}}, + {"Invalid separator position", {0}}, + {"Invalid Base 32 character", {2}}, + {"Invalid separator position", {2}}, + {"Invalid character or mixed case", {8}}, + {"Invalid checksum", {}}, // The checksum is calculated using the uppercase form so the entire string is invalid, not just a few characters + {"Invalid separator position", {0}}, + {"Invalid separator position", {0}}, + {"Invalid character or mixed case", {3, 4, 5, 7}}, + {"Invalid character or mixed case", {3}}, + {"Invalid checksum", {11}}, + {"Invalid checksum", {9, 16}}, }; + static_assert(std::size(CASES) == std::size(ERRORS), "Bech32 CASES and ERRORS should have the same length"); + int i = 0; for (const std::string& str : CASES) { const auto& err = ERRORS[i]; @@ -96,8 +100,7 @@ BOOST_AUTO_TEST_CASE(bech32_testvectors_invalid) std::vector<int> error_locations; std::string error = bech32::LocateErrors(str, error_locations); BOOST_CHECK_EQUAL(err.first, error); - if (err.second == -1) BOOST_CHECK(error_locations.empty()); - else BOOST_CHECK_EQUAL(err.second, error_locations[0]); + BOOST_CHECK(err.second == error_locations); i++; } } @@ -120,24 +123,28 @@ BOOST_AUTO_TEST_CASE(bech32m_testvectors_invalid) "16plkw9", "1p2gdwpf", "abcdef1l7aum6echk45nj2s0wdvt2fg8x9yrzpqzd3ryx", + "test1zg69v7y60n00qy352euf40x77qcusag6", }; - static const std::pair<std::string, int> ERRORS[] = { - {"Invalid character or mixed case", 0}, - {"Invalid character or mixed case", 0}, - {"Invalid character or mixed case", 0}, - {"Bech32 string too long", 90}, - {"Missing separator", -1}, - {"Invalid separator position", 0}, - {"Invalid Base 32 character", 2}, - {"Invalid Base 32 character", 3}, - {"Invalid separator position", 2}, - {"Invalid Base 32 character", 8}, - {"Invalid Base 32 character", 7}, - {"Invalid checksum", -1}, - {"Invalid separator position", 0}, - {"Invalid separator position", 0}, - {"Invalid checksum", 21}, + static const std::pair<std::string, std::vector<int>> ERRORS[] = { + {"Invalid character or mixed case", {0}}, + {"Invalid character or mixed case", {0}}, + {"Invalid character or mixed case", {0}}, + {"Bech32 string too long", {90}}, + {"Missing separator", {}}, + {"Invalid separator position", {0}}, + {"Invalid Base 32 character", {2}}, + {"Invalid Base 32 character", {3}}, + {"Invalid separator position", {2}}, + {"Invalid Base 32 character", {8}}, + {"Invalid Base 32 character", {7}}, + {"Invalid checksum", {}}, + {"Invalid separator position", {0}}, + {"Invalid separator position", {0}}, + {"Invalid checksum", {21}}, + {"Invalid checksum", {13, 32}}, }; + static_assert(std::size(CASES) == std::size(ERRORS), "Bech32m CASES and ERRORS should have the same length"); + int i = 0; for (const std::string& str : CASES) { const auto& err = ERRORS[i]; @@ -146,8 +153,7 @@ BOOST_AUTO_TEST_CASE(bech32m_testvectors_invalid) std::vector<int> error_locations; std::string error = bech32::LocateErrors(str, error_locations); BOOST_CHECK_EQUAL(err.first, error); - if (err.second == -1) BOOST_CHECK(error_locations.empty()); - else BOOST_CHECK_EQUAL(err.second, error_locations[0]); + BOOST_CHECK(err.second == error_locations); i++; } } |