diff options
author | Erik Åldstedt Sund <erik.sund@conoptica.com> | 2017-10-23 22:59:08 +0200 |
---|---|---|
committer | Erik Åldstedt Sund <erik.sund@conoptica.com> | 2017-10-30 20:47:48 +0100 |
commit | ecbbd0ebf2204bae8ca968007c7408b6e2ae2a75 (patch) | |
tree | 014c6262dbed0b5f8794497c89617c9a850ada44 | |
parent | 4fe7dd171a77747f1b14654acd369381d6eb3f17 (diff) | |
download | crow-ecbbd0ebf2204bae8ca968007c7408b6e2ae2a75.tar.gz crow-ecbbd0ebf2204bae8ca968007c7408b6e2ae2a75.zip |
Fixed ostream operator for big integers
-rw-r--r-- | include/crow/json.h | 12 | ||||
-rw-r--r-- | tests/unittest.cpp | 4 |
2 files changed, 15 insertions, 1 deletions
diff --git a/include/crow/json.h b/include/crow/json.h index bdef117..1f28af5 100644 --- a/include/crow/json.h +++ b/include/crow/json.h @@ -656,7 +656,17 @@ namespace crow case type::Null: os << "null"; break; case type::False: os << "false"; break; case type::True: os << "true"; break; - case type::Number: os << r.d(); break; + case type::Number: + { + switch (r.nt()) + { + case num_type::Floating_point: os << r.d(); break; + case num_type::Signed_integer: os << r.i(); break; + case num_type::Unsigned_integer: os << r.u(); break; + case num_type::Null: throw std::runtime_error("Number with num_type Null"); + } + } + break; case type::String: os << '"' << r.s() << '"'; break; case type::List: { diff --git a/tests/unittest.cpp b/tests/unittest.cpp index d7f1c80..6fe1bbd 100644 --- a/tests/unittest.cpp +++ b/tests/unittest.cpp @@ -533,6 +533,10 @@ TEST(json_read) std::string s3 = R"({"uint64": 18446744073709551615})"; auto z1 = json::load(s3); ASSERT_EQUAL(18446744073709551615ull, z1["uint64"].u()); + + std::ostringstream os; + os << z1["uint64"]; + ASSERT_EQUAL("18446744073709551615", os.str()); } TEST(json_read_real) |