mirror of
https://github.com/XRPLF/rippled.git
synced 2026-08-23 23:30:54 +00:00
Expand tests for numberFromJson
This commit is contained in:
@@ -18,12 +18,15 @@
|
||||
//==============================================================================
|
||||
|
||||
#include <xrpl/beast/unit_test.h>
|
||||
#include <xrpl/beast/unit_test/suite.h>
|
||||
#include <xrpl/json/json_forwards.h>
|
||||
#include <xrpl/protocol/Issue.h>
|
||||
#include <xrpl/protocol/STAmount.h>
|
||||
#include <xrpl/protocol/STNumber.h>
|
||||
|
||||
#include <limits>
|
||||
#include <ostream>
|
||||
#include <stdexcept>
|
||||
|
||||
namespace ripple {
|
||||
|
||||
@@ -80,12 +83,194 @@ struct STNumber_test : public beast::unit_test::suite
|
||||
}
|
||||
|
||||
{
|
||||
BEAST_EXPECT(
|
||||
numberFromJson(sfNumber, Json::Value(42)) ==
|
||||
STNumber(sfNumber, 42));
|
||||
BEAST_EXPECT(
|
||||
numberFromJson(sfNumber, Json::Value(-42)) ==
|
||||
STNumber(sfNumber, -42));
|
||||
|
||||
BEAST_EXPECT(
|
||||
numberFromJson(sfNumber, Json::UInt(42)) ==
|
||||
STNumber(sfNumber, 42));
|
||||
|
||||
BEAST_EXPECT(
|
||||
numberFromJson(sfNumber, "-123") == STNumber(sfNumber, -123));
|
||||
|
||||
BEAST_EXPECT(
|
||||
numberFromJson(sfNumber, "123") == STNumber(sfNumber, 123));
|
||||
BEAST_EXPECT(
|
||||
numberFromJson(sfNumber, "-123") == STNumber(sfNumber, -123));
|
||||
|
||||
BEAST_EXPECT(
|
||||
numberFromJson(sfNumber, "3.14") ==
|
||||
STNumber(sfNumber, Number(314, -2)));
|
||||
BEAST_EXPECT(
|
||||
numberFromJson(sfNumber, "-3.14") ==
|
||||
STNumber(sfNumber, -Number(314, -2)));
|
||||
BEAST_EXPECT(
|
||||
numberFromJson(sfNumber, "3.14e2") == STNumber(sfNumber, 314));
|
||||
BEAST_EXPECT(
|
||||
numberFromJson(sfNumber, "-3.14e2") ==
|
||||
STNumber(sfNumber, -314));
|
||||
|
||||
BEAST_EXPECT(
|
||||
numberFromJson(sfNumber, "1000e-2") == STNumber(sfNumber, 10));
|
||||
BEAST_EXPECT(
|
||||
numberFromJson(sfNumber, "-1000e-2") ==
|
||||
STNumber(sfNumber, -10));
|
||||
|
||||
BEAST_EXPECT(
|
||||
numberFromJson(sfNumber, "0") == STNumber(sfNumber, 0));
|
||||
BEAST_EXPECT(
|
||||
numberFromJson(sfNumber, "0.0") == STNumber(sfNumber, 0));
|
||||
BEAST_EXPECT(
|
||||
numberFromJson(sfNumber, "0.000") == STNumber(sfNumber, 0));
|
||||
BEAST_EXPECT(
|
||||
numberFromJson(sfNumber, "-0") == STNumber(sfNumber, 0));
|
||||
BEAST_EXPECT(
|
||||
numberFromJson(sfNumber, "-0.0") == STNumber(sfNumber, 0));
|
||||
BEAST_EXPECT(
|
||||
numberFromJson(sfNumber, "-0.000") == STNumber(sfNumber, 0));
|
||||
BEAST_EXPECT(
|
||||
numberFromJson(sfNumber, "0e6") == STNumber(sfNumber, 0));
|
||||
BEAST_EXPECT(
|
||||
numberFromJson(sfNumber, "0.0e6") == STNumber(sfNumber, 0));
|
||||
BEAST_EXPECT(
|
||||
numberFromJson(sfNumber, "0.000e6") == STNumber(sfNumber, 0));
|
||||
BEAST_EXPECT(
|
||||
numberFromJson(sfNumber, "-0e6") == STNumber(sfNumber, 0));
|
||||
BEAST_EXPECT(
|
||||
numberFromJson(sfNumber, "-0.0e6") == STNumber(sfNumber, 0));
|
||||
BEAST_EXPECT(
|
||||
numberFromJson(sfNumber, "-0.000e6") == STNumber(sfNumber, 0));
|
||||
|
||||
// Obvious non-numbers tested here
|
||||
try
|
||||
{
|
||||
auto _ = numberFromJson(sfNumber, "");
|
||||
BEAST_EXPECT(false);
|
||||
}
|
||||
catch (std::runtime_error const& e)
|
||||
{
|
||||
std::string const expected = "'' is not a number";
|
||||
BEAST_EXPECT(e.what() == expected);
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
auto _ = numberFromJson(sfNumber, "e");
|
||||
BEAST_EXPECT(false);
|
||||
}
|
||||
catch (std::runtime_error const& e)
|
||||
{
|
||||
std::string const expected = "'e' is not a number";
|
||||
BEAST_EXPECT(e.what() == expected);
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
auto _ = numberFromJson(sfNumber, "1e");
|
||||
BEAST_EXPECT(false);
|
||||
}
|
||||
catch (std::runtime_error const& e)
|
||||
{
|
||||
std::string const expected = "'1e' is not a number";
|
||||
BEAST_EXPECT(e.what() == expected);
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
auto _ = numberFromJson(sfNumber, "e2");
|
||||
BEAST_EXPECT(false);
|
||||
}
|
||||
catch (std::runtime_error const& e)
|
||||
{
|
||||
std::string const expected = "'e2' is not a number";
|
||||
BEAST_EXPECT(e.what() == expected);
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
auto _ = numberFromJson(sfNumber, Json::Value());
|
||||
BEAST_EXPECT(false);
|
||||
}
|
||||
catch (std::runtime_error const& e)
|
||||
{
|
||||
std::string const expected = "not a number";
|
||||
BEAST_EXPECT(e.what() == expected);
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
auto _ = numberFromJson(
|
||||
sfNumber,
|
||||
"1234567890123456789012345678901234567890123456789012345678"
|
||||
"9012345678901234567890123456789012345678901234567890123456"
|
||||
"78901234567890123456789012345678901234567890");
|
||||
BEAST_EXPECT(false);
|
||||
}
|
||||
catch (std::bad_cast const& e)
|
||||
{
|
||||
BEAST_EXPECT(true);
|
||||
}
|
||||
|
||||
// We do not handle leading zeros
|
||||
try
|
||||
{
|
||||
auto _ = numberFromJson(sfNumber, "001");
|
||||
BEAST_EXPECT(false);
|
||||
}
|
||||
catch (std::runtime_error const& e)
|
||||
{
|
||||
std::string const expected = "'001' is not a number";
|
||||
BEAST_EXPECT(e.what() == expected);
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
auto _ = numberFromJson(sfNumber, "000.0");
|
||||
BEAST_EXPECT(false);
|
||||
}
|
||||
catch (std::runtime_error const& e)
|
||||
{
|
||||
std::string const expected = "'000.0' is not a number";
|
||||
BEAST_EXPECT(e.what() == expected);
|
||||
}
|
||||
|
||||
// We do not handle dangling dot
|
||||
try
|
||||
{
|
||||
auto _ = numberFromJson(sfNumber, ".1");
|
||||
BEAST_EXPECT(false);
|
||||
}
|
||||
catch (std::runtime_error const& e)
|
||||
{
|
||||
std::string const expected = "'.1' is not a number";
|
||||
BEAST_EXPECT(e.what() == expected);
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
auto _ = numberFromJson(sfNumber, "1.");
|
||||
BEAST_EXPECT(false);
|
||||
}
|
||||
catch (std::runtime_error const& e)
|
||||
{
|
||||
std::string const expected = "'1.' is not a number";
|
||||
BEAST_EXPECT(e.what() == expected);
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
auto _ = numberFromJson(sfNumber, "1.e3");
|
||||
BEAST_EXPECT(false);
|
||||
}
|
||||
catch (std::runtime_error const& e)
|
||||
{
|
||||
std::string const expected = "'1.e3' is not a number";
|
||||
BEAST_EXPECT(e.what() == expected);
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user