diff --git a/test/mapstride.cpp b/test/mapstride.cpp index 8ccd758f8..e2bda99ce 100644 --- a/test/mapstride.cpp +++ b/test/mapstride.cpp @@ -24,7 +24,7 @@ #include "main.h" -template void map_class_vector(const VectorType& m) +template void map_class_vector(const VectorType& m) { typedef typename VectorType::Index Index; typedef typename VectorType::Scalar Scalar; @@ -35,10 +35,13 @@ template void map_class_vector(const VectorType& m) Index arraysize = 3*size; - Scalar* array = internal::aligned_new(arraysize); + Scalar* a_array = internal::aligned_new(arraysize+1); + Scalar* array = a_array; + if(Alignment!=Aligned) + array = (Scalar*)(ptrdiff_t(a_array) + (internal::packet_traits::AlignedOnScalar?sizeof(Scalar):sizeof(typename NumTraits::Real))); { - Map > map(array, size); + Map > map(array, size); map = v; for(int i = 0; i < size; ++i) { @@ -57,10 +60,10 @@ template void map_class_vector(const VectorType& m) } } - internal::aligned_delete(array, arraysize); + internal::aligned_delete(a_array, arraysize+1); } -template void map_class_matrix(const MatrixType& _m) +template void map_class_matrix(const MatrixType& _m) { typedef typename MatrixType::Index Index; typedef typename MatrixType::Scalar Scalar; @@ -71,11 +74,14 @@ template void map_class_matrix(const MatrixType& _m) Index arraysize = 2*(rows+4)*(cols+4); - Scalar* array = internal::aligned_new(arraysize); + Scalar* a_array = internal::aligned_new(arraysize+1); + Scalar* array = a_array; + if(Alignment!=Aligned) + array = (Scalar*)(ptrdiff_t(a_array) + (internal::packet_traits::AlignedOnScalar?sizeof(Scalar):sizeof(typename NumTraits::Real))); // test no inner stride and some dynamic outer stride { - Map > map(array, rows, cols, OuterStride(m.innerSize()+1)); + Map > map(array, rows, cols, OuterStride(m.innerSize()+1)); map = m; VERIFY(map.outerStride() == map.innerSize()+1); for(int i = 0; i < m.outerSize(); ++i) @@ -93,7 +99,7 @@ template void map_class_matrix(const MatrixType& _m) InnerSize = MatrixType::InnerSizeAtCompileTime, OuterStrideAtCompileTime = InnerSize==Dynamic ? Dynamic : InnerSize+4 }; - Map > + Map > map(array, rows, cols, OuterStride(m.innerSize()+4)); map = m; VERIFY(map.outerStride() == map.innerSize()+4); @@ -107,7 +113,7 @@ template void map_class_matrix(const MatrixType& _m) // test both inner stride and outer stride { - Map > map(array, rows, cols, Stride(2*m.innerSize()+1, 2)); + Map > map(array, rows, cols, Stride(2*m.innerSize()+1, 2)); map = m; VERIFY(map.outerStride() == 2*map.innerSize()+1); VERIFY(map.innerStride() == 2); @@ -119,23 +125,37 @@ template void map_class_matrix(const MatrixType& _m) } } - internal::aligned_delete(array, arraysize); + internal::aligned_delete(a_array, arraysize+1); } void test_mapstride() { for(int i = 0; i < g_repeat; i++) { - CALL_SUBTEST_1( map_class_vector(Matrix()) ); - CALL_SUBTEST_2( map_class_vector(Vector4d()) ); - CALL_SUBTEST_3( map_class_vector(RowVector4f()) ); - CALL_SUBTEST_4( map_class_vector(VectorXcf(8)) ); - CALL_SUBTEST_5( map_class_vector(VectorXi(12)) ); + EIGEN_UNUSED int maxn = 30; + CALL_SUBTEST_1( map_class_vector(Matrix()) ); + CALL_SUBTEST_1( map_class_vector(Matrix()) ); + CALL_SUBTEST_2( map_class_vector(Vector4d()) ); + CALL_SUBTEST_2( map_class_vector(Vector4d()) ); + CALL_SUBTEST_3( map_class_vector(RowVector4f()) ); + CALL_SUBTEST_3( map_class_vector(RowVector4f()) ); + CALL_SUBTEST_4( map_class_vector(VectorXcf(internal::random(1,maxn))) ); + CALL_SUBTEST_4( map_class_vector(VectorXcf(internal::random(1,maxn))) ); + CALL_SUBTEST_5( map_class_vector(VectorXi(internal::random(1,maxn))) ); + CALL_SUBTEST_5( map_class_vector(VectorXi(internal::random(1,maxn))) ); - CALL_SUBTEST_1( map_class_matrix(Matrix()) ); - CALL_SUBTEST_2( map_class_matrix(Matrix4d()) ); - CALL_SUBTEST_3( map_class_matrix(Matrix()) ); - CALL_SUBTEST_3( map_class_matrix(Matrix()) ); - CALL_SUBTEST_4( map_class_matrix(MatrixXcf(internal::random(1,10),internal::random(1,10))) ); - CALL_SUBTEST_5( map_class_matrix(MatrixXi(5,5)));//internal::random(1,10),internal::random(1,10))) ); + CALL_SUBTEST_1( map_class_matrix(Matrix()) ); + CALL_SUBTEST_1( map_class_matrix(Matrix()) ); + CALL_SUBTEST_2( map_class_matrix(Matrix4d()) ); + CALL_SUBTEST_2( map_class_matrix(Matrix4d()) ); + CALL_SUBTEST_3( map_class_matrix(Matrix()) ); + CALL_SUBTEST_3( map_class_matrix(Matrix()) ); + CALL_SUBTEST_3( map_class_matrix(Matrix()) ); + CALL_SUBTEST_3( map_class_matrix(Matrix()) ); + CALL_SUBTEST_4( map_class_matrix(MatrixXcf(internal::random(1,maxn),internal::random(1,maxn))) ); + CALL_SUBTEST_4( map_class_matrix(MatrixXcf(internal::random(1,maxn),internal::random(1,maxn))) ); + CALL_SUBTEST_5( map_class_matrix(MatrixXi(internal::random(1,maxn),internal::random(1,maxn))) ); + CALL_SUBTEST_5( map_class_matrix(MatrixXi(internal::random(1,maxn),internal::random(1,maxn))) ); + CALL_SUBTEST_6( map_class_matrix(MatrixXcd(internal::random(1,maxn),internal::random(1,maxn))) ); + CALL_SUBTEST_6( map_class_matrix(MatrixXcd(internal::random(1,maxn),internal::random(1,maxn))) ); } }