| // __ _____ _____ _____ |
| // __| | __| | | | JSON for Modern C++ (supporting code) |
| // | | |__ | | | | | | version 3.11.3 |
| // |_____|_____|_____|_|___| https://github.com/nlohmann/json |
| // |
| // SPDX-FileCopyrightText: 2013-2023 Niels Lohmann <https://nlohmann.me> |
| // SPDX-License-Identifier: MIT |
| |
| #include "doctest_compatibility.h" |
| |
| #include <nlohmann/json.hpp> |
| using json = nlohmann::json; |
| using ordered_json = nlohmann::ordered_json; |
| |
| #include <set> |
| |
| TEST_CASE("hash<nlohmann::json>") |
| { |
| // Collect hashes for different JSON values and make sure that they are distinct |
| // We cannot compare against fixed values, because the implementation of |
| // std::hash may differ between compilers. |
| |
| std::set<std::size_t> hashes; |
| |
| // null |
| hashes.insert(std::hash<json> {}(json(nullptr))); |
| |
| // boolean |
| hashes.insert(std::hash<json> {}(json(true))); |
| hashes.insert(std::hash<json> {}(json(false))); |
| |
| // string |
| hashes.insert(std::hash<json> {}(json(""))); |
| hashes.insert(std::hash<json> {}(json("foo"))); |
| |
| // number |
| hashes.insert(std::hash<json> {}(json(0))); |
| hashes.insert(std::hash<json> {}(json(static_cast<unsigned>(0)))); |
| |
| hashes.insert(std::hash<json> {}(json(-1))); |
| hashes.insert(std::hash<json> {}(json(0.0))); |
| hashes.insert(std::hash<json> {}(json(42.23))); |
| |
| // array |
| hashes.insert(std::hash<json> {}(json::array())); |
| hashes.insert(std::hash<json> {}(json::array({1, 2, 3}))); |
| |
| // object |
| hashes.insert(std::hash<json> {}(json::object())); |
| hashes.insert(std::hash<json> {}(json::object({{"foo", "bar"}}))); |
| |
| // binary |
| hashes.insert(std::hash<json> {}(json::binary({}))); |
| hashes.insert(std::hash<json> {}(json::binary({}, 0))); |
| hashes.insert(std::hash<json> {}(json::binary({}, 42))); |
| hashes.insert(std::hash<json> {}(json::binary({1, 2, 3}))); |
| hashes.insert(std::hash<json> {}(json::binary({1, 2, 3}, 0))); |
| hashes.insert(std::hash<json> {}(json::binary({1, 2, 3}, 42))); |
| |
| // discarded |
| hashes.insert(std::hash<json> {}(json(json::value_t::discarded))); |
| |
| CHECK(hashes.size() == 21); |
| } |
| |
| TEST_CASE("hash<nlohmann::ordered_json>") |
| { |
| // Collect hashes for different JSON values and make sure that they are distinct |
| // We cannot compare against fixed values, because the implementation of |
| // std::hash may differ between compilers. |
| |
| std::set<std::size_t> hashes; |
| |
| // null |
| hashes.insert(std::hash<ordered_json> {}(ordered_json(nullptr))); |
| |
| // boolean |
| hashes.insert(std::hash<ordered_json> {}(ordered_json(true))); |
| hashes.insert(std::hash<ordered_json> {}(ordered_json(false))); |
| |
| // string |
| hashes.insert(std::hash<ordered_json> {}(ordered_json(""))); |
| hashes.insert(std::hash<ordered_json> {}(ordered_json("foo"))); |
| |
| // number |
| hashes.insert(std::hash<ordered_json> {}(ordered_json(0))); |
| hashes.insert(std::hash<ordered_json> {}(ordered_json(static_cast<unsigned>(0)))); |
| |
| hashes.insert(std::hash<ordered_json> {}(ordered_json(-1))); |
| hashes.insert(std::hash<ordered_json> {}(ordered_json(0.0))); |
| hashes.insert(std::hash<ordered_json> {}(ordered_json(42.23))); |
| |
| // array |
| hashes.insert(std::hash<ordered_json> {}(ordered_json::array())); |
| hashes.insert(std::hash<ordered_json> {}(ordered_json::array({1, 2, 3}))); |
| |
| // object |
| hashes.insert(std::hash<ordered_json> {}(ordered_json::object())); |
| hashes.insert(std::hash<ordered_json> {}(ordered_json::object({{"foo", "bar"}}))); |
| |
| // binary |
| hashes.insert(std::hash<ordered_json> {}(ordered_json::binary({}))); |
| hashes.insert(std::hash<ordered_json> {}(ordered_json::binary({}, 0))); |
| hashes.insert(std::hash<ordered_json> {}(ordered_json::binary({}, 42))); |
| hashes.insert(std::hash<ordered_json> {}(ordered_json::binary({1, 2, 3}))); |
| hashes.insert(std::hash<ordered_json> {}(ordered_json::binary({1, 2, 3}, 0))); |
| hashes.insert(std::hash<ordered_json> {}(ordered_json::binary({1, 2, 3}, 42))); |
| |
| // discarded |
| hashes.insert(std::hash<ordered_json> {}(ordered_json(ordered_json::value_t::discarded))); |
| |
| CHECK(hashes.size() == 21); |
| } |