Projects : bitcoin : bitcoin_dumpblock_no_losers
1 | #include <boost/test/unit_test.hpp> |
2 | |
3 | #include "../util.h" |
4 | |
5 | BOOST_AUTO_TEST_SUITE(base58_tests) |
6 | |
7 | // TODO: |
8 | // EncodeBase58Check |
9 | // DecodeBase58Check |
10 | // CBase58Data |
11 | // bool SetString(const char* psz) |
12 | // bool SetString(const std::string& str) |
13 | // std::string ToString() const |
14 | // int CompareTo(const CBase58Data& b58) const |
15 | // bool operator==(const CBase58Data& b58) const |
16 | // bool operator<=(const CBase58Data& b58) const |
17 | // bool operator>=(const CBase58Data& b58) const |
18 | // bool operator< (const CBase58Data& b58) const |
19 | // bool operator> (const CBase58Data& b58) const |
20 | |
21 | // CBitcoinAddress |
22 | // bool SetHash160(const uint160& hash160) |
23 | // bool SetPubKey(const std::vector<unsigned char>& vchPubKey) |
24 | // bool IsValid() const |
25 | // CBitcoinAddress() |
26 | // CBitcoinAddress(uint160 hash160In) |
27 | // CBitcoinAddress(const std::vector<unsigned char>& vchPubKey) |
28 | // CBitcoinAddress(const std::string& strAddress) |
29 | // CBitcoinAddress(const char* pszAddress) |
30 | // uint160 GetHash160() const |
31 | |
32 | #define U(x) (reinterpret_cast<const unsigned char*>(x)) |
33 | static struct { |
34 | const unsigned char *data; |
35 | int size; |
36 | } vstrIn[] = { |
37 | {U(""), 0}, |
38 | {U("\x61"), 1}, |
39 | {U("\x62\x62\x62"), 3}, |
40 | {U("\x63\x63\x63"), 3}, |
41 | {U("\x73\x69\x6d\x70\x6c\x79\x20\x61\x20\x6c\x6f\x6e\x67\x20\x73\x74\x72\x69\x6e\x67"), 20}, |
42 | {U("\x00\xeb\x15\x23\x1d\xfc\xeb\x60\x92\x58\x86\xb6\x7d\x06\x52\x99\x92\x59\x15\xae\xb1\x72\xc0\x66\x47"), 25}, |
43 | {U("\x51\x6b\x6f\xcd\x0f"), 5}, |
44 | {U("\xbf\x4f\x89\x00\x1e\x67\x02\x74\xdd"), 9}, |
45 | {U("\x57\x2e\x47\x94"), 4}, |
46 | {U("\xec\xac\x89\xca\xd9\x39\x23\xc0\x23\x21"), 10}, |
47 | {U("\x10\xc8\x51\x1e"), 4}, |
48 | {U("\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"), 10}, |
49 | }; |
50 | |
51 | const char *vstrOut[] = { |
52 | "", |
53 | "2g", |
54 | "a3gV", |
55 | "aPEr", |
56 | "2cFupjhnEsSn59qHXstmK2ffpLv2", |
57 | "1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L", |
58 | "ABnLTmg", |
59 | "3SEo3LWLoPntC", |
60 | "3EFU7m", |
61 | "EJDM8drfXA6uyA", |
62 | "Rt5zm", |
63 | "1111111111" |
64 | }; |
65 | |
66 | BOOST_AUTO_TEST_CASE(base58_EncodeBase58) |
67 | { |
68 | for (int i=0; i<sizeof(vstrIn)/sizeof(vstrIn[0]); i++) |
69 | { |
70 | BOOST_CHECK_EQUAL(EncodeBase58(vstrIn[i].data, vstrIn[i].data + vstrIn[i].size), vstrOut[i]); |
71 | } |
72 | } |
73 | |
74 | BOOST_AUTO_TEST_CASE(base58_DecodeBase58) |
75 | { |
76 | std::vector<unsigned char> result; |
77 | for (int i=0; i<sizeof(vstrIn)/sizeof(vstrIn[0]); i++) |
78 | { |
79 | std::vector<unsigned char> expected(vstrIn[i].data, vstrIn[i].data + vstrIn[i].size); |
80 | BOOST_CHECK(DecodeBase58(vstrOut[i], result)); |
81 | BOOST_CHECK_EQUAL_COLLECTIONS(result.begin(), result.end(), expected.begin(), expected.end()); |
82 | } |
83 | BOOST_CHECK(!DecodeBase58("invalid", result)); |
84 | } |
85 | |
86 | BOOST_AUTO_TEST_SUITE_END() |
87 |