#include "catch.hpp" #include "optional.hpp" TEST_CASE("Relational ops", "[relops]") { tl::optional o1{4}; tl::optional o2{42}; tl::optional o3{}; SECTION("self simple") { REQUIRE(!(o1 == o2)); REQUIRE(o1 == o1); REQUIRE(o1 != o2); REQUIRE(!(o1 != o1)); REQUIRE(o1 < o2); REQUIRE(!(o1 < o1)); REQUIRE(!(o1 > o2)); REQUIRE(!(o1 > o1)); REQUIRE(o1 <= o2); REQUIRE(o1 <= o1); REQUIRE(!(o1 >= o2)); REQUIRE(o1 >= o1); } SECTION("nullopt simple") { REQUIRE(!(o1 == tl::nullopt)); REQUIRE(!(tl::nullopt == o1)); REQUIRE(o1 != tl::nullopt); REQUIRE(tl::nullopt != o1); REQUIRE(!(o1 < tl::nullopt)); REQUIRE(tl::nullopt < o1); REQUIRE(o1 > tl::nullopt); REQUIRE(!(tl::nullopt > o1)); REQUIRE(!(o1 <= tl::nullopt)); REQUIRE(tl::nullopt <= o1); REQUIRE(o1 >= tl::nullopt); REQUIRE(!(tl::nullopt >= o1)); REQUIRE(o3 == tl::nullopt); REQUIRE(tl::nullopt == o3); REQUIRE(!(o3 != tl::nullopt)); REQUIRE(!(tl::nullopt != o3)); REQUIRE(!(o3 < tl::nullopt)); REQUIRE(!(tl::nullopt < o3)); REQUIRE(!(o3 > tl::nullopt)); REQUIRE(!(tl::nullopt > o3)); REQUIRE(o3 <= tl::nullopt); REQUIRE(tl::nullopt <= o3); REQUIRE(o3 >= tl::nullopt); REQUIRE(tl::nullopt >= o3); } SECTION("with T simple") { REQUIRE(!(o1 == 1)); REQUIRE(!(1 == o1)); REQUIRE(o1 != 1); REQUIRE(1 != o1); REQUIRE(!(o1 < 1)); REQUIRE(1 < o1); REQUIRE(o1 > 1); REQUIRE(!(1 > o1)); REQUIRE(!(o1 <= 1)); REQUIRE(1 <= o1); REQUIRE(o1 >= 1); REQUIRE(!(1 >= o1)); REQUIRE(o1 == 4); REQUIRE(4 == o1); REQUIRE(!(o1 != 4)); REQUIRE(!(4 != o1)); REQUIRE(!(o1 < 4)); REQUIRE(!(4 < o1)); REQUIRE(!(o1 > 4)); REQUIRE(!(4 > o1)); REQUIRE(o1 <= 4); REQUIRE(4 <= o1); REQUIRE(o1 >= 4); REQUIRE(4 >= o1); } tl::optional o4{"hello"}; tl::optional o5{"xyz"}; SECTION("self complex") { REQUIRE(!(o4 == o5)); REQUIRE(o4 == o4); REQUIRE(o4 != o5); REQUIRE(!(o4 != o4)); REQUIRE(o4 < o5); REQUIRE(!(o4 < o4)); REQUIRE(!(o4 > o5)); REQUIRE(!(o4 > o4)); REQUIRE(o4 <= o5); REQUIRE(o4 <= o4); REQUIRE(!(o4 >= o5)); REQUIRE(o4 >= o4); } SECTION("nullopt complex") { REQUIRE(!(o4 == tl::nullopt)); REQUIRE(!(tl::nullopt == o4)); REQUIRE(o4 != tl::nullopt); REQUIRE(tl::nullopt != o4); REQUIRE(!(o4 < tl::nullopt)); REQUIRE(tl::nullopt < o4); REQUIRE(o4 > tl::nullopt); REQUIRE(!(tl::nullopt > o4)); REQUIRE(!(o4 <= tl::nullopt)); REQUIRE(tl::nullopt <= o4); REQUIRE(o4 >= tl::nullopt); REQUIRE(!(tl::nullopt >= o4)); REQUIRE(o3 == tl::nullopt); REQUIRE(tl::nullopt == o3); REQUIRE(!(o3 != tl::nullopt)); REQUIRE(!(tl::nullopt != o3)); REQUIRE(!(o3 < tl::nullopt)); REQUIRE(!(tl::nullopt < o3)); REQUIRE(!(o3 > tl::nullopt)); REQUIRE(!(tl::nullopt > o3)); REQUIRE(o3 <= tl::nullopt); REQUIRE(tl::nullopt <= o3); REQUIRE(o3 >= tl::nullopt); REQUIRE(tl::nullopt >= o3); } SECTION("with T complex") { REQUIRE(!(o4 == "a")); REQUIRE(!("a" == o4)); REQUIRE(o4 != "a"); REQUIRE("a" != o4); REQUIRE(!(o4 < "a")); REQUIRE("a" < o4); REQUIRE(o4 > "a"); REQUIRE(!("a" > o4)); REQUIRE(!(o4 <= "a")); REQUIRE("a" <= o4); REQUIRE(o4 >= "a"); REQUIRE(!("a" >= o4)); REQUIRE(o4 == "hello"); REQUIRE("hello" == o4); REQUIRE(!(o4 != "hello")); REQUIRE(!("hello" != o4)); REQUIRE(!(o4 < "hello")); REQUIRE(!("hello" < o4)); REQUIRE(!(o4 > "hello")); REQUIRE(!("hello" > o4)); REQUIRE(o4 <= "hello"); REQUIRE("hello" <= o4); REQUIRE(o4 >= "hello"); REQUIRE("hello" >= o4); } }