// This file is a part of toml++ and is subject to the the terms of the MIT license. // Copyright (c) 2019-2020 Mark Gillard // See https://github.com/marzer/tomlplusplus/blob/master/LICENSE for the full license text. // SPDX-License-Identifier: MIT #include "tests.h" #if !TOML_EXCEPTIONS TEST_CASE("parse_result - good parse") { auto result = "key = true"_toml; static_assert(std::is_same_v); static_assert(!std::is_same_v); REQUIRE(result.succeeded()); REQUIRE(!result.failed()); REQUIRE(result); REQUIRE(!result.get().empty()); REQUIRE(result.get().size() == 1); REQUIRE(!std::move(result).get().empty()); REQUIRE(!static_cast(result).get().empty()); REQUIRE(!static_cast(result).empty()); REQUIRE(!static_cast(result).empty()); REQUIRE(!static_cast(result).empty()); auto& tbl = static_cast(result); CHECK(tbl[S("key"sv)]); CHECK(result[S("key"sv)]); CHECK(&result[S("key"sv)].ref() == &tbl[S("key"sv)].ref()); CHECK(result.begin() == tbl.begin()); CHECK(result.end() == tbl.end()); CHECK(result.begin() != tbl.end()); CHECK(result.cbegin() == tbl.cbegin()); CHECK(result.cend() == tbl.cend()); CHECK(result.cbegin() != tbl.cend()); auto& cresult = static_cast(result); auto& ctbl = static_cast(cresult); CHECK(cresult.begin() == ctbl.begin()); CHECK(cresult.end() == ctbl.end()); CHECK(cresult.begin() != ctbl.end()); CHECK(cresult.cbegin() == ctbl.cbegin()); CHECK(cresult.cend() == ctbl.cend()); CHECK(cresult.cbegin() != ctbl.cend()); CHECK(ctbl[S("key"sv)]); CHECK(cresult[S("key"sv)]); CHECK(&cresult[S("key"sv)].ref() == &ctbl[S("key"sv)].ref()); size_t tbl_iterations{}; for (auto&& [k, v] : tbl) { (void)k; (void)v; tbl_iterations++; } size_t result_iterations{}; for (auto& [k, v] : result) { (void)k; (void)v; result_iterations++; } size_t cresult_iterations{}; for (auto [k, v] : cresult) { (void)k; (void)v; cresult_iterations++; } CHECK(tbl_iterations == tbl.size()); CHECK(tbl_iterations == result_iterations); CHECK(tbl_iterations == cresult_iterations); } TEST_CASE("parse_result - bad parse") { auto result = "key = trUe"_toml; static_assert(std::is_same_v); static_assert(!std::is_same_v); REQUIRE(!result.succeeded()); REQUIRE(result.failed()); REQUIRE(!result); CHECK(!result[S("key"sv)]); CHECK(result.begin() == decltype(result.begin()){}); CHECK(result.end() == decltype(result.end()){}); CHECK(result.cbegin() == decltype(result.cbegin()){}); CHECK(result.cend() == decltype(result.cend()){}); auto& cresult = static_cast(result); CHECK(!result[S("key"sv)]); CHECK(cresult.begin() == decltype(cresult.begin()){}); CHECK(cresult.end() == decltype(cresult.end()){}); CHECK(cresult.cbegin() == decltype(cresult.cbegin()){}); CHECK(cresult.cend() == decltype(cresult.cend()){}); for (auto [k, v] : result) { (void)k; (void)v; FAIL("This code should not run"); } for (auto [k, v] : cresult) { (void)k; (void)v; FAIL("This code should not run"); } } #endif //!TOML_EXCEPTIONS