Skip to content

Commit 0b6881a

Browse files
authored
Add regression test for #3810 (#4608)
* ✅ add regression test for #3810 Signed-off-by: Niels Lohmann <[email protected]> * ✅ add regression test for #3810 Signed-off-by: Niels Lohmann <[email protected]> * ✅ add regression test for #3810 Signed-off-by: Niels Lohmann <[email protected]> * ✅ add regression test for #3810 Signed-off-by: Niels Lohmann <[email protected]> * ✅ add regression test for #3810 Signed-off-by: Niels Lohmann <[email protected]> --------- Signed-off-by: Niels Lohmann <[email protected]>
1 parent a43350c commit 0b6881a

File tree

1 file changed

+33
-0
lines changed

1 file changed

+33
-0
lines changed

tests/src/unit-regression2.cpp

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -377,6 +377,19 @@ inline for_3333::for_3333(const json& j)
377377
: for_3333(j.value("x", 0), j.value("y", 0))
378378
{}
379379

380+
/////////////////////////////////////////////////////////////////////
381+
// for #3810
382+
/////////////////////////////////////////////////////////////////////
383+
384+
struct Example_3810
385+
{
386+
int bla{};
387+
388+
Example_3810() = default;
389+
};
390+
391+
NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(Example_3810, bla);
392+
380393
TEST_CASE("regression tests 2")
381394
{
382395
SECTION("issue #1001 - Fix memory leak during parser callback")
@@ -1004,6 +1017,26 @@ TEST_CASE("regression tests 2")
10041017
CHECK(p.x == 1);
10051018
CHECK(p.y == 2);
10061019
}
1020+
1021+
SECTION("issue #3810 - ordered_json doesn't support construction from C array of custom type")
1022+
{
1023+
Example_3810 states[45]; // NOLINT(cppcoreguidelines-avoid-c-arrays,hicpp-avoid-c-arrays,modernize-avoid-c-arrays)
1024+
1025+
// fix "not used" warning
1026+
states[0].bla = 1;
1027+
1028+
const auto* const expected = R"([{"bla":1},{"bla":0},{"bla":0},{"bla":0},{"bla":0},{"bla":0},{"bla":0},{"bla":0},{"bla":0},{"bla":0},{"bla":0},{"bla":0},{"bla":0},{"bla":0},{"bla":0},{"bla":0},{"bla":0},{"bla":0},{"bla":0},{"bla":0},{"bla":0},{"bla":0},{"bla":0},{"bla":0},{"bla":0},{"bla":0},{"bla":0},{"bla":0},{"bla":0},{"bla":0},{"bla":0},{"bla":0},{"bla":0},{"bla":0},{"bla":0},{"bla":0},{"bla":0},{"bla":0},{"bla":0},{"bla":0},{"bla":0},{"bla":0},{"bla":0},{"bla":0},{"bla":0}])";
1029+
1030+
// This works:
1031+
nlohmann::json j;
1032+
j["test"] = states;
1033+
CHECK(j["test"].dump() == expected);
1034+
1035+
// This doesn't compile:
1036+
nlohmann::ordered_json oj;
1037+
oj["test"] = states;
1038+
CHECK(oj["test"].dump() == expected);
1039+
}
10071040
}
10081041

10091042
DOCTEST_CLANG_SUPPRESS_WARNING_POP

0 commit comments

Comments
 (0)