Add unit tests for aligned alloc
[blender.git] / tests / gtests / guardedalloc / guardedalloc_alignment_test.cc
1 #include "testing/testing.h"
2
3 #include "MEM_guardedalloc.h"
4
5 #define CHECK_ALIGNMENT(ptr, align) EXPECT_EQ(0, (size_t)ptr % align)
6
7 namespace {
8
9 void DoBasicAlignmentChecks(const int alignment) {
10   int *foo, *bar;
11
12   foo = (int *) MEM_mallocN_aligned(sizeof(int) * 10, alignment, "test");
13   CHECK_ALIGNMENT(foo, alignment);
14
15   bar = (int *) MEM_dupallocN(foo);
16   CHECK_ALIGNMENT(bar, alignment);
17   MEM_freeN(bar);
18
19   foo = (int *) MEM_reallocN(foo, sizeof(int) * 5);
20   CHECK_ALIGNMENT(foo, alignment);
21
22   foo = (int *) MEM_recallocN(foo, sizeof(int) * 5);
23   CHECK_ALIGNMENT(foo, alignment);
24
25   MEM_freeN(foo);
26 }
27
28 }  // namespace
29
30 TEST(guardedalloc, LockfreeAlignedAlloc16) {
31   DoBasicAlignmentChecks(16);
32 }
33
34 TEST(guardedalloc, GuardedAlignedAlloc16) {
35   MEM_use_guarded_allocator();
36   DoBasicAlignmentChecks(16);
37 }
38
39 // On Apple we currently support 16 bit alignment only.
40 // Harmless for Blender, but would be nice to support
41 // eventually.
42 #ifndef __APPLE__
43 TEST(guardedalloc, GuardedAlignedAlloc32) {
44   MEM_use_guarded_allocator();
45   DoBasicAlignmentChecks(16);
46 }
47 #endif