aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorSamuel Dobson <dobsonsa68@gmail.com>2021-11-23 11:31:44 +1300
committerSamuel Dobson <dobsonsa68@gmail.com>2021-11-23 15:48:59 +1300
commit92f0cafdca11a9463b6f04229c1c47805c97c1b5 (patch)
tree7b5ecca1ae7b932c40c6fb53e9f4d219d6c9f3ac /src
parentbb4d3e9b970be2a8de3e146623801fc8cbbeb0c7 (diff)
downloadbitcoin-92f0cafdca11a9463b6f04229c1c47805c97c1b5.tar.xz
Improve Bech32 boost tests
Diffstat (limited to 'src')
-rw-r--r--src/test/bech32_tests.cpp78
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++;
}
}