summaryrefslogtreecommitdiff
path: root/json4cpp/tests/src/unit-ordered_json.cpp
diff options
context:
space:
mode:
authorMehmet Samet Duman <yongdohyun@projecttick.org>2026-04-02 18:42:50 +0300
committerMehmet Samet Duman <yongdohyun@projecttick.org>2026-04-02 18:42:50 +0300
commit5fad10f89c485cfdc7b99011f07609f8871160d4 (patch)
tree1860b39753b652dfe54d3cbbc80c875f40198d1f /json4cpp/tests/src/unit-ordered_json.cpp
parent292baed7ac0cf84263263966ed32ed113cae857f (diff)
parent9a737481aed085fd289f82dff1fa8c3c66627a7e (diff)
downloadProject-Tick-5fad10f89c485cfdc7b99011f07609f8871160d4.tar.gz
Project-Tick-5fad10f89c485cfdc7b99011f07609f8871160d4.zip
Add 'json4cpp/' from commit '9a737481aed085fd289f82dff1fa8c3c66627a7e'
git-subtree-dir: json4cpp git-subtree-mainline: 292baed7ac0cf84263263966ed32ed113cae857f git-subtree-split: 9a737481aed085fd289f82dff1fa8c3c66627a7e
Diffstat (limited to 'json4cpp/tests/src/unit-ordered_json.cpp')
-rw-r--r--json4cpp/tests/src/unit-ordered_json.cpp71
1 files changed, 71 insertions, 0 deletions
diff --git a/json4cpp/tests/src/unit-ordered_json.cpp b/json4cpp/tests/src/unit-ordered_json.cpp
new file mode 100644
index 0000000000..10bb037bc8
--- /dev/null
+++ b/json4cpp/tests/src/unit-ordered_json.cpp
@@ -0,0 +1,71 @@
+// __ _____ _____ _____
+// __| | __| | | | JSON for Modern C++ (supporting code)
+// | | |__ | | | | | | version 3.12.0
+// |_____|_____|_____|_|___| https://github.com/nlohmann/json
+//
+// SPDX-FileCopyrightText: 2013-2026 Niels Lohmann <https://nlohmann.me>
+// SPDX-License-Identifier: MIT
+
+#include "doctest_compatibility.h"
+
+#include <nlohmann/json.hpp>
+using nlohmann::json;
+using nlohmann::ordered_json;
+
+TEST_CASE("ordered_json")
+{
+ json j;
+ ordered_json oj;
+
+ j["element3"] = 3;
+ j["element1"] = 1;
+ j["element2"] = 2;
+
+ oj["element3"] = 3;
+ oj["element1"] = 1;
+ oj["element2"] = 2;
+
+ CHECK(j.dump() == "{\"element1\":1,\"element2\":2,\"element3\":3}");
+ CHECK(oj.dump() == "{\"element3\":3,\"element1\":1,\"element2\":2}");
+
+ CHECK(j == json(oj));
+ CHECK(ordered_json(json(oj)) == ordered_json(j));
+
+ j.erase("element1");
+ oj.erase("element1");
+
+ CHECK(j.dump() == "{\"element2\":2,\"element3\":3}");
+ CHECK(oj.dump() == "{\"element3\":3,\"element2\":2}");
+
+ // remove again and nothing changes
+ j.erase("element1");
+ oj.erase("element1");
+
+ CHECK(j.dump() == "{\"element2\":2,\"element3\":3}");
+ CHECK(oj.dump() == "{\"element3\":3,\"element2\":2}");
+
+ // There are no dup keys cause constructor calls emplace...
+ json const multi {{"z", 1}, {"m", 2}, {"m", 3}, {"y", 4}, {"m", 5}};
+ CHECK(multi.size() == 3);
+ CHECK(multi.dump() == "{\"m\":2,\"y\":4,\"z\":1}");
+
+ ordered_json multi_ordered {{"z", 1}, {"m", 2}, {"m", 3}, {"y", 4}, {"m", 5}};
+ CHECK(multi_ordered.size() == 3);
+ CHECK(multi_ordered.dump() == "{\"z\":1,\"m\":2,\"y\":4}");
+ CHECK(multi_ordered.erase("m") == 1);
+ CHECK(multi_ordered.dump() == "{\"z\":1,\"y\":4}");
+
+ // Ranged insert test.
+ // It seems that values shouldn't be overwritten. Only new values are added
+ json j1 {{"c", 1}, {"b", 2}, {"a", 3}};
+ const json j2 {{"c", 77}, {"d", 42}, {"a", 4}};
+ j1.insert( j2.cbegin(), j2.cend() );
+ CHECK(j1.size() == 4);
+ CHECK(j1.dump() == "{\"a\":3,\"b\":2,\"c\":1,\"d\":42}");
+
+ ordered_json oj1 {{"c", 1}, {"b", 2}, {"a", 3}};
+ const ordered_json oj2 {{"c", 77}, {"d", 42}, {"a", 4}};
+ oj1.insert( oj2.cbegin(), oj2.cend() );
+ CHECK(oj1.size() == 4);
+ CHECK(oj1.dump() == "{\"c\":1,\"b\":2,\"a\":3,\"d\":42}");
+}