#include #include TEST_CASE("Find the closed index in a 1D array", "[algorithm]") { aare::NDArray arr({5}); for (ssize_t i = 0; i < arr.size(); i++) { arr[i] = i; } // arr 0, 1, 2, 3, 4 REQUIRE(aare::nearest_index(arr, 2.3) == 2); REQUIRE(aare::nearest_index(arr, 2.6) == 3); REQUIRE(aare::nearest_index(arr, 45.0) == 4); REQUIRE(aare::nearest_index(arr, 0.0) == 0); REQUIRE(aare::nearest_index(arr, -1.0) == 0); } TEST_CASE("Passing integers to nearest_index works", "[algorithm]"){ aare::NDArray arr({5}); for (ssize_t i = 0; i < arr.size(); i++) { arr[i] = i; } // arr 0, 1, 2, 3, 4 REQUIRE(aare::nearest_index(arr, 2) == 2); REQUIRE(aare::nearest_index(arr, 3) == 3); REQUIRE(aare::nearest_index(arr, 45) == 4); REQUIRE(aare::nearest_index(arr, 0) == 0); REQUIRE(aare::nearest_index(arr, -1) == 0); } TEST_CASE("nearest_index works with std::vector", "[algorithm]"){ std::vector vec = {0, 1, 2, 3, 4}; REQUIRE(aare::nearest_index(vec, 2.123) == 2); REQUIRE(aare::nearest_index(vec, 2.66) == 3); REQUIRE(aare::nearest_index(vec, 4555555.0) == 4); REQUIRE(aare::nearest_index(vec, 0.0) == 0); REQUIRE(aare::nearest_index(vec, -10.0) == 0); } TEST_CASE("nearest index works with std::array", "[algorithm]"){ std::array arr = {0, 1, 2, 3, 4}; REQUIRE(aare::nearest_index(arr, 2.123) == 2); REQUIRE(aare::nearest_index(arr, 2.501) == 3); REQUIRE(aare::nearest_index(arr, 4555555.0) == 4); REQUIRE(aare::nearest_index(arr, 0.0) == 0); REQUIRE(aare::nearest_index(arr, -10.0) == 0); } TEST_CASE("nearest index when there is no different uses the first element", "[algorithm]"){ std::vector vec = {5, 5, 5, 5, 5}; REQUIRE(aare::nearest_index(vec, 5) == 0); } TEST_CASE("nearest index when there is no different uses the first element also when all smaller", "[algorithm]"){ std::vector vec = {5, 5, 5, 5, 5}; REQUIRE(aare::nearest_index(vec, 10) == 0); } TEST_CASE("last smaller", "[algorithm]"){ aare::NDArray arr({5}); for (ssize_t i = 0; i < arr.size(); i++) { arr[i] = i; } // arr 0, 1, 2, 3, 4 REQUIRE(aare::last_smaller(arr, -10.0) == 0); REQUIRE(aare::last_smaller(arr, 0.0) == 0); REQUIRE(aare::last_smaller(arr, 2.3) == 2); REQUIRE(aare::last_smaller(arr, 253.) == 4); } TEST_CASE("returns last bin strictly smaller", "[algorithm]"){ aare::NDArray arr({5}); for (ssize_t i = 0; i < arr.size(); i++) { arr[i] = i; } // arr 0, 1, 2, 3, 4 REQUIRE(aare::last_smaller(arr, 2.0) == 1); } TEST_CASE("last_smaller with all elements smaller returns last element", "[algorithm]"){ aare::NDArray arr({5}); for (ssize_t i = 0; i < arr.size(); i++) { arr[i] = i; } // arr 0, 1, 2, 3, 4 REQUIRE(aare::last_smaller(arr, 50.) == 4); } TEST_CASE("last_smaller with all elements bigger returns first element", "[algorithm]"){ aare::NDArray arr({5}); for (ssize_t i = 0; i < arr.size(); i++) { arr[i] = i; } // arr 0, 1, 2, 3, 4 REQUIRE(aare::last_smaller(arr, -50.) == 0); } TEST_CASE("last smaller with all elements equal returns the first element", "[algorithm]"){ std::vector vec = {5,5,5,5,5,5,5}; REQUIRE(aare::last_smaller(vec, 5) == 0); } TEST_CASE("first_lager with vector", "[algorithm]"){ std::vector vec = {0, 1, 2, 3, 4}; REQUIRE(aare::first_larger(vec, 2.5) == 3); } TEST_CASE("first_lager with all elements smaller returns last element", "[algorithm]"){ std::vector vec = {0, 1, 2, 3, 4}; REQUIRE(aare::first_larger(vec, 50.) == 4); } TEST_CASE("first_lager with all elements bigger returns first element", "[algorithm]"){ std::vector vec = {0, 1, 2, 3, 4}; REQUIRE(aare::first_larger(vec, -50.) == 0); } TEST_CASE("first_lager with all elements the same as the check returns last", "[algorithm]"){ std::vector vec = {14, 14, 14, 14, 14}; REQUIRE(aare::first_larger(vec, 14) == 4); } TEST_CASE("first larger with the same element", "[algorithm]"){ std::vector vec = {7,8,9,10,11}; REQUIRE(aare::first_larger(vec, 9) == 3); } TEST_CASE("cumsum works", "[algorithm]"){ std::vector vec = {0, 1, 2, 3, 4}; auto result = aare::cumsum(vec); REQUIRE(result.size() == vec.size()); REQUIRE(result[0] == 0); REQUIRE(result[1] == 1); REQUIRE(result[2] == 3); REQUIRE(result[3] == 6); REQUIRE(result[4] == 10); } TEST_CASE("cumsum works with empty vector", "[algorithm]"){ std::vector vec = {}; auto result = aare::cumsum(vec); REQUIRE(result.size() == 0); } TEST_CASE("cumsum works with negative numbers", "[algorithm]"){ std::vector vec = {0, -1, -2, -3, -4}; auto result = aare::cumsum(vec); REQUIRE(result.size() == vec.size()); REQUIRE(result[0] == 0); REQUIRE(result[1] == -1); REQUIRE(result[2] == -3); REQUIRE(result[3] == -6); REQUIRE(result[4] == -10); }