// __ _____ _____ _____ // __| | __| | | | JSON for Modern C++ (supporting code) // | | |__ | | | | | | version 3.11.2 // |_____|_____|_____|_|___| https://github.com/nlohmann/json // // SPDX-FileCopyrightText: 2013-2022 Niels Lohmann // SPDX-License-Identifier: MIT #include "doctest_compatibility.h" #include using json = nlohmann::json; using ordered_json = nlohmann::ordered_json; #include TEST_CASE("hash") { // 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 hashes; // null hashes.insert(std::hash {}(json(nullptr))); // boolean hashes.insert(std::hash {}(json(true))); hashes.insert(std::hash {}(json(false))); // string hashes.insert(std::hash {}(json(""))); hashes.insert(std::hash {}(json("foo"))); // number hashes.insert(std::hash {}(json(0))); hashes.insert(std::hash {}(json(static_cast(0)))); hashes.insert(std::hash {}(json(-1))); hashes.insert(std::hash {}(json(0.0))); hashes.insert(std::hash {}(json(42.23))); // array hashes.insert(std::hash {}(json::array())); hashes.insert(std::hash {}(json::array({1, 2, 3}))); // object hashes.insert(std::hash {}(json::object())); hashes.insert(std::hash {}(json::object({{"foo", "bar"}}))); // binary hashes.insert(std::hash {}(json::binary({}))); hashes.insert(std::hash {}(json::binary({}, 0))); hashes.insert(std::hash {}(json::binary({}, 42))); hashes.insert(std::hash {}(json::binary({1, 2, 3}))); hashes.insert(std::hash {}(json::binary({1, 2, 3}, 0))); hashes.insert(std::hash {}(json::binary({1, 2, 3}, 42))); // discarded hashes.insert(std::hash {}(json(json::value_t::discarded))); CHECK(hashes.size() == 21); } TEST_CASE("hash") { // 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 hashes; // null hashes.insert(std::hash {}(ordered_json(nullptr))); // boolean hashes.insert(std::hash {}(ordered_json(true))); hashes.insert(std::hash {}(ordered_json(false))); // string hashes.insert(std::hash {}(ordered_json(""))); hashes.insert(std::hash {}(ordered_json("foo"))); // number hashes.insert(std::hash {}(ordered_json(0))); hashes.insert(std::hash {}(ordered_json(static_cast(0)))); hashes.insert(std::hash {}(ordered_json(-1))); hashes.insert(std::hash {}(ordered_json(0.0))); hashes.insert(std::hash {}(ordered_json(42.23))); // array hashes.insert(std::hash {}(ordered_json::array())); hashes.insert(std::hash {}(ordered_json::array({1, 2, 3}))); // object hashes.insert(std::hash {}(ordered_json::object())); hashes.insert(std::hash {}(ordered_json::object({{"foo", "bar"}}))); // binary hashes.insert(std::hash {}(ordered_json::binary({}))); hashes.insert(std::hash {}(ordered_json::binary({}, 0))); hashes.insert(std::hash {}(ordered_json::binary({}, 42))); hashes.insert(std::hash {}(ordered_json::binary({1, 2, 3}))); hashes.insert(std::hash {}(ordered_json::binary({1, 2, 3}, 0))); hashes.insert(std::hash {}(ordered_json::binary({1, 2, 3}, 42))); // discarded hashes.insert(std::hash {}(ordered_json(ordered_json::value_t::discarded))); CHECK(hashes.size() == 21); }