basedOpinionated utility library |
git clone git://git.dimitrijedobrota.com/based.git |
Log | Files | Refs | README | LICENSE | HACKING | CONTRIBUTING | CODE_OF_CONDUCT | BUILDING |
find_mismatch_test.cpp (6269B)
0 #include <array> 1 2 #include <catch2/catch_test_macros.hpp> 3 4 #include "based/algorithm.hpp" 5 6 struct equal 7 { 8 auto operator()(int lhs, int rhs) const { return lhs == rhs; } 9 }; 10 11 TEST_CASE("find_mismatch(empty)", "[algorithm/find_mismatch]") 12 { 13 std::array<int, 0> arr0 = {}; 14 std::array<int, 0> arr1 = {}; 15 16 const auto [itr0, itr1] = based::find_mismatch( 17 std::begin(arr0), 18 std::end(arr0), 19 std::begin(arr1), 20 std::end(arr1), 21 equal {} 22 ); 23 24 REQUIRE(itr0 == std::end(arr0)); 25 REQUIRE(itr1 == std::end(arr1)); 26 } 27 28 TEST_CASE("find_mismatch(empty, nonempty)", "[algorithm/find_mismatch]") 29 { 30 std::array<int, 0> arr0 = {}; 31 std::array arr1 = {0, 1, 2, 3, 4}; 32 33 const auto [itr0, itr1] = based::find_mismatch( 34 std::begin(arr0), 35 std::end(arr0), 36 std::begin(arr1), 37 std::end(arr1), 38 equal {} 39 ); 40 41 REQUIRE(itr0 == std::end(arr0)); 42 REQUIRE(itr1 == std::begin(arr1)); 43 } 44 45 TEST_CASE("find_mismatch(nonempty, empty)", "[algorithm/find_mismatch]") 46 { 47 std::array arr0 = {0, 1, 2, 3, 4}; 48 std::array<int, 0> arr1 = {}; 49 50 const auto [itr0, itr1] = based::find_mismatch( 51 std::begin(arr0), 52 std::end(arr0), 53 std::begin(arr1), 54 std::end(arr1), 55 equal {} 56 ); 57 58 REQUIRE(itr0 == std::begin(arr0)); 59 REQUIRE(itr1 == std::end(arr1)); 60 } 61 62 TEST_CASE("find_mismatch(equal)", "[algorithm/find_mismatch]") 63 { 64 std::array arr0 = {0, 1, 2, 3, 4}; 65 std::array arr1 = {0, 1, 2, 3, 4}; 66 67 const auto [itr0, itr1] = based::find_mismatch( 68 std::begin(arr0), 69 std::end(arr0), 70 std::begin(arr1), 71 std::end(arr1), 72 equal {} 73 ); 74 75 REQUIRE(itr0 == std::end(arr0)); 76 REQUIRE(itr1 == std::end(arr1)); 77 } 78 79 TEST_CASE("find_mismatch(equal, longer)", "[algorithm/find_mismatch]") 80 { 81 std::array arr0 = {0, 1, 2}; 82 std::array arr1 = {0, 1, 2, 3, 4}; 83 84 const auto [itr0, itr1] = based::find_mismatch( 85 std::begin(arr0), 86 std::end(arr0), 87 std::begin(arr1), 88 std::end(arr1), 89 equal {} 90 ); 91 92 REQUIRE(itr0 == std::end(arr0)); 93 REQUIRE(itr1 == std::next(std::begin(arr1), std::size(arr0))); 94 } 95 96 TEST_CASE("find_mismatch(longer, equal)", "[algorithm/find_mismatch]") 97 { 98 std::array arr0 = {0, 1, 2, 3, 4}; 99 std::array arr1 = {0, 1, 2}; 100 101 const auto [itr0, itr1] = based::find_mismatch( 102 std::begin(arr0), 103 std::end(arr0), 104 std::begin(arr1), 105 std::end(arr1), 106 equal {} 107 ); 108 109 REQUIRE(itr0 == std::next(std::begin(arr0), std::size(arr1))); 110 REQUIRE(itr1 == std::end(arr1)); 111 } 112 113 TEST_CASE("find_mismatch(mismatch)", "[algorithm/find_mismatch]") 114 { 115 std::array arr0 = {0, 1, 4, 3, 2}; 116 std::array arr1 = {0, 1, 2, 3, 4}; 117 118 const auto [itr0, itr1] = based::find_mismatch( 119 std::begin(arr0), 120 std::end(arr0), 121 std::begin(arr1), 122 std::end(arr1), 123 equal {} 124 ); 125 126 REQUIRE(itr0 == std::next(std::begin(arr0), 2)); 127 REQUIRE(itr1 == std::next(std::begin(arr1), 2)); 128 } 129 130 TEST_CASE("find_adjacent_mismatch(empty)", "[algorithm/find_adjacent_mismatch]") 131 { 132 std::array<int, 0> arr = {}; 133 134 const auto* itr = 135 based::find_adjacent_mismatch(std::begin(arr), std::end(arr), equal {}); 136 137 REQUIRE(itr == std::end(arr)); 138 } 139 140 TEST_CASE("find_adjacent_mismatch(one)", "[algorithm/find_adjacent_mismatch]") 141 { 142 std::array arr = {0}; 143 144 const auto* itr = 145 based::find_adjacent_mismatch(std::begin(arr), std::end(arr), equal {}); 146 147 REQUIRE(itr == std::end(arr)); 148 } 149 150 TEST_CASE( 151 "find_adjacent_mismatch(two equal)", "[algorithm/find_adjacent_mismatch]" 152 ) 153 { 154 std::array arr = {0, 0}; 155 156 const auto* itr = 157 based::find_adjacent_mismatch(std::begin(arr), std::end(arr), equal {}); 158 159 REQUIRE(itr == std::end(arr)); 160 } 161 162 TEST_CASE( 163 "find_adjacent_mismatch(two nonequal)", "[algorithm/find_adjacent_mismatch]" 164 ) 165 { 166 std::array arr = {0, 1}; 167 168 const auto* itr = 169 based::find_adjacent_mismatch(std::begin(arr), std::end(arr), equal {}); 170 171 REQUIRE(itr == std::next(std::begin(arr), 1)); 172 } 173 174 TEST_CASE("find_adjacent_mismatch(equal)", "[algorithm/find_adjacent_mismatch]") 175 { 176 std::array arr = {0, 0, 0, 0, 0, 0}; 177 178 const auto* itr = 179 based::find_adjacent_mismatch(std::begin(arr), std::end(arr), equal {}); 180 181 REQUIRE(itr == std::end(arr)); 182 } 183 184 TEST_CASE( 185 "find_adjacent_mismatch(nonequal)", "[algorithm/find_adjacent_mismatch]" 186 ) 187 { 188 std::array arr = {0, 0, 0, 0, 1, 1, 1, 1}; 189 190 const auto* itr = 191 based::find_adjacent_mismatch(std::begin(arr), std::end(arr), equal {}); 192 193 REQUIRE(itr == std::next(std::begin(arr), 4)); 194 } 195 196 TEST_CASE( 197 "find_adjacent_mismatch_forward(empty)", 198 "[algorithm/find_adjacent_mismatch_forward]" 199 ) 200 { 201 std::array<int, 0> arr = {}; 202 203 const auto* itr = based::find_adjacent_mismatch_forward( 204 std::begin(arr), std::end(arr), equal {} 205 ); 206 207 REQUIRE(itr == std::end(arr)); 208 } 209 210 TEST_CASE( 211 "find_adjacent_mismatch_forward(one)", 212 "[algorithm/find_adjacent_mismatch_forward]" 213 ) 214 { 215 std::array arr = {0}; 216 217 const auto* itr = based::find_adjacent_mismatch_forward( 218 std::begin(arr), std::end(arr), equal {} 219 ); 220 221 REQUIRE(itr == std::end(arr)); 222 } 223 224 TEST_CASE( 225 "find_adjacent_mismatch_forward(two equal)", 226 "[algorithm/find_adjacent_mismatch_forward]" 227 ) 228 { 229 std::array arr = {0, 0}; 230 231 const auto* itr = based::find_adjacent_mismatch_forward( 232 std::begin(arr), std::end(arr), equal {} 233 ); 234 235 REQUIRE(itr == std::end(arr)); 236 } 237 238 TEST_CASE( 239 "find_adjacent_mismatch_forward(two nonequal)", 240 "[algorithm/find_adjacent_mismatch_forward]" 241 ) 242 { 243 std::array arr = {0, 1}; 244 245 const auto* itr = based::find_adjacent_mismatch_forward( 246 std::begin(arr), std::end(arr), equal {} 247 ); 248 249 REQUIRE(itr == std::next(std::begin(arr), 1)); 250 } 251 252 TEST_CASE( 253 "find_adjacent_mismatch_forward(equal)", 254 "[algorithm/find_adjacent_mismatch_forward]" 255 ) 256 { 257 std::array arr = {0, 0, 0, 0, 0, 0}; 258 259 const auto* itr = based::find_adjacent_mismatch_forward( 260 std::begin(arr), std::end(arr), equal {} 261 ); 262 263 REQUIRE(itr == std::end(arr)); 264 } 265 266 TEST_CASE( 267 "find_adjacent_mismatch_forward(nonequal)", 268 "[algorithm/find_adjacent_mismatch_forward]" 269 ) 270 { 271 std::array arr = {0, 0, 0, 0, 1, 1, 1, 1}; 272 273 const auto* itr = based::find_adjacent_mismatch_forward( 274 std::begin(arr), std::end(arr), equal {} 275 ); 276 277 REQUIRE(itr == std::next(std::begin(arr), 4)); 278 }