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