diff --git a/include/aare/algorithm.hpp b/include/aare/algorithm.hpp index fc7d51f..be2018f 100644 --- a/include/aare/algorithm.hpp +++ b/include/aare/algorithm.hpp @@ -107,5 +107,16 @@ std::vector cumsum(const std::vector& vec) { } +template bool all_equal(const Container &c) { + if (!c.empty() && + std::all_of(begin(c), end(c), + [c](const typename Container::value_type &element) { + return element == c.front(); + })) + return true; + return false; +} + + } // namespace aare \ No newline at end of file diff --git a/src/RawFile.cpp b/src/RawFile.cpp index 0a4804c..122cf96 100644 --- a/src/RawFile.cpp +++ b/src/RawFile.cpp @@ -1,4 +1,5 @@ #include "aare/RawFile.hpp" +#include "aare/algorithm.hpp" #include "aare/PixelMap.hpp" #include "aare/defs.hpp" #include "aare/logger.hpp" @@ -200,9 +201,7 @@ void RawFile::get_frame_into(size_t frame_index, std::byte *frame_buffer, Detect } // 1. if frame number vector is the same break - while (std::adjacent_find(frame_numbers.begin(), frame_numbers.end(), - std::not_equal_to<>()) != - frame_numbers.end()) { + while (!all_equal(frame_numbers)) { // 2. find the index of the minimum frame number, auto min_frame_idx = std::distance( diff --git a/src/algorithm.test.cpp b/src/algorithm.test.cpp index c67dff6..6bd707b 100644 --- a/src/algorithm.test.cpp +++ b/src/algorithm.test.cpp @@ -168,3 +168,28 @@ TEST_CASE("cumsum on an empty vector", "[algorithm]") { REQUIRE(result.size() == 0); } + +TEST_CASE("All equal on an empty vector is false", "[algorithm]") { + std::vector vec = {}; + REQUIRE(aare::all_equal(vec) == false); +} + +TEST_CASE("All equal on a vector with 1 element is true", "[algorithm]") { + std::vector vec = {1}; + REQUIRE(aare::all_equal(vec) == true); +} + +TEST_CASE("All equal on a vector with 2 elements is true", "[algorithm]") { + std::vector vec = {1, 1}; + REQUIRE(aare::all_equal(vec) == true); +} + +TEST_CASE("All equal on a vector with two different elements is false", "[algorithm]") { + std::vector vec = {1, 2}; + REQUIRE(aare::all_equal(vec) == false); +} + +TEST_CASE("Last element is different", "[algorithm]") { + std::vector vec = {1, 1, 1, 1, 2}; + REQUIRE(aare::all_equal(vec) == false); +} \ No newline at end of file