summaryrefslogtreecommitdiffhomepage
path: root/eigen/test/dynalloc.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'eigen/test/dynalloc.cpp')
-rw-r--r--eigen/test/dynalloc.cpp175
1 files changed, 0 insertions, 175 deletions
diff --git a/eigen/test/dynalloc.cpp b/eigen/test/dynalloc.cpp
deleted file mode 100644
index f1cc70b..0000000
--- a/eigen/test/dynalloc.cpp
+++ /dev/null
@@ -1,175 +0,0 @@
-// This file is part of Eigen, a lightweight C++ template library
-// for linear algebra.
-//
-// Copyright (C) 2008 Gael Guennebaud <gael.guennebaud@inria.fr>
-//
-// This Source Code Form is subject to the terms of the Mozilla
-// Public License v. 2.0. If a copy of the MPL was not distributed
-// with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-#include "main.h"
-
-#if EIGEN_MAX_ALIGN_BYTES>0
-#define ALIGNMENT EIGEN_MAX_ALIGN_BYTES
-#else
-#define ALIGNMENT 1
-#endif
-
-typedef Matrix<float,8,1> Vector8f;
-
-void check_handmade_aligned_malloc()
-{
- for(int i = 1; i < 1000; i++)
- {
- char *p = (char*)internal::handmade_aligned_malloc(i);
- VERIFY(internal::UIntPtr(p)%ALIGNMENT==0);
- // if the buffer is wrongly allocated this will give a bad write --> check with valgrind
- for(int j = 0; j < i; j++) p[j]=0;
- internal::handmade_aligned_free(p);
- }
-}
-
-void check_aligned_malloc()
-{
- for(int i = ALIGNMENT; i < 1000; i++)
- {
- char *p = (char*)internal::aligned_malloc(i);
- VERIFY(internal::UIntPtr(p)%ALIGNMENT==0);
- // if the buffer is wrongly allocated this will give a bad write --> check with valgrind
- for(int j = 0; j < i; j++) p[j]=0;
- internal::aligned_free(p);
- }
-}
-
-void check_aligned_new()
-{
- for(int i = ALIGNMENT; i < 1000; i++)
- {
- float *p = internal::aligned_new<float>(i);
- VERIFY(internal::UIntPtr(p)%ALIGNMENT==0);
- // if the buffer is wrongly allocated this will give a bad write --> check with valgrind
- for(int j = 0; j < i; j++) p[j]=0;
- internal::aligned_delete(p,i);
- }
-}
-
-void check_aligned_stack_alloc()
-{
- for(int i = ALIGNMENT; i < 400; i++)
- {
- ei_declare_aligned_stack_constructed_variable(float,p,i,0);
- VERIFY(internal::UIntPtr(p)%ALIGNMENT==0);
- // if the buffer is wrongly allocated this will give a bad write --> check with valgrind
- for(int j = 0; j < i; j++) p[j]=0;
- }
-}
-
-
-// test compilation with both a struct and a class...
-struct MyStruct
-{
- EIGEN_MAKE_ALIGNED_OPERATOR_NEW
- char dummychar;
- Vector8f avec;
-};
-
-class MyClassA
-{
- public:
- EIGEN_MAKE_ALIGNED_OPERATOR_NEW
- char dummychar;
- Vector8f avec;
-};
-
-template<typename T> void check_dynaligned()
-{
- // TODO have to be updated once we support multiple alignment values
- if(T::SizeAtCompileTime % ALIGNMENT == 0)
- {
- T* obj = new T;
- VERIFY(T::NeedsToAlign==1);
- VERIFY(internal::UIntPtr(obj)%ALIGNMENT==0);
- delete obj;
- }
-}
-
-template<typename T> void check_custom_new_delete()
-{
- {
- T* t = new T;
- delete t;
- }
-
- {
- std::size_t N = internal::random<std::size_t>(1,10);
- T* t = new T[N];
- delete[] t;
- }
-
-#if EIGEN_MAX_ALIGN_BYTES>0
- {
- T* t = static_cast<T *>((T::operator new)(sizeof(T)));
- (T::operator delete)(t, sizeof(T));
- }
-
- {
- T* t = static_cast<T *>((T::operator new)(sizeof(T)));
- (T::operator delete)(t);
- }
-#endif
-}
-
-void test_dynalloc()
-{
- // low level dynamic memory allocation
- CALL_SUBTEST(check_handmade_aligned_malloc());
- CALL_SUBTEST(check_aligned_malloc());
- CALL_SUBTEST(check_aligned_new());
- CALL_SUBTEST(check_aligned_stack_alloc());
-
- for (int i=0; i<g_repeat*100; ++i)
- {
- CALL_SUBTEST( check_custom_new_delete<Vector4f>() );
- CALL_SUBTEST( check_custom_new_delete<Vector2f>() );
- CALL_SUBTEST( check_custom_new_delete<Matrix4f>() );
- CALL_SUBTEST( check_custom_new_delete<MatrixXi>() );
- }
-
- // check static allocation, who knows ?
- #if EIGEN_MAX_STATIC_ALIGN_BYTES
- for (int i=0; i<g_repeat*100; ++i)
- {
- CALL_SUBTEST(check_dynaligned<Vector4f>() );
- CALL_SUBTEST(check_dynaligned<Vector2d>() );
- CALL_SUBTEST(check_dynaligned<Matrix4f>() );
- CALL_SUBTEST(check_dynaligned<Vector4d>() );
- CALL_SUBTEST(check_dynaligned<Vector4i>() );
- CALL_SUBTEST(check_dynaligned<Vector8f>() );
- }
-
- {
- MyStruct foo0; VERIFY(internal::UIntPtr(foo0.avec.data())%ALIGNMENT==0);
- MyClassA fooA; VERIFY(internal::UIntPtr(fooA.avec.data())%ALIGNMENT==0);
- }
-
- // dynamic allocation, single object
- for (int i=0; i<g_repeat*100; ++i)
- {
- MyStruct *foo0 = new MyStruct(); VERIFY(internal::UIntPtr(foo0->avec.data())%ALIGNMENT==0);
- MyClassA *fooA = new MyClassA(); VERIFY(internal::UIntPtr(fooA->avec.data())%ALIGNMENT==0);
- delete foo0;
- delete fooA;
- }
-
- // dynamic allocation, array
- const int N = 10;
- for (int i=0; i<g_repeat*100; ++i)
- {
- MyStruct *foo0 = new MyStruct[N]; VERIFY(internal::UIntPtr(foo0->avec.data())%ALIGNMENT==0);
- MyClassA *fooA = new MyClassA[N]; VERIFY(internal::UIntPtr(fooA->avec.data())%ALIGNMENT==0);
- delete[] foo0;
- delete[] fooA;
- }
- #endif
-
-}