diff --git a/src/utils/Array.hpp b/src/utils/Array.hpp index b06def6bcd511ac19db91a10aff4a8966ab63838..7a0bec6f661d2e220349a3ac55660ae200431aac 100644 --- a/src/utils/Array.hpp +++ b/src/utils/Array.hpp @@ -106,6 +106,7 @@ class Array ~Array() = default; }; +// map, multimap, unordered_map and stack cannot be copied this way template <typename Container> PASTIS_INLINE Array<std::remove_const_t<typename Container::value_type>> diff --git a/tests/test_Array.cpp b/tests/test_Array.cpp index e6a31ae8953ebd908e0b0e36e4b3e567b1eb3826..8bac68679ce4bd245fc1ff846adbfaf4a691e82a 100644 --- a/tests/test_Array.cpp +++ b/tests/test_Array.cpp @@ -7,6 +7,9 @@ #include <vector> #include <set> #include <list> +#include <deque> +#include <valarray> +#include <unordered_set> // Instantiate to ensure full coverage is performed template class Array<int>; @@ -176,6 +179,15 @@ TEST_CASE("Array", "[utils]") { } } + { + std::valarray<int> v{1,2,5,3}; + Array<int> v_array = convert_to_array(v); + + REQUIRE(v_array.size() == v.size()); + REQUIRE(((v_array[0] == 1) and (v_array[1] == 2) and + (v_array[2] == 5) and (v_array[3] == 3))); + } + { std::set<int> s{4,2,5,3,1,3,2}; Array<int> s_array = convert_to_array(s); @@ -186,6 +198,20 @@ TEST_CASE("Array", "[utils]") { (s_array[4] == 5))); } + { + std::unordered_set<int> us{4,2,5,3,1,3,2}; + Array<int> us_array = convert_to_array(us); + + REQUIRE(us_array.size() == us.size()); + + std::set<int> s; + for (size_t i=0; i<us_array.size(); ++i) { + REQUIRE((us.find(us_array[i]) != us.end())); + s.insert(us_array[i]); + } + REQUIRE(s.size() == us_array.size()); + } + { std::multiset<int> ms{4,2,5,3,1,3,2}; Array<int> ms_array = convert_to_array(ms); @@ -206,6 +232,17 @@ TEST_CASE("Array", "[utils]") { (l_array[2] == 5) and (l_array[3] == 6) and (l_array[4] == 2))); } + + { + std::deque<int> q{1,3,5,6,2}; + q.push_front(2); + Array<int> q_array = convert_to_array(q); + + REQUIRE(q_array.size() == q.size()); + REQUIRE(((q_array[0] == 2) and (q_array[1] == 1) and + (q_array[2] == 3) and (q_array[3] == 5) and + (q_array[4] == 6) and (q_array[5] == 2))); + } } #ifndef NDEBUG