123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113 |
- // __ _____ _____ _____
- // __| | __| | | | JSON for Modern C++ (supporting code)
- // | | |__ | | | | | | version 3.11.2
- // |_____|_____|_____|_|___| https://github.com/nlohmann/json
- //
- // SPDX-FileCopyrightText: 2013-2022 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);
- }
|