mirror of
https://gitlab.com/libeigen/eigen.git
synced 2024-12-21 07:19:46 +08:00
bug #1046: add unit tests for correct propagation of alignment through std::alignment_of
This commit is contained in:
parent
7580112c31
commit
7d10c78738
@ -52,6 +52,32 @@ void dense_storage_assignment()
|
||||
VERIFY_IS_EQUAL(raw_reference[i], raw_copied_reference[i]);
|
||||
}
|
||||
|
||||
template<typename T, int Size, std::size_t Alignment>
|
||||
void dense_storage_alignment()
|
||||
{
|
||||
#if EIGEN_HAS_ALIGNAS
|
||||
|
||||
struct alignas(Alignment) Empty1 {};
|
||||
VERIFY_IS_EQUAL(std::alignment_of<Empty1>::value, Alignment);
|
||||
|
||||
struct EIGEN_ALIGN_TO_BOUNDARY(Alignment) Empty2 {};
|
||||
VERIFY_IS_EQUAL(std::alignment_of<Empty2>::value, Alignment);
|
||||
|
||||
struct Nested1 { EIGEN_ALIGN_TO_BOUNDARY(Alignment) T data[Size]; };
|
||||
VERIFY_IS_EQUAL(std::alignment_of<Nested1>::value, Alignment);
|
||||
|
||||
VERIFY_IS_EQUAL( (std::alignment_of<internal::plain_array<T,Size,AutoAlign,Alignment> >::value), Alignment);
|
||||
|
||||
const std::size_t default_alignment = internal::compute_default_alignment<T,Size>::value;
|
||||
|
||||
VERIFY_IS_EQUAL( (std::alignment_of<DenseStorage<T,Size,1,1,AutoAlign> >::value), default_alignment);
|
||||
VERIFY_IS_EQUAL( (std::alignment_of<Matrix<T,Size,1,AutoAlign> >::value), default_alignment);
|
||||
struct Nested2 { Matrix<T,Size,1,AutoAlign> mat; };
|
||||
VERIFY_IS_EQUAL(std::alignment_of<Nested2>::value, default_alignment);
|
||||
|
||||
#endif
|
||||
}
|
||||
|
||||
EIGEN_DECLARE_TEST(dense_storage)
|
||||
{
|
||||
dense_storage_copy<int,Dynamic,Dynamic>();
|
||||
@ -72,5 +98,10 @@ EIGEN_DECLARE_TEST(dense_storage)
|
||||
dense_storage_assignment<float,Dynamic,Dynamic>();
|
||||
dense_storage_assignment<float,Dynamic,3>();
|
||||
dense_storage_assignment<float,4,Dynamic>();
|
||||
dense_storage_assignment<float,4,3>();
|
||||
dense_storage_assignment<float,4,3>();
|
||||
|
||||
dense_storage_alignment<float,16,8>();
|
||||
dense_storage_alignment<float,16,16>();
|
||||
dense_storage_alignment<float,16,32>();
|
||||
dense_storage_alignment<float,16,64>();
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user