2 #include <boost/test/unit_test.hpp>
3 #include <boost/foreach.hpp>
11 BOOST_AUTO_TEST_SUITE(util_tests)
21 BOOST_ERROR(
"break was swallowed!");
29 BOOST_ERROR(
"break was swallowed!");
37 BOOST_CHECK_EQUAL(filter.
median(), 15);
40 BOOST_CHECK_EQUAL(filter.
median(), 17);
43 BOOST_CHECK_EQUAL(filter.
median(), 20);
46 BOOST_CHECK_EQUAL(filter.
median(), 17);
49 BOOST_CHECK_EQUAL(filter.
median(), 15);
52 BOOST_CHECK_EQUAL(filter.
median(), 18);
55 BOOST_CHECK_EQUAL(filter.
median(), 7);
58 static const unsigned char ParseHex_expected[65] = {
59 0x04, 0x67, 0x8a, 0xfd, 0xb0, 0xfe, 0x55, 0x48, 0x27, 0x19, 0x67, 0xf1, 0xa6, 0x71, 0x30, 0xb7,
60 0x10, 0x5c, 0xd6, 0xa8, 0x28, 0xe0, 0x39, 0x09, 0xa6, 0x79, 0x62, 0xe0, 0xea, 0x1f, 0x61, 0xde,
61 0xb6, 0x49, 0xf6, 0xbc, 0x3f, 0x4c, 0xef, 0x38, 0xc4, 0xf3, 0x55, 0x04, 0xe5, 0x1e, 0xc1, 0x12,
62 0xde, 0x5c, 0x38, 0x4d, 0xf7, 0xba, 0x0b, 0x8d, 0x57, 0x8a, 0x4c, 0x70, 0x2b, 0x6b, 0xf1, 0x1d,
67 std::vector<unsigned char> result;
68 std::vector<unsigned char> expected(ParseHex_expected, ParseHex_expected +
sizeof(ParseHex_expected));
70 result =
ParseHex(
"04678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11d5f");
71 BOOST_CHECK_EQUAL_COLLECTIONS(result.begin(), result.end(), expected.begin(), expected.end());
75 BOOST_CHECK(result.size() == 4 && result[0] == 0x12 && result[1] == 0x34 && result[2] == 0x56 && result[3] == 0x78);
78 result =
ParseHex(
"1234 invalid 1234");
79 BOOST_CHECK(result.size() == 2 && result[0] == 0x12 && result[1] == 0x34);
85 HexStr(ParseHex_expected, ParseHex_expected +
sizeof(ParseHex_expected)),
86 "04678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11d5f");
89 HexStr(ParseHex_expected, ParseHex_expected + 5,
true),
93 HexStr(ParseHex_expected, ParseHex_expected,
true),
96 std::vector<unsigned char> ParseHex_vec(ParseHex_expected, ParseHex_expected + 5);
99 HexStr(ParseHex_vec,
true),
117 const char *argv_test[] = {
"-ignored",
"-a",
"-b",
"-ccc=argument",
"-ccc=multiple",
"f",
"-d=e"};
135 BOOST_CHECK(
mapArgs[
"-a"] ==
"" &&
mapArgs[
"-ccc"] ==
"multiple");
142 mapArgs[
"strtest1"] =
"string...";
145 mapArgs[
"inttest2"] =
"81985529216486895";
152 BOOST_CHECK_EQUAL(
GetArg(
"strtest1",
"default"),
"string...");
153 BOOST_CHECK_EQUAL(
GetArg(
"strtest2",
"default"),
"default");
154 BOOST_CHECK_EQUAL(
GetArg(
"inttest1", -1), 12345);
155 BOOST_CHECK_EQUAL(
GetArg(
"inttest2", -1), 81985529216486895LL);
156 BOOST_CHECK_EQUAL(
GetArg(
"inttest3", -1), -1);
157 BOOST_CHECK_EQUAL(
GetBoolArg(
"booltest1"),
true);
158 BOOST_CHECK_EQUAL(
GetBoolArg(
"booltest2"),
false);
159 BOOST_CHECK_EQUAL(
GetBoolArg(
"booltest3"),
false);
160 BOOST_CHECK_EQUAL(
GetBoolArg(
"booltest4"),
true);
177 BOOST_CHECK_EQUAL(
FormatMoney((COIN/10000)*123456789,
false),
"12345.6789");
178 BOOST_CHECK_EQUAL(
FormatMoney(COIN,
true),
"+1.00");
179 BOOST_CHECK_EQUAL(
FormatMoney(-COIN,
false),
"-1.00");
180 BOOST_CHECK_EQUAL(
FormatMoney(-COIN,
true),
"-1.00");
182 BOOST_CHECK_EQUAL(
FormatMoney(COIN*100000000,
false),
"100000000.00");
183 BOOST_CHECK_EQUAL(
FormatMoney(COIN*10000000,
false),
"10000000.00");
184 BOOST_CHECK_EQUAL(
FormatMoney(COIN*1000000,
false),
"1000000.00");
185 BOOST_CHECK_EQUAL(
FormatMoney(COIN*100000,
false),
"100000.00");
186 BOOST_CHECK_EQUAL(
FormatMoney(COIN*10000,
false),
"10000.00");
187 BOOST_CHECK_EQUAL(
FormatMoney(COIN*1000,
false),
"1000.00");
188 BOOST_CHECK_EQUAL(
FormatMoney(COIN*100,
false),
"100.00");
189 BOOST_CHECK_EQUAL(
FormatMoney(COIN*10,
false),
"10.00");
190 BOOST_CHECK_EQUAL(
FormatMoney(COIN,
false),
"1.00");
191 BOOST_CHECK_EQUAL(
FormatMoney(COIN/10,
false),
"0.10");
192 BOOST_CHECK_EQUAL(
FormatMoney(COIN/100,
false),
"0.01");
193 BOOST_CHECK_EQUAL(
FormatMoney(COIN/1000,
false),
"0.001");
194 BOOST_CHECK_EQUAL(
FormatMoney(COIN/10000,
false),
"0.0001");
195 BOOST_CHECK_EQUAL(
FormatMoney(COIN/100000,
false),
"0.00001");
196 BOOST_CHECK_EQUAL(
FormatMoney(COIN/1000000,
false),
"0.000001");
197 BOOST_CHECK_EQUAL(
FormatMoney(COIN/10000000,
false),
"0.0000001");
198 BOOST_CHECK_EQUAL(
FormatMoney(COIN/100000000,
false),
"0.00000001");
205 BOOST_CHECK_EQUAL(ret, 0);
208 BOOST_CHECK_EQUAL(ret, (COIN/10000)*123456789);
211 BOOST_CHECK_EQUAL(ret, COIN*100000000);
213 BOOST_CHECK_EQUAL(ret, COIN*10000000);
215 BOOST_CHECK_EQUAL(ret, COIN*1000000);
217 BOOST_CHECK_EQUAL(ret, COIN*100000);
219 BOOST_CHECK_EQUAL(ret, COIN*10000);
221 BOOST_CHECK_EQUAL(ret, COIN*1000);
223 BOOST_CHECK_EQUAL(ret, COIN*100);
225 BOOST_CHECK_EQUAL(ret, COIN*10);
227 BOOST_CHECK_EQUAL(ret, COIN);
229 BOOST_CHECK_EQUAL(ret, COIN/10);
231 BOOST_CHECK_EQUAL(ret, COIN/100);
233 BOOST_CHECK_EQUAL(ret, COIN/1000);
235 BOOST_CHECK_EQUAL(ret, COIN/10000);
237 BOOST_CHECK_EQUAL(ret, COIN/100000);
239 BOOST_CHECK_EQUAL(ret, COIN/1000000);
241 BOOST_CHECK_EQUAL(ret, COIN/10000000);
243 BOOST_CHECK_EQUAL(ret, COIN/100000000);
246 BOOST_CHECK(!
ParseMoney(
"92233720368.54775808", ret));
251 BOOST_CHECK(
IsHex(
"00"));
252 BOOST_CHECK(
IsHex(
"00112233445566778899aabbccddeeffAABBCCDDEEFF"));
253 BOOST_CHECK(
IsHex(
"ff"));
254 BOOST_CHECK(
IsHex(
"FF"));
256 BOOST_CHECK(!
IsHex(
""));
257 BOOST_CHECK(!
IsHex(
"0"));
258 BOOST_CHECK(!
IsHex(
"a"));
259 BOOST_CHECK(!
IsHex(
"eleven"));
260 BOOST_CHECK(!
IsHex(
"00xx00"));
261 BOOST_CHECK(!
IsHex(
"0x0000"));
271 for (
int mod=2;mod<11;mod++)
275 int err = 30*10000./mod*sqrt((1./mod*(1-1./mod))/10000.);
277 while(mask<mod-1)mask=(mask<<1)+1;
281 for (i=0;i<10000;i++)
285 rval=insecure_rand()&mask;
289 BOOST_CHECK(count<=10000/mod+err);
290 BOOST_CHECK(count>=10000/mod-err);
305 BOOST_AUTO_TEST_SUITE_END()
#define TRY_LOCK(cs, name)
void seed_insecure_rand(bool fDeterministic)
Seed insecure_rand using the random pool.
bool IsHex(const string &str)
bool GetBoolArg(const std::string &strArg, bool fDefault)
Return boolean argument or default value.
void ParseParameters(int argc, const char *const argv[])
BOOST_AUTO_TEST_CASE(util_criticalsection)
string FormatMoney(int64 n, bool fPlus)
bool WildcardMatch(const char *psz, const char *mask)
bool TimingResistantEqual(const T &a, const T &b)
Timing-attack-resistant comparison.
std::string GetArg(const std::string &strArg, const std::string &strDefault)
Return string argument or default value.
bool ParseMoney(const string &str, int64 &nRet)
std::string HexStr(const T itbegin, const T itend, bool fSpaces=false)
map< string, vector< string > > mapMultiArgs
vector< unsigned char > ParseHex(const char *psz)
map< string, string > mapArgs