#define DOCTEST_CONFIG_IMPLEMENT_WITH_MAIN #include "doctest.h" #include TEST_CASE("testing constructor") { { auto s = toml::ok(42); toml::result result(s); CHECK(!!result); CHECK(result.is_ok()); CHECK(!result.is_err()); CHECK(result.unwrap() == 42); } { const auto s = toml::ok(42); toml::result result(s); CHECK(!!result); CHECK(result.is_ok()); CHECK(!result.is_err()); CHECK(result.unwrap() == 42); } { toml::result result(toml::ok(42)); CHECK(!!result); CHECK(result.is_ok()); CHECK(!result.is_err()); CHECK(result.unwrap() == 42); } { auto f = toml::err("foobar"); toml::result result(f); CHECK(!result); CHECK(!result.is_ok()); CHECK(result.is_err()); CHECK(result.unwrap_err() == "foobar"); } { const auto f = toml::err("foobar"); toml::result result(f); CHECK(!result); CHECK(!result.is_ok()); CHECK(result.is_err()); CHECK(result.unwrap_err() == "foobar"); } { toml::result result(toml::err("foobar")); CHECK(!result); CHECK(!result.is_ok()); CHECK(result.is_err()); CHECK(result.unwrap_err() == "foobar"); } } TEST_CASE("testing assignment op") { { toml::result result(toml::err("foobar")); result = toml::ok(42); CHECK(!!result); CHECK(result.is_ok()); CHECK(!result.is_err()); CHECK(result.unwrap() == 42); } { toml::result result(toml::err("foobar")); auto s = toml::ok(42); result = s; CHECK(!!result); CHECK(result.is_ok()); CHECK(!result.is_err()); CHECK(result.unwrap() == 42); } { toml::result result(toml::err("foobar")); const auto s = toml::ok(42); result = s; CHECK(!!result); CHECK(result.is_ok()); CHECK(!result.is_err()); CHECK(result.unwrap() == 42); } { toml::result result(toml::err("foobar")); result = toml::err("hoge"); CHECK(!result); CHECK(!result.is_ok()); CHECK(result.is_err()); CHECK(result.unwrap_err() == "hoge"); } { toml::result result(toml::err("foobar")); auto f = toml::err("hoge"); result = f; CHECK(!result); CHECK(!result.is_ok()); CHECK(result.is_err()); CHECK(result.unwrap_err() == "hoge"); } { toml::result result(toml::err("foobar")); const auto f = toml::err("hoge"); result = f; CHECK(!result); CHECK(!result.is_ok()); CHECK(result.is_err()); CHECK(result.unwrap_err() == "hoge"); } } TEST_CASE("testing result") { { int a = 42; toml::result, std::string> result(toml::ok(std::ref(a))); CHECK_UNARY(result); CHECK_UNARY(result.is_ok()); CHECK_UNARY_FALSE(result.is_err()); CHECK_EQ(result.unwrap(), 42); CHECK_EQ(a, 42); result.unwrap() = 6 * 9; CHECK_EQ(result.unwrap(), 6*9); CHECK_EQ(a, 6*9); } { std::string b = "foo"; toml::result> result(toml::err(std::ref(b))); CHECK_UNARY_FALSE(result); CHECK_UNARY_FALSE(result.is_ok()); CHECK_UNARY(result.is_err()); CHECK_EQ(result.unwrap_err(), "foo"); CHECK_EQ(b, "foo"); result.unwrap_err() = "foobar"; CHECK_EQ(result.unwrap_err(), "foobar"); CHECK_EQ(b, "foobar"); } }