24 #ifndef ARM_COMPUTE_TEST_DATASET_CARTESIAN_PRODUCT
25 #define ARM_COMPUTE_TEST_DATASET_CARTESIAN_PRODUCT
46 template <
typename T,
typename U>
52 using iter1_type =
typename T_noref::iterator;
53 using iter2_type =
typename U_noref::iterator;
62 : _dataset1{ std::forward<T>(dataset1) },
63 _dataset2{ std::forward<U>(dataset2) }
71 using type = decltype(std::tuple_cat(*std::declval<iter1_type>(), *std::declval<iter2_type>()));
81 iterator(
const T_noref *dataset1,
const U_noref *dataset2)
82 : _iter1{ dataset1->begin() },
83 _dataset2{ dataset2 },
84 _iter2{ dataset2->begin() }
106 return _iter1.description() +
":" + _iter2.description();
115 return std::tuple_cat(*_iter1, *_iter2);
126 if(_second_pos < _dataset2->
size())
133 _iter2 = _dataset2->begin();
143 const U_noref *_dataset2;
146 int _second_pos{ 0 };
155 return iterator(&_dataset1, &_dataset2);
164 return _dataset1.size() * _dataset2.size();
179 template <
typename T,
typename U>
193 template <
typename T1,
typename T2,
typename... Ts>
194 auto combine(T1 &&dataset1, T2 &&dataset2, Ts &&... datasets) -> decltype(
combine(std::forward<T1>(dataset1),
combine(std::forward<T2>(dataset2), std::forward<Ts>(datasets)...)))
196 return combine(std::forward<T1>(dataset1),
combine(std::forward<T2>(dataset2), std::forward<Ts>(datasets)...));
206 template <
typename T,
typename U>
207 CartesianProductDataset<T, U>