Changeset View
Changeset View
Standalone View
Standalone View
src/test/rpc_tests.cpp
Show First 20 Lines • Show All 274 Lines • ▼ Show 20 Lines | |||||
static UniValue ValueFromString(const std::string &str) { | static UniValue ValueFromString(const std::string &str) { | ||||
UniValue value; | UniValue value; | ||||
BOOST_CHECK(value.setNumStr(str)); | BOOST_CHECK(value.setNumStr(str)); | ||||
return value; | return value; | ||||
} | } | ||||
BOOST_AUTO_TEST_CASE(rpc_parse_monetary_values) { | BOOST_AUTO_TEST_CASE(rpc_parse_monetary_values) { | ||||
BOOST_CHECK_THROW(AmountFromValue(ValueFromString("-0.00000001")), | Amount x; | ||||
UniValue); | BOOST_CHECK_THROW(x = ValueFromString("-0.00000001"), UniValue); | ||||
BOOST_CHECK_EQUAL(AmountFromValue(ValueFromString("0")), Amount::zero()); | BOOST_CHECK_EQUAL(x = ValueFromString("0"), Amount::zero()); | ||||
BOOST_CHECK_EQUAL(AmountFromValue(ValueFromString("0.00000000")), | BOOST_CHECK_EQUAL(x = ValueFromString("0.00000000"), Amount::zero()); | ||||
Amount::zero()); | BOOST_CHECK_EQUAL(x = ValueFromString("0.00000001"), SATOSHI); | ||||
BOOST_CHECK_EQUAL(AmountFromValue(ValueFromString("0.00000001")), SATOSHI); | BOOST_CHECK_EQUAL(x = ValueFromString("0.17622195"), 17622195 * SATOSHI); | ||||
BOOST_CHECK_EQUAL(AmountFromValue(ValueFromString("0.17622195")), | BOOST_CHECK_EQUAL(x = ValueFromString("0.5"), 50000000 * SATOSHI); | ||||
17622195 * SATOSHI); | BOOST_CHECK_EQUAL(x = ValueFromString("0.50000000"), 50000000 * SATOSHI); | ||||
BOOST_CHECK_EQUAL(AmountFromValue(ValueFromString("0.5")), | BOOST_CHECK_EQUAL(x = ValueFromString("0.89898989"), 89898989 * SATOSHI); | ||||
50000000 * SATOSHI); | BOOST_CHECK_EQUAL(x = ValueFromString("1.00000000"), 100000000 * SATOSHI); | ||||
BOOST_CHECK_EQUAL(AmountFromValue(ValueFromString("0.50000000")), | BOOST_CHECK_EQUAL(x = ValueFromString("20999999.9999999"), | ||||
50000000 * SATOSHI); | |||||
BOOST_CHECK_EQUAL(AmountFromValue(ValueFromString("0.89898989")), | |||||
89898989 * SATOSHI); | |||||
BOOST_CHECK_EQUAL(AmountFromValue(ValueFromString("1.00000000")), | |||||
100000000 * SATOSHI); | |||||
BOOST_CHECK_EQUAL(AmountFromValue(ValueFromString("20999999.9999999")), | |||||
int64_t(2099999999999990) * SATOSHI); | int64_t(2099999999999990) * SATOSHI); | ||||
BOOST_CHECK_EQUAL(AmountFromValue(ValueFromString("20999999.99999999")), | BOOST_CHECK_EQUAL(x = ValueFromString("20999999.99999999"), | ||||
int64_t(2099999999999999) * SATOSHI); | int64_t(2099999999999999) * SATOSHI); | ||||
BOOST_CHECK_EQUAL(AmountFromValue(ValueFromString("1e-8")), | BOOST_CHECK_EQUAL(x = ValueFromString("1e-8"), COIN / 100000000); | ||||
COIN / 100000000); | BOOST_CHECK_EQUAL(x = ValueFromString("0.1e-7"), COIN / 100000000); | ||||
BOOST_CHECK_EQUAL(AmountFromValue(ValueFromString("0.1e-7")), | BOOST_CHECK_EQUAL(x = ValueFromString("0.01e-6"), COIN / 100000000); | ||||
COIN / 100000000); | BOOST_CHECK_EQUAL(x = ValueFromString( | ||||
BOOST_CHECK_EQUAL(AmountFromValue(ValueFromString("0.01e-6")), | |||||
COIN / 100000000); | |||||
BOOST_CHECK_EQUAL(AmountFromValue(ValueFromString( | |||||
"0." | "0." | ||||
"0000000000000000000000000000000000000000000000000000" | "0000000000000000000000000000000000000000000000000000" | ||||
"000000000000000000000001e+68")), | "000000000000000000000001e+68"), | ||||
COIN / 100000000); | COIN / 100000000); | ||||
BOOST_CHECK_EQUAL( | BOOST_CHECK_EQUAL( | ||||
AmountFromValue(ValueFromString("10000000000000000000000000000000000000" | x = ValueFromString("10000000000000000000000000000000000000" | ||||
"000000000000000000000000000e-64")), | "000000000000000000000000000e-64"), | ||||
COIN); | COIN); | ||||
BOOST_CHECK_EQUAL( | BOOST_CHECK_EQUAL( | ||||
AmountFromValue(ValueFromString( | x = ValueFromString( | ||||
"0." | "0." | ||||
"000000000000000000000000000000000000000000000000000000000000000100" | "000000000000000000000000000000000000000000000000000000000000000100" | ||||
"000000000000000000000000000000000000000000000000000e64")), | "000000000000000000000000000000000000000000000000000e64"), | ||||
COIN); | COIN); | ||||
// should fail | // should fail | ||||
BOOST_CHECK_THROW(AmountFromValue(ValueFromString("1e-9")), UniValue); | BOOST_CHECK_THROW(x = ValueFromString("1e-9"), UniValue); | ||||
// should fail | // should fail | ||||
BOOST_CHECK_THROW(AmountFromValue(ValueFromString("0.000000019")), | BOOST_CHECK_THROW(x = ValueFromString("0.000000019"), UniValue); | ||||
UniValue); | |||||
// should pass, cut trailing 0 | // should pass, cut trailing 0 | ||||
BOOST_CHECK_EQUAL(AmountFromValue(ValueFromString("0.00000001000000")), | BOOST_CHECK_EQUAL(x = ValueFromString("0.00000001000000"), SATOSHI); | ||||
SATOSHI); | |||||
// should fail | // should fail | ||||
BOOST_CHECK_THROW(AmountFromValue(ValueFromString("19e-9")), UniValue); | BOOST_CHECK_THROW(x = ValueFromString("19e-9"), UniValue); | ||||
// should pass, leading 0 is present | // should pass, leading 0 is present | ||||
BOOST_CHECK_EQUAL(AmountFromValue(ValueFromString("0.19e-6")), | BOOST_CHECK_EQUAL(x = ValueFromString("0.19e-6"), 19 * SATOSHI); | ||||
19 * SATOSHI); | |||||
// overflow error | // overflow error | ||||
BOOST_CHECK_THROW(AmountFromValue(ValueFromString("92233720368.54775808")), | BOOST_CHECK_THROW(x = ValueFromString("92233720368.54775808"), UniValue); | ||||
UniValue); | |||||
// overflow error | // overflow error | ||||
BOOST_CHECK_THROW(AmountFromValue(ValueFromString("1e+11")), UniValue); | BOOST_CHECK_THROW(x = ValueFromString("1e+11"), UniValue); | ||||
// overflow error signless | // overflow error signless | ||||
BOOST_CHECK_THROW(AmountFromValue(ValueFromString("1e11")), UniValue); | BOOST_CHECK_THROW(x = ValueFromString("1e11"), UniValue); | ||||
// overflow error | // overflow error | ||||
BOOST_CHECK_THROW(AmountFromValue(ValueFromString("93e+9")), UniValue); | BOOST_CHECK_THROW(x = ValueFromString("93e+9"), UniValue); | ||||
} | } | ||||
BOOST_AUTO_TEST_CASE(json_parse_errors) { | BOOST_AUTO_TEST_CASE(json_parse_errors) { | ||||
// Valid | // Valid | ||||
BOOST_CHECK_EQUAL(ParseNonRFCJSONValue("1.0").get_real(), 1.0); | BOOST_CHECK_EQUAL(ParseNonRFCJSONValue("1.0").get_real(), 1.0); | ||||
// Valid, with leading or trailing whitespace | // Valid, with leading or trailing whitespace | ||||
BOOST_CHECK_EQUAL(ParseNonRFCJSONValue(" 1.0").get_real(), 1.0); | BOOST_CHECK_EQUAL(ParseNonRFCJSONValue(" 1.0").get_real(), 1.0); | ||||
BOOST_CHECK_EQUAL(ParseNonRFCJSONValue("1.0 ").get_real(), 1.0); | BOOST_CHECK_EQUAL(ParseNonRFCJSONValue("1.0 ").get_real(), 1.0); | ||||
// should fail, missing leading 0, therefore invalid JSON | // should fail, missing leading 0, therefore invalid JSON | ||||
BOOST_CHECK_THROW(AmountFromValue(ParseNonRFCJSONValue(".19e-6")), | Amount x; | ||||
std::runtime_error); | BOOST_CHECK_THROW(x = ParseNonRFCJSONValue(".19e-6"), std::runtime_error); | ||||
BOOST_CHECK_EQUAL(AmountFromValue(ParseNonRFCJSONValue( | BOOST_CHECK_EQUAL(x = ParseNonRFCJSONValue( | ||||
"0.00000000000000000000000000000000000001e+30 ")), | "0.00000000000000000000000000000000000001e+30 "), | ||||
SATOSHI); | SATOSHI); | ||||
// Invalid, initial garbage | // Invalid, initial garbage | ||||
BOOST_CHECK_THROW(ParseNonRFCJSONValue("[1.0"), std::runtime_error); | BOOST_CHECK_THROW(ParseNonRFCJSONValue("[1.0"), std::runtime_error); | ||||
BOOST_CHECK_THROW(ParseNonRFCJSONValue("a1.0"), std::runtime_error); | BOOST_CHECK_THROW(ParseNonRFCJSONValue("a1.0"), std::runtime_error); | ||||
// Invalid, trailing garbage | // Invalid, trailing garbage | ||||
BOOST_CHECK_THROW(ParseNonRFCJSONValue("1.0sds"), std::runtime_error); | BOOST_CHECK_THROW(ParseNonRFCJSONValue("1.0sds"), std::runtime_error); | ||||
BOOST_CHECK_THROW(ParseNonRFCJSONValue("1.0]"), std::runtime_error); | BOOST_CHECK_THROW(ParseNonRFCJSONValue("1.0]"), std::runtime_error); | ||||
// BCH addresses should fail parsing | // BCH addresses should fail parsing | ||||
▲ Show 20 Lines • Show All 141 Lines • Show Last 20 Lines |