From de75cf89f732ff82ebacb7d04f32de28e4efa123 Mon Sep 17 00:00:00 2001 From: Niels Lohmann <mail@nlohmann.me> Date: Sat, 25 Nov 2017 19:41:02 +0100 Subject: [PATCH] :white_check_mark: improved test coverage --- test/src/unit-constructor1.cpp | 9 ++++++--- test/src/unit-conversions.cpp | 24 ++++++++++++++++++++++++ test/src/unit-regression.cpp | 8 ++++++++ 3 files changed, 38 insertions(+), 3 deletions(-) diff --git a/test/src/unit-constructor1.cpp b/test/src/unit-constructor1.cpp index e45edd44..d8c9482c 100644 --- a/test/src/unit-constructor1.cpp +++ b/test/src/unit-constructor1.cpp @@ -295,9 +295,12 @@ TEST_CASE("constructors") { json j{1}; - CHECK_THROWS((j.get<std::pair<int, int>>())); - CHECK_THROWS((j.get<std::tuple<int, int>>())); - CHECK_THROWS((j.get<std::array<int, 3>>())); + CHECK_THROWS_AS((j.get<std::pair<int, int>>()), json::out_of_range); + CHECK_THROWS_WITH((j.get<std::pair<int, int>>()), "[json.exception.out_of_range.401] array index 1 is out of range"); + CHECK_THROWS_AS((j.get<std::tuple<int, int>>()), json::out_of_range); + CHECK_THROWS_WITH((j.get<std::tuple<int, int>>()), "[json.exception.out_of_range.401] array index 1 is out of range"); + CHECK_THROWS_AS((j.get<std::array<int, 3>>()), json::out_of_range); + CHECK_THROWS_WITH((j.get<std::array<int, 3>>()), "[json.exception.out_of_range.401] array index 1 is out of range"); } SECTION("std::forward_list<json>") diff --git a/test/src/unit-conversions.cpp b/test/src/unit-conversions.cpp index 6a42bfb8..fc37a1c8 100644 --- a/test/src/unit-conversions.cpp +++ b/test/src/unit-conversions.cpp @@ -1009,6 +1009,30 @@ TEST_CASE("value conversion") auto m5 = j5.get<std::forward_list<std::string>>(); } + SECTION("std::array") + { + auto m1 = j1.get<std::array<int, 4>>(); + auto m2 = j2.get<std::array<unsigned int, 3>>(); + auto m3 = j3.get<std::array<double, 4>>(); + auto m4 = j4.get<std::array<bool, 3>>(); + auto m5 = j5.get<std::array<std::string, 3>>(); + + SECTION("std::array is larger than JSON") + { + std::array<int, 6> arr6 = {1, 2, 3, 4, 5, 6}; + CHECK_THROWS_AS(arr6 = j1, json::out_of_range); + CHECK_THROWS_WITH(arr6 = j1, "[json.exception.out_of_range.401] array index 4 is out of range"); + } + + SECTION("std::array is smaller than JSON") + { + std::array<int, 2> arr2 = {8, 9}; + arr2 = j1; + CHECK(arr2[0] == 1); + CHECK(arr2[1] == 2); + } + } + SECTION("std::valarray") { auto m1 = j1.get<std::valarray<int>>(); diff --git a/test/src/unit-regression.cpp b/test/src/unit-regression.cpp index 3b9f6b4a..b6f314c7 100644 --- a/test/src/unit-regression.cpp +++ b/test/src/unit-regression.cpp @@ -1305,4 +1305,12 @@ TEST_CASE("regression tests") j = {{"nocopy", n}}; CHECK(j["nocopy"]["val"] == 0); } + + SECTION("issue #843 - converting to array not working") + { + json j; + std::array<int, 4> ar = {1, 1, 1, 1}; + j = ar; + ar = j; + } }