diff options
| author | Lexi Winter <lexi@le-fay.org> | 2025-07-01 17:07:04 +0100 |
|---|---|---|
| committer | Lexi Winter <lexi@le-fay.org> | 2025-07-01 17:07:04 +0100 |
| commit | 2e2d1bd3b6c7776b77c33b94f30ead89367a71e6 (patch) | |
| tree | 54d37ffadf8e677938d9b7a28e4e9b71be1e75c1 /nihil.ucl/tests/map.cc | |
| parent | 36427c0966faa7aecd586b397ed9b845f18172f5 (diff) | |
| download | nihil-2e2d1bd3b6c7776b77c33b94f30ead89367a71e6.tar.gz nihil-2e2d1bd3b6c7776b77c33b94f30ead89367a71e6.tar.bz2 | |
add nihil.std
Diffstat (limited to 'nihil.ucl/tests/map.cc')
| -rw-r--r-- | nihil.ucl/tests/map.cc | 192 |
1 files changed, 0 insertions, 192 deletions
diff --git a/nihil.ucl/tests/map.cc b/nihil.ucl/tests/map.cc deleted file mode 100644 index 7240cb3..0000000 --- a/nihil.ucl/tests/map.cc +++ /dev/null @@ -1,192 +0,0 @@ -/* - * This source code is released into the public domain. - */ - -#include <concepts> - -#include <catch2/catch_test_macros.hpp> -#include <ucl.h> - -import nihil.ucl; - -//NOLINTBEGIN(bugprone-unchecked-optional-access) - -TEST_CASE("ucl: map: invariants", "[ucl]") -{ - using namespace nihil::ucl; - - REQUIRE(map<>::ucl_type == object_type::object); - REQUIRE(static_cast<::ucl_type>(map<>::ucl_type) == UCL_OBJECT); - - static_assert(std::destructible<map<>>); - static_assert(std::default_initializable<map<>>); - static_assert(std::move_constructible<map<>>); - static_assert(std::copy_constructible<map<>>); - static_assert(std::equality_comparable<map<>>); - static_assert(std::totally_ordered<map<>>); - static_assert(std::swappable<map<>>); - - static_assert(std::ranges::range<map<integer>>); - static_assert(std::same_as<std::pair<std::string_view, integer>, - std::ranges::range_value_t<map<integer>>>); -} - -TEST_CASE("ucl: map: default construct", "[ucl]") -{ - auto map = nihil::ucl::map<>(); - REQUIRE(str(map.type()) == "object"); -} - -TEST_CASE("ucl: map: construct from initializer_list", "[ucl]") -{ - using namespace nihil::ucl; - using namespace std::literals; - - auto map = nihil::ucl::map<integer>{ - {"1"sv, integer(1)}, - {"42"sv, integer(42)}, - }; - - REQUIRE(str(map.type()) == "object"); - REQUIRE(map["1"] == 1); - REQUIRE(map["42"] == 42); -} - -TEST_CASE("ucl: map: construct from range", "[ucl]") -{ - using namespace nihil::ucl; - using namespace std::literals; - - auto vec = std::vector<std::pair<std::string_view, integer>>{ - {"1"sv, integer(1)}, - {"42"sv, integer(42)}, - }; - - auto map = nihil::ucl::map<integer>(std::from_range, vec); - - REQUIRE(str(map.type()) == "object"); - REQUIRE(map["1"] == 1); - REQUIRE(map["42"] == 42); -} - -TEST_CASE("ucl: map: construct from iterator pair", "[ucl]") -{ - using namespace nihil::ucl; - using namespace std::literals; - - auto vec = std::vector<std::pair<std::string_view, integer>>{ - {"1"sv, integer(1)}, - {"42"sv, integer(42)}, - }; - - auto map = nihil::ucl::map<integer>(std::ranges::begin(vec), - std::ranges::end(vec)); - - REQUIRE(str(map.type()) == "object"); - REQUIRE(map["1"] == 1); - REQUIRE(map["42"] == 42); -} - -TEST_CASE("ucl: map: insert", "[ucl]") -{ - using namespace nihil::ucl; - using namespace std::literals; - - auto m = map<integer>(); - - m.insert({"test1"sv, integer(42)}); - m.insert({"test2"sv, integer(666)}); - - REQUIRE(m["test1"] == 42); - REQUIRE(m["test2"] == 666); -} - -TEST_CASE("ucl: map: find", "[ucl]") -{ - using namespace nihil::ucl; - using namespace std::literals; - - auto map = nihil::ucl::map<integer>{ - {"1"sv, integer(1)}, - {"42"sv, integer(42)}, - }; - - auto obj = map.find("42"); - REQUIRE(obj.value() == 42); - - obj = map.find("43"); - REQUIRE(!obj.has_value()); -} - -TEST_CASE("ucl: map: iterate", "[ucl]") -{ - using namespace nihil::ucl; - using namespace std::literals; - - auto map = nihil::ucl::map<integer>{ - {"1"sv, integer(1)}, - {"42"sv, integer(42)}, - }; - - auto i = 0u; - - for (auto [key, value] : map) { - if (key == "1") - REQUIRE(value == 1); - else if (key == "42") - REQUIRE(value == 42); - else - REQUIRE(false); - ++i; - } - - REQUIRE(i == 2); -} - -TEST_CASE("ucl: map: operator[] throws key_not_found", "[ucl]") -{ - auto map = nihil::ucl::map<nihil::ucl::integer>(); - REQUIRE_THROWS_AS(map["nonesuch"], nihil::ucl::key_not_found); -} - -TEST_CASE("ucl: map: remove", "[uc]") -{ - using namespace std::literals; - using namespace nihil::ucl; - - auto map = nihil::ucl::map<integer>{ - {"1"sv, integer(1)}, - {"42"sv, integer(42)}, - }; - - REQUIRE(map.find("42") != std::nullopt); - REQUIRE(map.remove("42") == true); - REQUIRE(map.find("42") == std::nullopt); - REQUIRE(map["1"] == 1); - - REQUIRE(map.remove("42") == false); -} - -TEST_CASE("ucl: map: pop", "[uc]") -{ - using namespace std::literals; - using namespace nihil::ucl; - - auto map = nihil::ucl::map<integer>{ - {"1"sv, integer(1)}, - {"42"sv, integer(42)}, - }; - - REQUIRE(map.find("42") != std::nullopt); - - auto obj = map.pop("42"); - REQUIRE(obj.value() == 42); - - REQUIRE(!map.find("42")); - REQUIRE(map["1"] == 1); - - obj = map.pop("42"); - REQUIRE(!obj); -} - -//NOLINTEND(bugprone-unchecked-optional-access) |
