1c5f01b2fSopenharmony_ci// __ _____ _____ _____ 2c5f01b2fSopenharmony_ci// __| | __| | | | JSON for Modern C++ (supporting code) 3c5f01b2fSopenharmony_ci// | | |__ | | | | | | version 3.11.2 4c5f01b2fSopenharmony_ci// |_____|_____|_____|_|___| https://github.com/nlohmann/json 5c5f01b2fSopenharmony_ci// 6c5f01b2fSopenharmony_ci// SPDX-FileCopyrightText: 2013-2022 Niels Lohmann <https://nlohmann.me> 7c5f01b2fSopenharmony_ci// SPDX-License-Identifier: MIT 8c5f01b2fSopenharmony_ci 9c5f01b2fSopenharmony_ci#include "doctest_compatibility.h" 10c5f01b2fSopenharmony_ci 11c5f01b2fSopenharmony_ci#include <nlohmann/json.hpp> 12c5f01b2fSopenharmony_ciusing nlohmann::json; 13c5f01b2fSopenharmony_ci 14c5f01b2fSopenharmony_ciTEST_CASE("other constructors and destructor") 15c5f01b2fSopenharmony_ci{ 16c5f01b2fSopenharmony_ci SECTION("copy constructor") 17c5f01b2fSopenharmony_ci { 18c5f01b2fSopenharmony_ci SECTION("object") 19c5f01b2fSopenharmony_ci { 20c5f01b2fSopenharmony_ci json j {{"foo", 1}, {"bar", false}}; 21c5f01b2fSopenharmony_ci json k(j); // NOLINT(performance-unnecessary-copy-initialization) 22c5f01b2fSopenharmony_ci CHECK(j == k); 23c5f01b2fSopenharmony_ci } 24c5f01b2fSopenharmony_ci 25c5f01b2fSopenharmony_ci SECTION("array") 26c5f01b2fSopenharmony_ci { 27c5f01b2fSopenharmony_ci json j {"foo", 1, 42.23, false}; 28c5f01b2fSopenharmony_ci json k(j); // NOLINT(performance-unnecessary-copy-initialization) 29c5f01b2fSopenharmony_ci CHECK(j == k); 30c5f01b2fSopenharmony_ci } 31c5f01b2fSopenharmony_ci 32c5f01b2fSopenharmony_ci SECTION("null") 33c5f01b2fSopenharmony_ci { 34c5f01b2fSopenharmony_ci json j(nullptr); 35c5f01b2fSopenharmony_ci json k(j); // NOLINT(performance-unnecessary-copy-initialization) 36c5f01b2fSopenharmony_ci CHECK(j == k); 37c5f01b2fSopenharmony_ci } 38c5f01b2fSopenharmony_ci 39c5f01b2fSopenharmony_ci SECTION("boolean") 40c5f01b2fSopenharmony_ci { 41c5f01b2fSopenharmony_ci json j(true); 42c5f01b2fSopenharmony_ci json k(j); // NOLINT(performance-unnecessary-copy-initialization) 43c5f01b2fSopenharmony_ci CHECK(j == k); 44c5f01b2fSopenharmony_ci } 45c5f01b2fSopenharmony_ci 46c5f01b2fSopenharmony_ci SECTION("string") 47c5f01b2fSopenharmony_ci { 48c5f01b2fSopenharmony_ci json j("Hello world"); 49c5f01b2fSopenharmony_ci json k(j); // NOLINT(performance-unnecessary-copy-initialization) 50c5f01b2fSopenharmony_ci CHECK(j == k); 51c5f01b2fSopenharmony_ci } 52c5f01b2fSopenharmony_ci 53c5f01b2fSopenharmony_ci SECTION("number (integer)") 54c5f01b2fSopenharmony_ci { 55c5f01b2fSopenharmony_ci json j(42); 56c5f01b2fSopenharmony_ci json k(j); // NOLINT(performance-unnecessary-copy-initialization) 57c5f01b2fSopenharmony_ci CHECK(j == k); 58c5f01b2fSopenharmony_ci } 59c5f01b2fSopenharmony_ci 60c5f01b2fSopenharmony_ci SECTION("number (unsigned)") 61c5f01b2fSopenharmony_ci { 62c5f01b2fSopenharmony_ci json j(42u); 63c5f01b2fSopenharmony_ci json k(j); // NOLINT(performance-unnecessary-copy-initialization) 64c5f01b2fSopenharmony_ci CHECK(j == k); 65c5f01b2fSopenharmony_ci } 66c5f01b2fSopenharmony_ci 67c5f01b2fSopenharmony_ci SECTION("number (floating-point)") 68c5f01b2fSopenharmony_ci { 69c5f01b2fSopenharmony_ci json j(42.23); 70c5f01b2fSopenharmony_ci json k(j); // NOLINT(performance-unnecessary-copy-initialization) 71c5f01b2fSopenharmony_ci CHECK(j == k); 72c5f01b2fSopenharmony_ci } 73c5f01b2fSopenharmony_ci 74c5f01b2fSopenharmony_ci SECTION("binary") 75c5f01b2fSopenharmony_ci { 76c5f01b2fSopenharmony_ci json j = json::binary({1, 2, 3}); 77c5f01b2fSopenharmony_ci json k(j); // NOLINT(performance-unnecessary-copy-initialization) 78c5f01b2fSopenharmony_ci CHECK(j == k); 79c5f01b2fSopenharmony_ci } 80c5f01b2fSopenharmony_ci } 81c5f01b2fSopenharmony_ci 82c5f01b2fSopenharmony_ci SECTION("move constructor") 83c5f01b2fSopenharmony_ci { 84c5f01b2fSopenharmony_ci json j {{"foo", "bar"}, {"baz", {1, 2, 3, 4}}, {"a", 42u}, {"b", 42.23}, {"c", nullptr}}; 85c5f01b2fSopenharmony_ci CHECK(j.type() == json::value_t::object); 86c5f01b2fSopenharmony_ci json k(std::move(j)); 87c5f01b2fSopenharmony_ci CHECK(k.type() == json::value_t::object); 88c5f01b2fSopenharmony_ci CHECK(j.type() == json::value_t::null); // NOLINT: access after move is OK here 89c5f01b2fSopenharmony_ci } 90c5f01b2fSopenharmony_ci 91c5f01b2fSopenharmony_ci SECTION("copy assignment") 92c5f01b2fSopenharmony_ci { 93c5f01b2fSopenharmony_ci SECTION("object") 94c5f01b2fSopenharmony_ci { 95c5f01b2fSopenharmony_ci json j {{"foo", 1}, {"bar", false}}; 96c5f01b2fSopenharmony_ci json k; 97c5f01b2fSopenharmony_ci k = j; 98c5f01b2fSopenharmony_ci CHECK(j == k); 99c5f01b2fSopenharmony_ci } 100c5f01b2fSopenharmony_ci 101c5f01b2fSopenharmony_ci SECTION("array") 102c5f01b2fSopenharmony_ci { 103c5f01b2fSopenharmony_ci json j {"foo", 1, 42.23, false}; 104c5f01b2fSopenharmony_ci json k; 105c5f01b2fSopenharmony_ci k = j; 106c5f01b2fSopenharmony_ci CHECK(j == k); 107c5f01b2fSopenharmony_ci } 108c5f01b2fSopenharmony_ci 109c5f01b2fSopenharmony_ci SECTION("null") 110c5f01b2fSopenharmony_ci { 111c5f01b2fSopenharmony_ci json j(nullptr); 112c5f01b2fSopenharmony_ci json k; 113c5f01b2fSopenharmony_ci k = j; 114c5f01b2fSopenharmony_ci CHECK(j == k); 115c5f01b2fSopenharmony_ci } 116c5f01b2fSopenharmony_ci 117c5f01b2fSopenharmony_ci SECTION("boolean") 118c5f01b2fSopenharmony_ci { 119c5f01b2fSopenharmony_ci json j(true); 120c5f01b2fSopenharmony_ci json k; 121c5f01b2fSopenharmony_ci k = j; 122c5f01b2fSopenharmony_ci CHECK(j == k); 123c5f01b2fSopenharmony_ci } 124c5f01b2fSopenharmony_ci 125c5f01b2fSopenharmony_ci SECTION("string") 126c5f01b2fSopenharmony_ci { 127c5f01b2fSopenharmony_ci json j("Hello world"); 128c5f01b2fSopenharmony_ci json k; 129c5f01b2fSopenharmony_ci k = j; 130c5f01b2fSopenharmony_ci CHECK(j == k); 131c5f01b2fSopenharmony_ci } 132c5f01b2fSopenharmony_ci 133c5f01b2fSopenharmony_ci SECTION("number (integer)") 134c5f01b2fSopenharmony_ci { 135c5f01b2fSopenharmony_ci json j(42); 136c5f01b2fSopenharmony_ci json k; 137c5f01b2fSopenharmony_ci k = j; 138c5f01b2fSopenharmony_ci CHECK(j == k); 139c5f01b2fSopenharmony_ci } 140c5f01b2fSopenharmony_ci 141c5f01b2fSopenharmony_ci SECTION("number (unsigned)") 142c5f01b2fSopenharmony_ci { 143c5f01b2fSopenharmony_ci json j(42u); 144c5f01b2fSopenharmony_ci json k; 145c5f01b2fSopenharmony_ci k = j; 146c5f01b2fSopenharmony_ci CHECK(j == k); 147c5f01b2fSopenharmony_ci } 148c5f01b2fSopenharmony_ci 149c5f01b2fSopenharmony_ci SECTION("number (floating-point)") 150c5f01b2fSopenharmony_ci { 151c5f01b2fSopenharmony_ci json j(42.23); 152c5f01b2fSopenharmony_ci json k; 153c5f01b2fSopenharmony_ci k = j; 154c5f01b2fSopenharmony_ci CHECK(j == k); 155c5f01b2fSopenharmony_ci } 156c5f01b2fSopenharmony_ci 157c5f01b2fSopenharmony_ci SECTION("binary") 158c5f01b2fSopenharmony_ci { 159c5f01b2fSopenharmony_ci json j = json::binary({1, 2, 3}); 160c5f01b2fSopenharmony_ci json k; 161c5f01b2fSopenharmony_ci k = j; 162c5f01b2fSopenharmony_ci CHECK(j == k); 163c5f01b2fSopenharmony_ci } 164c5f01b2fSopenharmony_ci } 165c5f01b2fSopenharmony_ci 166c5f01b2fSopenharmony_ci SECTION("destructor") 167c5f01b2fSopenharmony_ci { 168c5f01b2fSopenharmony_ci SECTION("object") 169c5f01b2fSopenharmony_ci { 170c5f01b2fSopenharmony_ci auto* j = new json {{"foo", 1}, {"bar", false}}; // NOLINT(cppcoreguidelines-owning-memory) 171c5f01b2fSopenharmony_ci delete j; // NOLINT(cppcoreguidelines-owning-memory) 172c5f01b2fSopenharmony_ci } 173c5f01b2fSopenharmony_ci 174c5f01b2fSopenharmony_ci SECTION("array") 175c5f01b2fSopenharmony_ci { 176c5f01b2fSopenharmony_ci auto* j = new json {"foo", 1, 1u, false, 23.42}; // NOLINT(cppcoreguidelines-owning-memory) 177c5f01b2fSopenharmony_ci delete j; // NOLINT(cppcoreguidelines-owning-memory) 178c5f01b2fSopenharmony_ci } 179c5f01b2fSopenharmony_ci 180c5f01b2fSopenharmony_ci SECTION("string") 181c5f01b2fSopenharmony_ci { 182c5f01b2fSopenharmony_ci auto* j = new json("Hello world"); // NOLINT(cppcoreguidelines-owning-memory) 183c5f01b2fSopenharmony_ci delete j; // NOLINT(cppcoreguidelines-owning-memory) 184c5f01b2fSopenharmony_ci } 185c5f01b2fSopenharmony_ci } 186c5f01b2fSopenharmony_ci} 187