Changeset View
Changeset View
Standalone View
Standalone View
src/test/rpc_tests.cpp
Show First 20 Lines • Show All 249 Lines • ▼ Show 20 Lines | BOOST_AUTO_TEST_CASE(rpc_format_monetary_values) { | ||||
BOOST_CHECK(ValueFromAmount(89898989LL).write() == "0.89898989"); | BOOST_CHECK(ValueFromAmount(89898989LL).write() == "0.89898989"); | ||||
BOOST_CHECK(ValueFromAmount(100000000LL).write() == "1.00000000"); | BOOST_CHECK(ValueFromAmount(100000000LL).write() == "1.00000000"); | ||||
BOOST_CHECK(ValueFromAmount(2099999999999990LL).write() == | BOOST_CHECK(ValueFromAmount(2099999999999990LL).write() == | ||||
"20999999.99999990"); | "20999999.99999990"); | ||||
BOOST_CHECK(ValueFromAmount(2099999999999999LL).write() == | BOOST_CHECK(ValueFromAmount(2099999999999999LL).write() == | ||||
"20999999.99999999"); | "20999999.99999999"); | ||||
BOOST_CHECK_EQUAL(ValueFromAmount(0).write(), "0.00000000"); | BOOST_CHECK_EQUAL(ValueFromAmount(0).write(), "0.00000000"); | ||||
BOOST_CHECK_EQUAL(ValueFromAmount((COIN / 10000) * 123456789).write(), | BOOST_CHECK_EQUAL( | ||||
ValueFromAmount((COIN.GetSatoshis() / 10000) * 123456789).write(), | |||||
"12345.67890000"); | "12345.67890000"); | ||||
BOOST_CHECK_EQUAL(ValueFromAmount(-COIN).write(), "-1.00000000"); | BOOST_CHECK_EQUAL(ValueFromAmount(-COIN.GetSatoshis()).write(), | ||||
BOOST_CHECK_EQUAL(ValueFromAmount(-COIN / 10).write(), "-0.10000000"); | "-1.00000000"); | ||||
BOOST_CHECK_EQUAL(ValueFromAmount(-COIN.GetSatoshis() / 10).write(), | |||||
"-0.10000000"); | |||||
BOOST_CHECK_EQUAL(ValueFromAmount(COIN * 100000000).write(), | BOOST_CHECK_EQUAL(ValueFromAmount(COIN.GetSatoshis() * 100000000).write(), | ||||
"100000000.00000000"); | "100000000.00000000"); | ||||
BOOST_CHECK_EQUAL(ValueFromAmount(COIN * 10000000).write(), | BOOST_CHECK_EQUAL(ValueFromAmount(COIN.GetSatoshis() * 10000000).write(), | ||||
"10000000.00000000"); | "10000000.00000000"); | ||||
BOOST_CHECK_EQUAL(ValueFromAmount(COIN * 1000000).write(), | BOOST_CHECK_EQUAL(ValueFromAmount(COIN.GetSatoshis() * 1000000).write(), | ||||
"1000000.00000000"); | "1000000.00000000"); | ||||
BOOST_CHECK_EQUAL(ValueFromAmount(COIN * 100000).write(), | BOOST_CHECK_EQUAL(ValueFromAmount(COIN.GetSatoshis() * 100000).write(), | ||||
"100000.00000000"); | "100000.00000000"); | ||||
BOOST_CHECK_EQUAL(ValueFromAmount(COIN * 10000).write(), "10000.00000000"); | BOOST_CHECK_EQUAL(ValueFromAmount(COIN.GetSatoshis() * 10000).write(), | ||||
BOOST_CHECK_EQUAL(ValueFromAmount(COIN * 1000).write(), "1000.00000000"); | "10000.00000000"); | ||||
BOOST_CHECK_EQUAL(ValueFromAmount(COIN * 100).write(), "100.00000000"); | BOOST_CHECK_EQUAL(ValueFromAmount(COIN.GetSatoshis() * 1000).write(), | ||||
BOOST_CHECK_EQUAL(ValueFromAmount(COIN * 10).write(), "10.00000000"); | "1000.00000000"); | ||||
BOOST_CHECK_EQUAL(ValueFromAmount(COIN).write(), "1.00000000"); | BOOST_CHECK_EQUAL(ValueFromAmount(COIN.GetSatoshis() * 100).write(), | ||||
BOOST_CHECK_EQUAL(ValueFromAmount(COIN / 10).write(), "0.10000000"); | "100.00000000"); | ||||
BOOST_CHECK_EQUAL(ValueFromAmount(COIN / 100).write(), "0.01000000"); | BOOST_CHECK_EQUAL(ValueFromAmount(COIN.GetSatoshis() * 10).write(), | ||||
BOOST_CHECK_EQUAL(ValueFromAmount(COIN / 1000).write(), "0.00100000"); | "10.00000000"); | ||||
BOOST_CHECK_EQUAL(ValueFromAmount(COIN / 10000).write(), "0.00010000"); | BOOST_CHECK_EQUAL(ValueFromAmount(COIN.GetSatoshis()).write(), | ||||
BOOST_CHECK_EQUAL(ValueFromAmount(COIN / 100000).write(), "0.00001000"); | "1.00000000"); | ||||
BOOST_CHECK_EQUAL(ValueFromAmount(COIN / 1000000).write(), "0.00000100"); | BOOST_CHECK_EQUAL(ValueFromAmount(COIN.GetSatoshis() / 10).write(), | ||||
BOOST_CHECK_EQUAL(ValueFromAmount(COIN / 10000000).write(), "0.00000010"); | "0.10000000"); | ||||
BOOST_CHECK_EQUAL(ValueFromAmount(COIN / 100000000).write(), "0.00000001"); | BOOST_CHECK_EQUAL(ValueFromAmount(COIN.GetSatoshis() / 100).write(), | ||||
"0.01000000"); | |||||
BOOST_CHECK_EQUAL(ValueFromAmount(COIN.GetSatoshis() / 1000).write(), | |||||
"0.00100000"); | |||||
BOOST_CHECK_EQUAL(ValueFromAmount(COIN.GetSatoshis() / 10000).write(), | |||||
"0.00010000"); | |||||
BOOST_CHECK_EQUAL(ValueFromAmount(COIN.GetSatoshis() / 100000).write(), | |||||
"0.00001000"); | |||||
BOOST_CHECK_EQUAL(ValueFromAmount(COIN.GetSatoshis() / 1000000).write(), | |||||
"0.00000100"); | |||||
BOOST_CHECK_EQUAL(ValueFromAmount(COIN.GetSatoshis() / 10000000).write(), | |||||
"0.00000010"); | |||||
BOOST_CHECK_EQUAL(ValueFromAmount(COIN.GetSatoshis() / 100000000).write(), | |||||
"0.00000001"); | |||||
} | } | ||||
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; | ||||
} | } | ||||
Show All 13 Lines | BOOST_AUTO_TEST_CASE(rpc_parse_monetary_values) { | ||||
BOOST_CHECK_EQUAL(AmountFromValue(ValueFromString("1.00000000")), | BOOST_CHECK_EQUAL(AmountFromValue(ValueFromString("1.00000000")), | ||||
100000000LL); | 100000000LL); | ||||
BOOST_CHECK_EQUAL(AmountFromValue(ValueFromString("20999999.9999999")), | BOOST_CHECK_EQUAL(AmountFromValue(ValueFromString("20999999.9999999")), | ||||
2099999999999990LL); | 2099999999999990LL); | ||||
BOOST_CHECK_EQUAL(AmountFromValue(ValueFromString("20999999.99999999")), | BOOST_CHECK_EQUAL(AmountFromValue(ValueFromString("20999999.99999999")), | ||||
2099999999999999LL); | 2099999999999999LL); | ||||
BOOST_CHECK_EQUAL(AmountFromValue(ValueFromString("1e-8")), | BOOST_CHECK_EQUAL(AmountFromValue(ValueFromString("1e-8")), | ||||
COIN / 100000000); | COIN.GetSatoshis() / 100000000); | ||||
BOOST_CHECK_EQUAL(AmountFromValue(ValueFromString("0.1e-7")), | BOOST_CHECK_EQUAL(AmountFromValue(ValueFromString("0.1e-7")), | ||||
COIN / 100000000); | COIN.GetSatoshis() / 100000000); | ||||
BOOST_CHECK_EQUAL(AmountFromValue(ValueFromString("0.01e-6")), | BOOST_CHECK_EQUAL(AmountFromValue(ValueFromString("0.01e-6")), | ||||
COIN / 100000000); | COIN.GetSatoshis() / 100000000); | ||||
BOOST_CHECK_EQUAL(AmountFromValue(ValueFromString( | BOOST_CHECK_EQUAL(AmountFromValue(ValueFromString( | ||||
"0." | "0." | ||||
"0000000000000000000000000000000000000000000000000000" | "0000000000000000000000000000000000000000000000000000" | ||||
"000000000000000000000001e+68")), | "000000000000000000000001e+68")), | ||||
COIN / 100000000); | COIN.GetSatoshis() / 100000000); | ||||
BOOST_CHECK_EQUAL( | BOOST_CHECK_EQUAL( | ||||
AmountFromValue(ValueFromString("10000000000000000000000000000000000000" | AmountFromValue(ValueFromString("10000000000000000000000000000000000000" | ||||
"000000000000000000000000000e-64")), | "000000000000000000000000000e-64")), | ||||
COIN); | COIN.GetSatoshis()); | ||||
BOOST_CHECK_EQUAL( | BOOST_CHECK_EQUAL( | ||||
AmountFromValue(ValueFromString( | AmountFromValue(ValueFromString( | ||||
"0." | "0." | ||||
"000000000000000000000000000000000000000000000000000000000000000100" | "000000000000000000000000000000000000000000000000000000000000000100" | ||||
"000000000000000000000000000000000000000000000000000e64")), | "000000000000000000000000000000000000000000000000000e64")), | ||||
COIN); | COIN.GetSatoshis()); | ||||
// should fail | // should fail | ||||
BOOST_CHECK_THROW(AmountFromValue(ValueFromString("1e-9")), UniValue); | BOOST_CHECK_THROW(AmountFromValue(ValueFromString("1e-9")), UniValue); | ||||
// should fail | // should fail | ||||
BOOST_CHECK_THROW(AmountFromValue(ValueFromString("0.000000019")), | BOOST_CHECK_THROW(AmountFromValue(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(AmountFromValue(ValueFromString("0.00000001000000")), | ||||
▲ Show 20 Lines • Show All 177 Lines • Show Last 20 Lines |