based

Opinionated utility library
git clone git://git.dimitrijedobrota.com/based.git
Log | Files | Refs | README | LICENSE | HACKING | CONTRIBUTING | CODE_OF_CONDUCT | BUILDING

find_mismatch_n_test.cpp (9316B)


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 a, int b) const { return a == b; } 9 }; 10 11 TEST_CASE("find_mismatch_n(empty)", "[algorithm/find_mismatch_n]") 12 { 13 std::array<int, 0> arr0 = {}; 14 std::array<int, 0> arr1 = {}; 15 16 const auto [itr0, n0, itr1] = based::find_mismatch_n( 17 std::begin(arr0), 18 std::size(arr0), 19 std::begin(arr1), 20 std::end(arr1), 21 equal {} 22 ); 23 24 REQUIRE(itr0 == std::end(arr0)); 25 REQUIRE(n0 == 0); 26 27 REQUIRE(itr1 == std::end(arr1)); 28 } 29 30 TEST_CASE("find_mismatch_n(empty, nonempty)", "[algorithm/find_mismatch_n]") 31 { 32 std::array<int, 0> arr0 = {}; 33 std::array arr1 = {0, 1, 2, 3, 4}; 34 35 const auto [itr0, n0, itr1] = based::find_mismatch_n( 36 std::begin(arr0), 37 std::size(arr0), 38 std::begin(arr1), 39 std::end(arr1), 40 equal {} 41 ); 42 43 REQUIRE(itr0 == std::end(arr0)); 44 REQUIRE(n0 == 0); 45 46 REQUIRE(itr1 == std::begin(arr1)); 47 } 48 49 TEST_CASE("find_mismatch_n(nonempty, empty)", "[algorithm/find_mismatch_n]") 50 { 51 std::array arr0 = {0, 1, 2, 3, 4}; 52 std::array<int, 0> arr1 = {}; 53 54 const auto [itr0, n0, itr1] = based::find_mismatch_n( 55 std::begin(arr0), 56 std::size(arr0), 57 std::begin(arr1), 58 std::end(arr1), 59 equal {} 60 ); 61 62 REQUIRE(itr0 == std::begin(arr0)); 63 REQUIRE(n0 == std::size(arr0)); 64 65 REQUIRE(itr1 == std::end(arr1)); 66 } 67 68 TEST_CASE("find_mismatch_n(equal)", "[algorithm/find_mismatch_n]") 69 { 70 std::array arr0 = {0, 1, 2, 3, 4}; 71 std::array arr1 = {0, 1, 2, 3, 4}; 72 73 const auto [itr0, n0, itr1] = based::find_mismatch_n( 74 std::begin(arr0), 75 std::size(arr0), 76 std::begin(arr1), 77 std::end(arr1), 78 equal {} 79 ); 80 81 REQUIRE(itr0 == std::end(arr0)); 82 REQUIRE(n0 == 0); 83 84 REQUIRE(itr1 == std::end(arr1)); 85 } 86 87 TEST_CASE("find_mismatch_n(equal, longer)", "[algorithm/find_mismatch_n]") 88 { 89 std::array arr0 = {0, 1, 2}; 90 std::array arr1 = {0, 1, 2, 3, 4}; 91 92 const auto [itr0, n0, itr1] = based::find_mismatch_n( 93 std::begin(arr0), 94 std::size(arr0), 95 std::begin(arr1), 96 std::end(arr1), 97 equal {} 98 ); 99 100 REQUIRE(itr0 == std::end(arr0)); 101 REQUIRE(n0 == 0); 102 103 REQUIRE(itr1 == std::next(std::begin(arr1), std::size(arr0))); 104 } 105 106 TEST_CASE("find_mismatch_n(longer, equal)", "[algorithm/find_mismatch_n]") 107 { 108 std::array arr0 = {0, 1, 2, 3, 4}; 109 std::array arr1 = {0, 1, 2}; 110 111 const auto [itr0, n0, itr1] = based::find_mismatch_n( 112 std::begin(arr0), 113 std::size(arr0), 114 std::begin(arr1), 115 std::end(arr1), 116 equal {} 117 ); 118 119 REQUIRE(itr0 == std::next(std::begin(arr0), std::size(arr1))); 120 REQUIRE(n0 == 2); 121 122 REQUIRE(itr1 == std::end(arr1)); 123 } 124 125 TEST_CASE("find_mismatch_n(mismatch)", "[algorithm/find_mismatch_n]") 126 { 127 std::array arr0 = {0, 1, 4, 3, 2}; 128 std::array arr1 = {0, 1, 2, 3, 4}; 129 130 const auto [itr0, n0, itr1] = based::find_mismatch_n( 131 std::begin(arr0), 132 std::size(arr0), 133 std::begin(arr1), 134 std::end(arr1), 135 equal {} 136 ); 137 138 REQUIRE(itr0 == std::next(std::begin(arr0), 2)); 139 REQUIRE(n0 == 3); 140 141 REQUIRE(itr1 == std::next(std::begin(arr1), 2)); 142 } 143 144 TEST_CASE("find_mismatch_m(empty)", "[algorithm/find_mismatch_m]") 145 { 146 std::array<int, 0> arr0 = {}; 147 std::array<int, 0> arr1 = {}; 148 149 const auto [itr0, itr1, n1] = based::find_mismatch_m( 150 std::begin(arr0), 151 std::end(arr0), 152 std::begin(arr1), 153 std::size(arr1), 154 equal {} 155 ); 156 157 REQUIRE(itr0 == std::end(arr0)); 158 159 REQUIRE(itr1 == std::end(arr1)); 160 REQUIRE(n1 == 0); 161 } 162 163 TEST_CASE("find_mismatch_m(empty, nonempty)", "[algorithm/find_mismatch_m]") 164 { 165 std::array<int, 0> arr0 = {}; 166 std::array arr1 = {0, 1, 2, 3, 4}; 167 168 const auto [itr0, itr1, n1] = based::find_mismatch_m( 169 std::begin(arr0), 170 std::end(arr0), 171 std::begin(arr1), 172 std::size(arr1), 173 equal {} 174 ); 175 176 REQUIRE(itr0 == std::end(arr0)); 177 178 REQUIRE(itr1 == std::begin(arr1)); 179 REQUIRE(n1 == std::size(arr1)); 180 } 181 182 TEST_CASE("find_mismatch_m(nonempty, empty)", "[algorithm/find_mismatch_m]") 183 { 184 std::array arr0 = {0, 1, 2, 3, 4}; 185 std::array<int, 0> arr1 = {}; 186 187 const auto [itr0, itr1, n1] = based::find_mismatch_m( 188 std::begin(arr0), 189 std::end(arr0), 190 std::begin(arr1), 191 std::size(arr1), 192 equal {} 193 ); 194 195 REQUIRE(itr0 == std::begin(arr0)); 196 197 REQUIRE(itr1 == std::end(arr1)); 198 REQUIRE(n1 == 0); 199 } 200 201 TEST_CASE("find_mismatch_m(equal)", "[algorithm/find_mismatch_m]") 202 { 203 std::array arr0 = {0, 1, 2, 3, 4}; 204 std::array arr1 = {0, 1, 2, 3, 4}; 205 206 const auto [itr0, itr1, n1] = based::find_mismatch_m( 207 std::begin(arr0), 208 std::end(arr0), 209 std::begin(arr1), 210 std::size(arr1), 211 equal {} 212 ); 213 214 REQUIRE(itr0 == std::end(arr0)); 215 216 REQUIRE(itr1 == std::end(arr1)); 217 REQUIRE(n1 == 0); 218 } 219 220 TEST_CASE("find_mismatch_m(equal, longer)", "[algorithm/find_mismatch_m]") 221 { 222 std::array arr0 = {0, 1, 2}; 223 std::array arr1 = {0, 1, 2, 3, 4}; 224 225 const auto [itr0, itr1, n1] = based::find_mismatch_m( 226 std::begin(arr0), 227 std::end(arr0), 228 std::begin(arr1), 229 std::size(arr1), 230 equal {} 231 ); 232 233 REQUIRE(itr0 == std::end(arr0)); 234 235 REQUIRE(itr1 == std::next(std::begin(arr1), std::size(arr0))); 236 REQUIRE(n1 == 2); 237 } 238 239 TEST_CASE("find_mismatch_m(longer, equal)", "[algorithm/find_mismatch_m]") 240 { 241 std::array arr0 = {0, 1, 2, 3, 4}; 242 std::array arr1 = {0, 1, 2}; 243 244 const auto [itr0, itr1, n1] = based::find_mismatch_m( 245 std::begin(arr0), 246 std::end(arr0), 247 std::begin(arr1), 248 std::size(arr1), 249 equal {} 250 ); 251 252 REQUIRE(itr0 == std::next(std::begin(arr0), std::size(arr1))); 253 254 REQUIRE(itr1 == std::end(arr1)); 255 REQUIRE(n1 == 0); 256 } 257 258 TEST_CASE("find_mismatch_m(mismatch)", "[algorithm/find_mismatch_m]") 259 { 260 std::array arr0 = {0, 1, 4, 3, 2}; 261 std::array arr1 = {0, 1, 2, 3, 4}; 262 263 const auto [itr0, itr1, n1] = based::find_mismatch_m( 264 std::begin(arr0), 265 std::end(arr0), 266 std::begin(arr1), 267 std::size(arr1), 268 equal {} 269 ); 270 271 REQUIRE(itr0 == std::next(std::begin(arr0), 2)); 272 273 REQUIRE(itr1 == std::next(std::begin(arr1), 2)); 274 REQUIRE(n1 == 3); 275 } 276 277 TEST_CASE("find_mismatch_n_m(empty)", "[algorithm/find_mismatch_n_m]") 278 { 279 std::array<int, 0> arr0 = {}; 280 std::array<int, 0> arr1 = {}; 281 282 const auto [itr0, n0, itr1, n1] = based::find_mismatch_n_m( 283 std::begin(arr0), 284 std::size(arr0), 285 std::begin(arr1), 286 std::size(arr1), 287 equal {} 288 ); 289 290 REQUIRE(itr0 == std::end(arr0)); 291 REQUIRE(n0 == 0); 292 293 REQUIRE(itr1 == std::end(arr1)); 294 REQUIRE(n1 == 0); 295 } 296 297 TEST_CASE("find_mismatch_n_m(empty, nonempty)", "[algorithm/find_mismatch_n_m]") 298 { 299 std::array<int, 0> arr0 = {}; 300 std::array arr1 = {0, 1, 2, 3, 4}; 301 302 const auto [itr0, n0, itr1, n1] = based::find_mismatch_n_m( 303 std::begin(arr0), 304 std::size(arr0), 305 std::begin(arr1), 306 std::size(arr1), 307 equal {} 308 ); 309 310 REQUIRE(itr0 == std::end(arr0)); 311 REQUIRE(n0 == 0); 312 313 REQUIRE(itr1 == std::begin(arr1)); 314 REQUIRE(n1 == std::size(arr1)); 315 } 316 317 TEST_CASE("find_mismatch_n_m(nonempty, empty)", "[algorithm/find_mismatch_n_m]") 318 { 319 std::array arr0 = {0, 1, 2, 3, 4}; 320 std::array<int, 0> arr1 = {}; 321 322 const auto [itr0, n0, itr1, n1] = based::find_mismatch_n_m( 323 std::begin(arr0), 324 std::size(arr0), 325 std::begin(arr1), 326 std::size(arr1), 327 equal {} 328 ); 329 330 REQUIRE(itr0 == std::begin(arr0)); 331 REQUIRE(n0 == std::size(arr0)); 332 333 REQUIRE(itr1 == std::end(arr1)); 334 REQUIRE(n1 == 0); 335 } 336 337 TEST_CASE("find_mismatch_n_m(equal)", "[algorithm/find_mismatch_n_m]") 338 { 339 std::array arr0 = {0, 1, 2, 3, 4}; 340 std::array arr1 = {0, 1, 2, 3, 4}; 341 342 const auto [itr0, n0, itr1, n1] = based::find_mismatch_n_m( 343 std::begin(arr0), 344 std::size(arr0), 345 std::begin(arr1), 346 std::size(arr1), 347 equal {} 348 ); 349 350 REQUIRE(itr0 == std::end(arr0)); 351 REQUIRE(n0 == 0); 352 353 REQUIRE(itr1 == std::end(arr1)); 354 REQUIRE(n1 == 0); 355 } 356 357 TEST_CASE("find_mismatch_n_m(equal, longer)", "[algorithm/find_mismatch_n_m]") 358 { 359 std::array arr0 = {0, 1, 2}; 360 std::array arr1 = {0, 1, 2, 3, 4}; 361 362 const auto [itr0, n0, itr1, n1] = based::find_mismatch_n_m( 363 std::begin(arr0), 364 std::size(arr0), 365 std::begin(arr1), 366 std::size(arr1), 367 equal {} 368 ); 369 370 REQUIRE(itr0 == std::end(arr0)); 371 REQUIRE(n0 == 0); 372 373 REQUIRE(itr1 == std::next(std::begin(arr1), std::size(arr0))); 374 REQUIRE(n1 == 2); 375 } 376 377 TEST_CASE("find_mismatch_n_m(longer, equal)", "[algorithm/find_mismatch_n_m]") 378 { 379 std::array arr0 = {0, 1, 2, 3, 4}; 380 std::array arr1 = {0, 1, 2}; 381 382 const auto [itr0, n0, itr1, n1] = based::find_mismatch_n_m( 383 std::begin(arr0), 384 std::size(arr0), 385 std::begin(arr1), 386 std::size(arr1), 387 equal {} 388 ); 389 390 REQUIRE(itr0 == std::next(std::begin(arr0), std::size(arr1))); 391 REQUIRE(n0 == 2); 392 393 REQUIRE(itr1 == std::end(arr1)); 394 REQUIRE(n1 == 0); 395 } 396 397 TEST_CASE("find_mismatch_n_m(mismatch)", "[algorithm/find_mismatch_n_m]") 398 { 399 std::array arr0 = {0, 1, 4, 3, 2}; 400 std::array arr1 = {0, 1, 2, 3, 4}; 401 402 const auto [itr0, n0, itr1, n1] = based::find_mismatch_n_m( 403 std::begin(arr0), 404 std::size(arr0), 405 std::begin(arr1), 406 std::size(arr1), 407 equal {} 408 ); 409 410 REQUIRE(itr0 == std::next(std::begin(arr0), 2)); 411 REQUIRE(n0 == 3); 412 413 REQUIRE(itr1 == std::next(std::begin(arr1), 2)); 414 REQUIRE(n1 == 3); 415 }