Skip to content

Commit

Permalink
tests: test a sequence of 3 values, too
Browse files Browse the repository at this point in the history
* and print information about the Container type on failure

Signed-off-by: Matthias Kretz <kretz@kde.org>
  • Loading branch information
mattkretz committed Jan 21, 2016
1 parent 5f68ba7 commit 3f138bf
Show file tree
Hide file tree
Showing 2 changed files with 28 additions and 7 deletions.
19 changes: 12 additions & 7 deletions tests/stlcontainer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -70,22 +70,27 @@ TEST_TYPES(V, stdVectorAlignment, (ALL_VECTORS))
}
}

template<typename V, typename Container> void listInitializationImpl()
template <typename V, typename Container, std::size_t... Indexes>
void listInitializationImpl(Vc::index_sequence<Indexes...>)
{
typedef typename V::EntryType T;
const auto data = Vc::makeContainer<Container>({ T(1), T(2), T(3), T(4), T(5), T(6), T(7), T(8), T(9) });
const auto data = Vc::makeContainer<Container>({T(Indexes + 1)...});
V reference = V::IndexesFromZero() + 1;
for (const auto &v : data) {
reference.setZero(reference > 9);
COMPARE(v, reference);
reference.setZero(reference > sizeof...(Indexes));
COMPARE(v, reference) << UnitTest::typeToString<Container>() << " -> "
<< UnitTest::typeToString<decltype(data)>();
reference += V::Size;
}
}
TEST_TYPES(V, listInitialization, (ALL_VECTORS))
{
listInitializationImpl<V, std::vector<V>>();
listInitializationImpl<V, std::array<V, 9>>();
listInitializationImpl<V, std::deque<V>>();
listInitializationImpl<V, std::vector<V>>(Vc::make_index_sequence<9>());
listInitializationImpl<V, std::vector<V>>(Vc::make_index_sequence<3>());
listInitializationImpl<V, std::array<V, 9>>(Vc::make_index_sequence<9>());
listInitializationImpl<V, std::array<V, 3>>(Vc::make_index_sequence<3>());
listInitializationImpl<V, std::deque<V>>(Vc::make_index_sequence<9>());
listInitializationImpl<V, std::deque<V>>(Vc::make_index_sequence<3>());

// The following two crash (at least with AVX). Probably unaligned memory access.
//listInitialization<V, std::forward_list<V>>();
Expand Down
16 changes: 16 additions & 0 deletions tests/unittest.h
Original file line number Diff line number Diff line change
Expand Up @@ -1172,6 +1172,22 @@ template <typename V, int Repetitions = 10000, typename F> void withRandomMask(F

// typeToString {{{1
template <typename T> inline std::string typeToString();
// std::array<T, N> {{{2
template <typename T, std::size_t N>
inline std::string typeToString_impl(std::array<T, N> const &)
{
std::stringstream s;
s << "array<" << typeToString<T>() << ", " << N << '>';
return s.str();
}
// std::vector<T> {{{2
template <typename T>
inline std::string typeToString_impl(std::vector<T> const &)
{
std::stringstream s;
s << "vector<" << typeToString<T>() << '>';
return s.str();
}
// std::integral_constant<T, N> {{{2
template <typename T, T N>
inline std::string typeToString_impl(std::integral_constant<T, N> const &)
Expand Down

0 comments on commit 3f138bf

Please sign in to comment.