based

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

minmax_element_test.cpp (3681B)


0 #include <catch2/catch_test_macros.hpp> 1 2 #include "based/algorithm.hpp" 3 4 TEST_CASE("minmax_element(empty)", "[algorithm/minmax_element]") 5 { 6 const std::array<int, 0> arr = {}; 7 const auto [min, max] = based::minmax_element(std::begin(arr), std::end(arr)); 8 REQUIRE(min == std::end(arr)); 9 REQUIRE(max == std::end(arr)); 10 } 11 12 TEST_CASE("minmax_element(1)", "[algorithm/minmax_element]") 13 { 14 const std::array arr = {0}; 15 const auto [min, max] = based::minmax_element(std::begin(arr), std::end(arr)); 16 const auto mini = std::distance(std::begin(arr), min); 17 const auto maxi = std::distance(std::begin(arr), max); 18 REQUIRE(mini == 0); 19 REQUIRE(maxi == 0); 20 } 21 22 TEST_CASE("minmax_element(increasing even)", "[algorithm/minmax_element]") 23 { 24 const std::array arr = {0, 1, 2, 3}; 25 const auto [min, max] = based::minmax_element(std::begin(arr), std::end(arr)); 26 const auto mini = std::distance(std::begin(arr), min); 27 const auto maxi = std::distance(std::begin(arr), max); 28 REQUIRE(mini == 0); 29 REQUIRE(maxi == std::size(arr) - 1); 30 } 31 32 TEST_CASE("minmax_element(increasing odd)", "[algorithm/minmax_element]") 33 { 34 const std::array arr = {0, 1, 2, 3, 4}; 35 const auto [min, max] = based::minmax_element(std::begin(arr), std::end(arr)); 36 const auto mini = std::distance(std::begin(arr), min); 37 const auto maxi = std::distance(std::begin(arr), max); 38 REQUIRE(mini == 0); 39 REQUIRE(maxi == std::size(arr) - 1); 40 } 41 42 TEST_CASE("minmax_element(decreasing even)", "[algorithm/minmax_element]") 43 { 44 const std::array arr = {3, 2, 1, 0}; 45 const auto [min, max] = based::minmax_element(std::begin(arr), std::end(arr)); 46 const auto mini = std::distance(std::begin(arr), min); 47 const auto maxi = std::distance(std::begin(arr), max); 48 REQUIRE(mini == std::size(arr) - 1); 49 REQUIRE(maxi == 0); 50 } 51 52 TEST_CASE("minmax_element(decreasing odd)", "[algorithm/minmax_element]") 53 { 54 const std::array arr = {4, 3, 2, 1, 0}; 55 const auto [min, max] = based::minmax_element(std::begin(arr), std::end(arr)); 56 const auto mini = std::distance(std::begin(arr), min); 57 const auto maxi = std::distance(std::begin(arr), max); 58 REQUIRE(mini == std::size(arr) - 1); 59 REQUIRE(maxi == 0); 60 } 61 62 TEST_CASE("minmax_element(stable even)", "[algorithm/minmax_element]") 63 { 64 const std::array arr = {3, 0, 0, 3}; 65 const auto [min, max] = based::minmax_element(std::begin(arr), std::end(arr)); 66 const auto mini = std::distance(std::begin(arr), min); 67 const auto maxi = std::distance(std::begin(arr), max); 68 REQUIRE(mini == 1); 69 REQUIRE(maxi == std::size(arr) - 1); 70 } 71 72 TEST_CASE("minmax_element(stable odd)", "[algorithm/minmax_element]") 73 { 74 const std::array arr = {3, 0, 3, 3, 0}; 75 const auto [min, max] = based::minmax_element(std::begin(arr), std::end(arr)); 76 const auto mini = std::distance(std::begin(arr), min); 77 const auto maxi = std::distance(std::begin(arr), max); 78 REQUIRE(mini == 1); 79 REQUIRE(maxi == std::size(arr) - 2); 80 } 81 82 TEST_CASE("minmax_element(stable increasing)", "[algorithm/minmax_element]") 83 { 84 const std::array arr = {0, 0, 1, 2, 3, 4, 4}; 85 const auto [min, max] = based::minmax_element(std::begin(arr), std::end(arr)); 86 const auto mini = std::distance(std::begin(arr), min); 87 const auto maxi = std::distance(std::begin(arr), max); 88 REQUIRE(mini == 0); 89 REQUIRE(maxi == std::size(arr) - 1); 90 } 91 92 TEST_CASE("minmax_element(stable decreasing)", "[algorithm/minmax_element]") 93 { 94 const std::array arr = {4, 4, 3, 2, 1, 0, 0}; 95 const auto [min, max] = based::minmax_element(std::begin(arr), std::end(arr)); 96 const auto mini = std::distance(std::begin(arr), min); 97 const auto maxi = std::distance(std::begin(arr), max); 98 REQUIRE(mini == std::size(arr) - 2); 99 REQUIRE(maxi == 1); 100 }