based

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

find_mismatch_test.cpp (7389B)


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(empty)", "[algorithm/find_mismatch]") 13 { 14 std::array<int, 0> arr0 = {}; 15 std::array<int, 0> arr1 = {}; 16 17 const auto [itr0, itr1] = based::find_mismatch(std::begin(arr0), 18 std::end(arr0), 19 std::begin(arr1), 20 std::end(arr1), 21 equal {}); 22 23 REQUIRE(itr0 == std::end(arr0)); 24 REQUIRE(itr1 == std::end(arr1)); 25 } 26 27 TEST_CASE("find_mismatch(empty, nonempty)", "[algorithm/find_mismatch]") 28 { 29 std::array<int, 0> arr0 = {}; 30 std::array arr1 = {0, 1, 2, 3, 4}; 31 32 const auto [itr0, itr1] = based::find_mismatch(std::begin(arr0), 33 std::end(arr0), 34 std::begin(arr1), 35 std::end(arr1), 36 equal {}); 37 38 REQUIRE(itr0 == std::end(arr0)); 39 REQUIRE(itr1 == std::begin(arr1)); 40 } 41 42 TEST_CASE("find_mismatch(nonempty, empty)", "[algorithm/find_mismatch]") 43 { 44 std::array arr0 = {0, 1, 2, 3, 4}; 45 std::array<int, 0> arr1 = {}; 46 47 const auto [itr0, itr1] = based::find_mismatch(std::begin(arr0), 48 std::end(arr0), 49 std::begin(arr1), 50 std::end(arr1), 51 equal {}); 52 53 REQUIRE(itr0 == std::begin(arr0)); 54 REQUIRE(itr1 == std::end(arr1)); 55 } 56 57 TEST_CASE("find_mismatch(equal)", "[algorithm/find_mismatch]") 58 { 59 std::array arr0 = {0, 1, 2, 3, 4}; 60 std::array arr1 = {0, 1, 2, 3, 4}; 61 62 const auto [itr0, itr1] = based::find_mismatch(std::begin(arr0), 63 std::end(arr0), 64 std::begin(arr1), 65 std::end(arr1), 66 equal {}); 67 68 REQUIRE(itr0 == std::end(arr0)); 69 REQUIRE(itr1 == std::end(arr1)); 70 } 71 72 TEST_CASE("find_mismatch(equal, longer)", "[algorithm/find_mismatch]") 73 { 74 std::array arr0 = {0, 1, 2}; 75 std::array arr1 = {0, 1, 2, 3, 4}; 76 77 const auto [itr0, itr1] = based::find_mismatch(std::begin(arr0), 78 std::end(arr0), 79 std::begin(arr1), 80 std::end(arr1), 81 equal {}); 82 83 REQUIRE(itr0 == std::end(arr0)); 84 REQUIRE(itr1 == std::next(std::begin(arr1), std::size(arr0))); 85 } 86 87 TEST_CASE("find_mismatch(longer, equal)", "[algorithm/find_mismatch]") 88 { 89 std::array arr0 = {0, 1, 2, 3, 4}; 90 std::array arr1 = {0, 1, 2}; 91 92 const auto [itr0, itr1] = based::find_mismatch(std::begin(arr0), 93 std::end(arr0), 94 std::begin(arr1), 95 std::end(arr1), 96 equal {}); 97 98 REQUIRE(itr0 == std::next(std::begin(arr0), std::size(arr1))); 99 REQUIRE(itr1 == std::end(arr1)); 100 } 101 102 TEST_CASE("find_mismatch(mismatch)", "[algorithm/find_mismatch]") 103 { 104 std::array arr0 = {0, 1, 4, 3, 2}; 105 std::array arr1 = {0, 1, 2, 3, 4}; 106 107 const auto [itr0, itr1] = based::find_mismatch(std::begin(arr0), 108 std::end(arr0), 109 std::begin(arr1), 110 std::end(arr1), 111 equal {}); 112 113 REQUIRE(itr0 == std::next(std::begin(arr0), 2)); 114 REQUIRE(itr1 == std::next(std::begin(arr1), 2)); 115 } 116 117 TEST_CASE("find_adjacent_mismatch(empty)", "[algorithm/find_adjacent_mismatch]") 118 { 119 std::array<int, 0> arr = {}; 120 121 const auto* itr = 122 based::find_adjacent_mismatch(std::begin(arr), std::end(arr), equal {}); 123 124 REQUIRE(itr == std::end(arr)); 125 } 126 127 TEST_CASE("find_adjacent_mismatch(one)", "[algorithm/find_adjacent_mismatch]") 128 { 129 std::array arr = {0}; 130 131 const auto* itr = 132 based::find_adjacent_mismatch(std::begin(arr), std::end(arr), equal {}); 133 134 REQUIRE(itr == std::end(arr)); 135 } 136 137 TEST_CASE("find_adjacent_mismatch(two equal)", 138 "[algorithm/find_adjacent_mismatch]") 139 { 140 std::array arr = {0, 0}; 141 142 const auto* itr = 143 based::find_adjacent_mismatch(std::begin(arr), std::end(arr), equal {}); 144 145 REQUIRE(itr == std::end(arr)); 146 } 147 148 TEST_CASE("find_adjacent_mismatch(two nonequal)", 149 "[algorithm/find_adjacent_mismatch]") 150 { 151 std::array arr = {0, 1}; 152 153 const auto* itr = 154 based::find_adjacent_mismatch(std::begin(arr), std::end(arr), equal {}); 155 156 REQUIRE(itr == std::next(std::begin(arr), 1)); 157 } 158 159 TEST_CASE("find_adjacent_mismatch(equal)", "[algorithm/find_adjacent_mismatch]") 160 { 161 std::array arr = {0, 0, 0, 0, 0, 0}; 162 163 const auto* itr = 164 based::find_adjacent_mismatch(std::begin(arr), std::end(arr), equal {}); 165 166 REQUIRE(itr == std::end(arr)); 167 } 168 169 TEST_CASE("find_adjacent_mismatch(nonequal)", 170 "[algorithm/find_adjacent_mismatch]") 171 { 172 std::array arr = {0, 0, 0, 0, 1, 1, 1, 1}; 173 174 const auto* itr = 175 based::find_adjacent_mismatch(std::begin(arr), std::end(arr), equal {}); 176 177 REQUIRE(itr == std::next(std::begin(arr), 4)); 178 } 179 180 TEST_CASE("find_adjacent_mismatch_forward(empty)", 181 "[algorithm/find_adjacent_mismatch_forward]") 182 { 183 std::array<int, 0> arr = {}; 184 185 const auto* itr = based::find_adjacent_mismatch_forward( 186 std::begin(arr), std::end(arr), equal {}); 187 188 REQUIRE(itr == std::end(arr)); 189 } 190 191 TEST_CASE("find_adjacent_mismatch_forward(one)", 192 "[algorithm/find_adjacent_mismatch_forward]") 193 { 194 std::array arr = {0}; 195 196 const auto* itr = based::find_adjacent_mismatch_forward( 197 std::begin(arr), std::end(arr), equal {}); 198 199 REQUIRE(itr == std::end(arr)); 200 } 201 202 TEST_CASE("find_adjacent_mismatch_forward(two equal)", 203 "[algorithm/find_adjacent_mismatch_forward]") 204 { 205 std::array arr = {0, 0}; 206 207 const auto* itr = based::find_adjacent_mismatch_forward( 208 std::begin(arr), std::end(arr), equal {}); 209 210 REQUIRE(itr == std::end(arr)); 211 } 212 213 TEST_CASE("find_adjacent_mismatch_forward(two nonequal)", 214 "[algorithm/find_adjacent_mismatch_forward]") 215 { 216 std::array arr = {0, 1}; 217 218 const auto* itr = based::find_adjacent_mismatch_forward( 219 std::begin(arr), std::end(arr), equal {}); 220 221 REQUIRE(itr == std::next(std::begin(arr), 1)); 222 } 223 224 TEST_CASE("find_adjacent_mismatch_forward(equal)", 225 "[algorithm/find_adjacent_mismatch_forward]") 226 { 227 std::array arr = {0, 0, 0, 0, 0, 0}; 228 229 const auto* itr = based::find_adjacent_mismatch_forward( 230 std::begin(arr), std::end(arr), equal {}); 231 232 REQUIRE(itr == std::end(arr)); 233 } 234 235 TEST_CASE("find_adjacent_mismatch_forward(nonequal)", 236 "[algorithm/find_adjacent_mismatch_forward]") 237 { 238 std::array arr = {0, 0, 0, 0, 1, 1, 1, 1}; 239 240 const auto* itr = based::find_adjacent_mismatch_forward( 241 std::begin(arr), std::end(arr), equal {}); 242 243 REQUIRE(itr == std::next(std::begin(arr), 4)); 244 }