#include #include "matador/utils/result.hpp" namespace matador::test { enum class math_error : int32_t { DIVISION_BY_ZERO = 1 }; utils::resultdivide(int x, int y) { if (y == 0) { return utils::error(math_error::DIVISION_BY_ZERO); } return utils::ok(float(x) / y); } utils::resultmultiply(int x, int y) { return utils::ok(float(x) * y); } } using namespace matador; TEST_CASE("Result tests", "[result]") { auto res = test::divide(4, 2); REQUIRE(res); REQUIRE(res.is_ok()); REQUIRE(!res.is_error()); REQUIRE((res.value() == 2.0)); REQUIRE_THROWS(res.err()); res = test::divide(4, 0); REQUIRE(!res); REQUIRE(!res.is_ok()); REQUIRE(res.is_error()); REQUIRE((res.err() == test::math_error::DIVISION_BY_ZERO)); // res = test::divide(4, 2) // .and_then<>() }