Brian Silverman | da86135 | 2019-02-02 16:42:28 -0800 | [diff] [blame] | 1 | #include "catch.hpp" |
| 2 | #include "optional.hpp" |
| 3 | |
| 4 | TEST_CASE("Relational ops", "[relops]") { |
| 5 | tl::optional<int> o1{4}; |
| 6 | tl::optional<int> o2{42}; |
| 7 | tl::optional<int> o3{}; |
| 8 | |
| 9 | SECTION("self simple") { |
| 10 | REQUIRE(!(o1 == o2)); |
| 11 | REQUIRE(o1 == o1); |
| 12 | REQUIRE(o1 != o2); |
| 13 | REQUIRE(!(o1 != o1)); |
| 14 | REQUIRE(o1 < o2); |
| 15 | REQUIRE(!(o1 < o1)); |
| 16 | REQUIRE(!(o1 > o2)); |
| 17 | REQUIRE(!(o1 > o1)); |
| 18 | REQUIRE(o1 <= o2); |
| 19 | REQUIRE(o1 <= o1); |
| 20 | REQUIRE(!(o1 >= o2)); |
| 21 | REQUIRE(o1 >= o1); |
| 22 | } |
| 23 | |
| 24 | SECTION("nullopt simple") { |
| 25 | REQUIRE(!(o1 == tl::nullopt)); |
| 26 | REQUIRE(!(tl::nullopt == o1)); |
| 27 | REQUIRE(o1 != tl::nullopt); |
| 28 | REQUIRE(tl::nullopt != o1); |
| 29 | REQUIRE(!(o1 < tl::nullopt)); |
| 30 | REQUIRE(tl::nullopt < o1); |
| 31 | REQUIRE(o1 > tl::nullopt); |
| 32 | REQUIRE(!(tl::nullopt > o1)); |
| 33 | REQUIRE(!(o1 <= tl::nullopt)); |
| 34 | REQUIRE(tl::nullopt <= o1); |
| 35 | REQUIRE(o1 >= tl::nullopt); |
| 36 | REQUIRE(!(tl::nullopt >= o1)); |
| 37 | |
| 38 | REQUIRE(o3 == tl::nullopt); |
| 39 | REQUIRE(tl::nullopt == o3); |
| 40 | REQUIRE(!(o3 != tl::nullopt)); |
| 41 | REQUIRE(!(tl::nullopt != o3)); |
| 42 | REQUIRE(!(o3 < tl::nullopt)); |
| 43 | REQUIRE(!(tl::nullopt < o3)); |
| 44 | REQUIRE(!(o3 > tl::nullopt)); |
| 45 | REQUIRE(!(tl::nullopt > o3)); |
| 46 | REQUIRE(o3 <= tl::nullopt); |
| 47 | REQUIRE(tl::nullopt <= o3); |
| 48 | REQUIRE(o3 >= tl::nullopt); |
| 49 | REQUIRE(tl::nullopt >= o3); |
| 50 | } |
| 51 | |
| 52 | SECTION("with T simple") { |
| 53 | REQUIRE(!(o1 == 1)); |
| 54 | REQUIRE(!(1 == o1)); |
| 55 | REQUIRE(o1 != 1); |
| 56 | REQUIRE(1 != o1); |
| 57 | REQUIRE(!(o1 < 1)); |
| 58 | REQUIRE(1 < o1); |
| 59 | REQUIRE(o1 > 1); |
| 60 | REQUIRE(!(1 > o1)); |
| 61 | REQUIRE(!(o1 <= 1)); |
| 62 | REQUIRE(1 <= o1); |
| 63 | REQUIRE(o1 >= 1); |
| 64 | REQUIRE(!(1 >= o1)); |
| 65 | |
| 66 | REQUIRE(o1 == 4); |
| 67 | REQUIRE(4 == o1); |
| 68 | REQUIRE(!(o1 != 4)); |
| 69 | REQUIRE(!(4 != o1)); |
| 70 | REQUIRE(!(o1 < 4)); |
| 71 | REQUIRE(!(4 < o1)); |
| 72 | REQUIRE(!(o1 > 4)); |
| 73 | REQUIRE(!(4 > o1)); |
| 74 | REQUIRE(o1 <= 4); |
| 75 | REQUIRE(4 <= o1); |
| 76 | REQUIRE(o1 >= 4); |
| 77 | REQUIRE(4 >= o1); |
| 78 | } |
| 79 | |
| 80 | tl::optional<std::string> o4{"hello"}; |
| 81 | tl::optional<std::string> o5{"xyz"}; |
| 82 | |
| 83 | SECTION("self complex") { |
| 84 | REQUIRE(!(o4 == o5)); |
| 85 | REQUIRE(o4 == o4); |
| 86 | REQUIRE(o4 != o5); |
| 87 | REQUIRE(!(o4 != o4)); |
| 88 | REQUIRE(o4 < o5); |
| 89 | REQUIRE(!(o4 < o4)); |
| 90 | REQUIRE(!(o4 > o5)); |
| 91 | REQUIRE(!(o4 > o4)); |
| 92 | REQUIRE(o4 <= o5); |
| 93 | REQUIRE(o4 <= o4); |
| 94 | REQUIRE(!(o4 >= o5)); |
| 95 | REQUIRE(o4 >= o4); |
| 96 | } |
| 97 | |
| 98 | SECTION("nullopt complex") { |
| 99 | REQUIRE(!(o4 == tl::nullopt)); |
| 100 | REQUIRE(!(tl::nullopt == o4)); |
| 101 | REQUIRE(o4 != tl::nullopt); |
| 102 | REQUIRE(tl::nullopt != o4); |
| 103 | REQUIRE(!(o4 < tl::nullopt)); |
| 104 | REQUIRE(tl::nullopt < o4); |
| 105 | REQUIRE(o4 > tl::nullopt); |
| 106 | REQUIRE(!(tl::nullopt > o4)); |
| 107 | REQUIRE(!(o4 <= tl::nullopt)); |
| 108 | REQUIRE(tl::nullopt <= o4); |
| 109 | REQUIRE(o4 >= tl::nullopt); |
| 110 | REQUIRE(!(tl::nullopt >= o4)); |
| 111 | |
| 112 | REQUIRE(o3 == tl::nullopt); |
| 113 | REQUIRE(tl::nullopt == o3); |
| 114 | REQUIRE(!(o3 != tl::nullopt)); |
| 115 | REQUIRE(!(tl::nullopt != o3)); |
| 116 | REQUIRE(!(o3 < tl::nullopt)); |
| 117 | REQUIRE(!(tl::nullopt < o3)); |
| 118 | REQUIRE(!(o3 > tl::nullopt)); |
| 119 | REQUIRE(!(tl::nullopt > o3)); |
| 120 | REQUIRE(o3 <= tl::nullopt); |
| 121 | REQUIRE(tl::nullopt <= o3); |
| 122 | REQUIRE(o3 >= tl::nullopt); |
| 123 | REQUIRE(tl::nullopt >= o3); |
| 124 | } |
| 125 | |
| 126 | SECTION("with T complex") { |
| 127 | REQUIRE(!(o4 == "a")); |
| 128 | REQUIRE(!("a" == o4)); |
| 129 | REQUIRE(o4 != "a"); |
| 130 | REQUIRE("a" != o4); |
| 131 | REQUIRE(!(o4 < "a")); |
| 132 | REQUIRE("a" < o4); |
| 133 | REQUIRE(o4 > "a"); |
| 134 | REQUIRE(!("a" > o4)); |
| 135 | REQUIRE(!(o4 <= "a")); |
| 136 | REQUIRE("a" <= o4); |
| 137 | REQUIRE(o4 >= "a"); |
| 138 | REQUIRE(!("a" >= o4)); |
| 139 | |
| 140 | REQUIRE(o4 == "hello"); |
| 141 | REQUIRE("hello" == o4); |
| 142 | REQUIRE(!(o4 != "hello")); |
| 143 | REQUIRE(!("hello" != o4)); |
| 144 | REQUIRE(!(o4 < "hello")); |
| 145 | REQUIRE(!("hello" < o4)); |
| 146 | REQUIRE(!(o4 > "hello")); |
| 147 | REQUIRE(!("hello" > o4)); |
| 148 | REQUIRE(o4 <= "hello"); |
| 149 | REQUIRE("hello" <= o4); |
| 150 | REQUIRE(o4 >= "hello"); |
| 151 | REQUIRE("hello" >= o4); |
| 152 | } |
| 153 | } |