1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29 #include "cx/allocator.h"
30 #include <gtest/gtest.h>
31
32 TEST(Allocator, DefaultAllocator) {
33 cx_allocator_class *clazz = cxDefaultAllocator->cl;
34 ASSERT_NE(clazz, nullptr);
35 }
36
37 TEST(Allocator, DefaultMalloc) {
38 void *test = cxMalloc(cxDefaultAllocator,
16);
39 ASSERT_NE(test, nullptr);
40 free(test);
41 }
42
43 TEST(Allocator, DefaultRealloc) {
44 void *test = calloc(
8,
1);
45 memcpy(test,
"Test",
5);
46 test = cxRealloc(cxDefaultAllocator, test,
16);
47 ASSERT_NE(test, nullptr);
48 EXPECT_STREQ(reinterpret_cast<
char *>(test),
"Test");
49 free(test);
50 }
51
52 TEST(Allocator, Reallocate) {
53 void *test = calloc(
8,
1);
54 memcpy(test,
"Test",
5);
55 int ret = cxReallocate(cxDefaultAllocator, &test,
16);
56 EXPECT_EQ(ret,
0);
57 ASSERT_NE(test, nullptr);
58 EXPECT_STREQ(reinterpret_cast<
char *>(test),
"Test");
59 free(test);
60 }
61
62 TEST(Allocator, DefaultCalloc) {
63 char *test = reinterpret_cast<
char *>(cxCalloc(cxDefaultAllocator,
8,
2));
64 ASSERT_NE(test, nullptr);
65 for (
int i =
0; i <
16; i++)
ASSERT_EQ(test[i],
0);
66 free(test);
67 }
68
69 TEST(Allocator, DefaultFree) {
70 void *test = malloc(
16);
71 EXPECT_NO_FATAL_FAILURE(
72 cxFree(cxDefaultAllocator, test);
73 );
74 }
75
76 TEST(Allocator, FailingReallocate) {
77
78 cx_allocator_class mock_cl;
79 mock_cl.realloc = [](
80 [[maybe_unused]]
void *p,
81 [[maybe_unused]]
void *d,
82 [[maybe_unused]]
size_t n
83 ) ->
void * {
return nullptr; };
84 cx_allocator_s mock{&mock_cl, nullptr};
85
86 void *test = calloc(
8,
1);
87 memcpy(test,
"Test",
5);
88 void *original = test;
89 int ret = cxReallocate(&mock, &test,
16);
90
91 EXPECT_NE(ret,
0);
92
93 EXPECT_EQ(test, original);
94 EXPECT_STREQ(reinterpret_cast<
char *>(test),
"Test");
95 free(test);
96 }
97