From 3a13214ff14f2e0de7470189ffc8c73fe5d0d364 Mon Sep 17 00:00:00 2001 From: Sy Brand Date: Wed, 15 Feb 2023 16:34:53 +0000 Subject: [PATCH] Test transform and transform_error --- tests/extensions.cpp | 245 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 245 insertions(+) diff --git a/tests/extensions.cpp b/tests/extensions.cpp index 1dfa63b..14c180f 100644 --- a/tests/extensions.cpp +++ b/tests/extensions.cpp @@ -558,6 +558,251 @@ TEST_CASE("or_else", "[extensions.or_else]") { } } + +TEST_CASE("Transform extensions", "[extensions.tronsfarm]") { + auto mul2 = [](int a) { return a * 2; }; + auto ret_void = [](int a) { (void)a; }; + + { + tl::expected e = 21; + auto ret = e.transform(mul2); + REQUIRE(ret); + REQUIRE(*ret == 42); + } + + { + const tl::expected e = 21; + auto ret = e.transform(mul2); + REQUIRE(ret); + REQUIRE(*ret == 42); + } + + { + tl::expected e = 21; + auto ret = std::move(e).transform(mul2); + REQUIRE(ret); + REQUIRE(*ret == 42); + } + + { + const tl::expected e = 21; + auto ret = std::move(e).transform(mul2); + REQUIRE(ret); + REQUIRE(*ret == 42); + } + + { + tl::expected e(tl::unexpect, 21); + auto ret = e.transform(mul2); + REQUIRE(!ret); + REQUIRE(ret.error() == 21); + } + + { + const tl::expected e(tl::unexpect, 21); + auto ret = e.transform(mul2); + REQUIRE(!ret); + REQUIRE(ret.error() == 21); + } + + { + tl::expected e(tl::unexpect, 21); + auto ret = std::move(e).transform(mul2); + REQUIRE(!ret); + REQUIRE(ret.error() == 21); + } + + { + const tl::expected e(tl::unexpect, 21); + auto ret = std::move(e).transform(mul2); + REQUIRE(!ret); + REQUIRE(ret.error() == 21); + } + + { + tl::expected e = 21; + auto ret = e.transform(ret_void); + REQUIRE(ret); + STATIC_REQUIRE( + (std::is_same>::value)); + } + + { + const tl::expected e = 21; + auto ret = e.transform(ret_void); + REQUIRE(ret); + STATIC_REQUIRE( + (std::is_same>::value)); + } + + { + tl::expected e = 21; + auto ret = std::move(e).transform(ret_void); + REQUIRE(ret); + STATIC_REQUIRE( + (std::is_same>::value)); + } + + { + const tl::expected e = 21; + auto ret = std::move(e).transform(ret_void); + REQUIRE(ret); + STATIC_REQUIRE( + (std::is_same>::value)); + } + + { + tl::expected e(tl::unexpect, 21); + auto ret = e.transform(ret_void); + REQUIRE(!ret); + STATIC_REQUIRE( + (std::is_same>::value)); + } + + { + const tl::expected e(tl::unexpect, 21); + auto ret = e.transform(ret_void); + REQUIRE(!ret); + STATIC_REQUIRE( + (std::is_same>::value)); + } + + { + tl::expected e(tl::unexpect, 21); + auto ret = std::move(e).transform(ret_void); + REQUIRE(!ret); + STATIC_REQUIRE( + (std::is_same>::value)); + } + + { + const tl::expected e(tl::unexpect, 21); + auto ret = std::move(e).transform(ret_void); + REQUIRE(!ret); + STATIC_REQUIRE( + (std::is_same>::value)); + } + + + // mapping functions which return references + { + tl::expected e(42); + auto ret = e.transform([](int& i) -> int& { return i; }); + REQUIRE(ret); + REQUIRE(ret == 42); + } +} + +TEST_CASE("Transform error extensions", "[extensions.transform_error]") { + auto mul2 = [](int a) { return a * 2; }; + auto ret_void = [](int a) { (void)a; }; + + { + tl::expected e = 21; + auto ret = e.transform_error(mul2); + REQUIRE(ret); + REQUIRE(*ret == 21); + } + + { + const tl::expected e = 21; + auto ret = e.transform_error(mul2); + REQUIRE(ret); + REQUIRE(*ret == 21); + } + + { + tl::expected e = 21; + auto ret = std::move(e).transform_error(mul2); + REQUIRE(ret); + REQUIRE(*ret == 21); + } + + { + const tl::expected e = 21; + auto ret = std::move(e).transform_error(mul2); + REQUIRE(ret); + REQUIRE(*ret == 21); + } + + { + tl::expected e(tl::unexpect, 21); + auto ret = e.transform_error(mul2); + REQUIRE(!ret); + REQUIRE(ret.error() == 42); + } + + { + const tl::expected e(tl::unexpect, 21); + auto ret = e.transform_error(mul2); + REQUIRE(!ret); + REQUIRE(ret.error() == 42); + } + + { + tl::expected e(tl::unexpect, 21); + auto ret = std::move(e).transform_error(mul2); + REQUIRE(!ret); + REQUIRE(ret.error() == 42); + } + + { + const tl::expected e(tl::unexpect, 21); + auto ret = std::move(e).transform_error(mul2); + REQUIRE(!ret); + REQUIRE(ret.error() == 42); + } + + { + tl::expected e = 21; + auto ret = e.transform_error(ret_void); + REQUIRE(ret); + } + + { + const tl::expected e = 21; + auto ret = e.transform_error(ret_void); + REQUIRE(ret); + } + + { + tl::expected e = 21; + auto ret = std::move(e).transform_error(ret_void); + REQUIRE(ret); + } + + { + const tl::expected e = 21; + auto ret = std::move(e).transform_error(ret_void); + REQUIRE(ret); + } + + { + tl::expected e(tl::unexpect, 21); + auto ret = e.transform_error(ret_void); + REQUIRE(!ret); + } + + { + const tl::expected e(tl::unexpect, 21); + auto ret = e.transform_error(ret_void); + REQUIRE(!ret); + } + + { + tl::expected e(tl::unexpect, 21); + auto ret = std::move(e).transform_error(ret_void); + REQUIRE(!ret); + } + + { + const tl::expected e(tl::unexpect, 21); + auto ret = std::move(e).transform_error(ret_void); + REQUIRE(!ret); + } + +} + struct S { int x; };