2020-07-15 09:27:01 +02:00
|
|
|
/*
|
|
|
|
__ _____ _____ _____
|
|
|
|
__| | __| | | | JSON for Modern C++ (test suite)
|
|
|
|
| | |__ | | | | | | version 3.8.0
|
|
|
|
|_____|_____|_____|_|___| https://github.com/nlohmann/json
|
|
|
|
|
|
|
|
Licensed under the MIT License <http://opensource.org/licenses/MIT>.
|
|
|
|
SPDX-License-Identifier: MIT
|
|
|
|
Copyright (c) 2013-2019 Niels Lohmann <http://nlohmann.me>.
|
|
|
|
|
|
|
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
|
|
of this software and associated documentation files (the "Software"), to deal
|
|
|
|
in the Software without restriction, including without limitation the rights
|
|
|
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
|
|
copies of the Software, and to permit persons to whom the Software is
|
|
|
|
furnished to do so, subject to the following conditions:
|
|
|
|
|
|
|
|
The above copyright notice and this permission notice shall be included in all
|
|
|
|
copies or substantial portions of the Software.
|
|
|
|
|
|
|
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
|
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
|
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
|
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
|
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
|
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
|
|
SOFTWARE.
|
|
|
|
*/
|
|
|
|
|
|
|
|
#include "doctest_compatibility.h"
|
|
|
|
|
|
|
|
#include <nlohmann/json.hpp>
|
|
|
|
using json = nlohmann::json;
|
|
|
|
|
2020-07-15 12:14:30 +02:00
|
|
|
#include <set>
|
|
|
|
|
2020-07-15 09:27:01 +02:00
|
|
|
TEST_CASE("hash")
|
|
|
|
{
|
2020-07-15 12:14:30 +02:00
|
|
|
// 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(int(0))));
|
|
|
|
hashes.insert(std::hash<json> {}(json(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);
|
2020-07-15 09:27:01 +02:00
|
|
|
}
|