diff options
Diffstat (limited to 'test/dynalloc.cpp')
-rw-r--r-- | test/dynalloc.cpp | 57 |
1 files changed, 54 insertions, 3 deletions
diff --git a/test/dynalloc.cpp b/test/dynalloc.cpp index 916193df0..ffe21771a 100644 --- a/test/dynalloc.cpp +++ b/test/dynalloc.cpp @@ -24,6 +24,55 @@ #include "main.h" +void check_handmade_aligned_malloc() +{ + for(int i = 1; i < 1000; i++) + { + char *p = (char*)ei_handmade_aligned_malloc(i); + VERIFY(size_t(p)%16==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; + ei_handmade_aligned_free(p); + } +} + +void check_aligned_malloc() +{ + for(int i = 1; i < 1000; i++) + { + char *p = (char*)ei_aligned_malloc(i); + VERIFY(size_t(p)%16==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; + ei_aligned_free(p); + } +} + +void check_aligned_new() +{ + for(int i = 1; i < 1000; i++) + { + float *p = ei_aligned_new<float>(i); + VERIFY(size_t(p)%16==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; + ei_aligned_delete(p,i); + } +} + +void check_aligned_stack_alloc() +{ + for(int i = 1; i < 1000; i++) + { + float *p = ei_aligned_stack_new(float,i); + VERIFY(size_t(p)%16==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; + ei_aligned_stack_delete(float,p,i); + } +} + + // test compilation with both a struct and a class... struct MyStruct { @@ -49,8 +98,12 @@ template<typename T> void check_dynaligned() 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()); -#ifdef EIGEN_VECTORIZE for (int i=0; i<g_repeat*100; ++i) { CALL_SUBTEST( check_dynaligned<Vector4f>() ); @@ -100,6 +153,4 @@ void test_dynalloc() } } -#endif // EIGEN_VECTORIZE - } |