test/test_allocator.c

Tue, 05 Oct 2021 11:19:32 +0200

author
Mike Becker <universe@uap-core.de>
date
Tue, 05 Oct 2021 11:19:32 +0200
changeset 460
e075009b33b7
parent 443
d6d8712e15bc
permissions
-rw-r--r--

remove convenience macros

Users should write their own wrappers s.t. the type
information does not have to be repeated on every
call site.

391
f094a53c1178 adds allocator interface and default implementation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
1 /*
f094a53c1178 adds allocator interface and default implementation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
2 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
f094a53c1178 adds allocator interface and default implementation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
3 *
f094a53c1178 adds allocator interface and default implementation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
4 * Copyright 2021 Mike Becker, Olaf Wintermann All rights reserved.
f094a53c1178 adds allocator interface and default implementation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
5 *
f094a53c1178 adds allocator interface and default implementation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
6 * Redistribution and use in source and binary forms, with or without
f094a53c1178 adds allocator interface and default implementation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
7 * modification, are permitted provided that the following conditions are met:
f094a53c1178 adds allocator interface and default implementation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
8 *
f094a53c1178 adds allocator interface and default implementation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
9 * 1. Redistributions of source code must retain the above copyright
f094a53c1178 adds allocator interface and default implementation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
10 * notice, this list of conditions and the following disclaimer.
f094a53c1178 adds allocator interface and default implementation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
11 *
f094a53c1178 adds allocator interface and default implementation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
12 * 2. Redistributions in binary form must reproduce the above copyright
f094a53c1178 adds allocator interface and default implementation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
13 * notice, this list of conditions and the following disclaimer in the
f094a53c1178 adds allocator interface and default implementation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
14 * documentation and/or other materials provided with the distribution.
f094a53c1178 adds allocator interface and default implementation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
15 *
f094a53c1178 adds allocator interface and default implementation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
16 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
f094a53c1178 adds allocator interface and default implementation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
17 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
f094a53c1178 adds allocator interface and default implementation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
18 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
f094a53c1178 adds allocator interface and default implementation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
19 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
f094a53c1178 adds allocator interface and default implementation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
20 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
f094a53c1178 adds allocator interface and default implementation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
21 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
f094a53c1178 adds allocator interface and default implementation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
22 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
f094a53c1178 adds allocator interface and default implementation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
23 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
f094a53c1178 adds allocator interface and default implementation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
24 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
f094a53c1178 adds allocator interface and default implementation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
25 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
f094a53c1178 adds allocator interface and default implementation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
26 * POSSIBILITY OF SUCH DAMAGE.
f094a53c1178 adds allocator interface and default implementation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
27 */
f094a53c1178 adds allocator interface and default implementation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
28
f094a53c1178 adds allocator interface and default implementation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
29 #include "cx/allocator.h"
410
76b76f0f046b add test config and let the test binary return nonzero on test failures
Mike Becker <universe@uap-core.de>
parents: 397
diff changeset
30 #include "test_config.h"
421
aa465fac4ef6 fix reallocate_null test not used and wrong
Mike Becker <universe@uap-core.de>
parents: 419
diff changeset
31 #include <errno.h>
391
f094a53c1178 adds allocator interface and default implementation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
32
f094a53c1178 adds allocator interface and default implementation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
33 void test_default_allocator_available(void) {
397
cfc1193b1e65 removes unnecessary cx_allocator typedef
Mike Becker <universe@uap-core.de>
parents: 396
diff changeset
34 cx_allocator_class *clazz = cxDefaultAllocator->cl;
419
b5d6cb88d05d remove public visibility of default allocator class
Mike Becker <universe@uap-core.de>
parents: 414
diff changeset
35 CU_ASSERT_PTR_NOT_NULL(clazz)
391
f094a53c1178 adds allocator interface and default implementation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
36 }
f094a53c1178 adds allocator interface and default implementation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
37
f094a53c1178 adds allocator interface and default implementation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
38 void test_default_malloc(void) {
397
cfc1193b1e65 removes unnecessary cx_allocator typedef
Mike Becker <universe@uap-core.de>
parents: 396
diff changeset
39 void *test = cxMalloc(cxDefaultAllocator, 16);
391
f094a53c1178 adds allocator interface and default implementation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
40 CU_ASSERT_PTR_NOT_NULL(test);
f094a53c1178 adds allocator interface and default implementation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
41 free(test);
f094a53c1178 adds allocator interface and default implementation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
42 }
f094a53c1178 adds allocator interface and default implementation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
43
f094a53c1178 adds allocator interface and default implementation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
44 void test_default_realloc(void) {
397
cfc1193b1e65 removes unnecessary cx_allocator typedef
Mike Becker <universe@uap-core.de>
parents: 396
diff changeset
45 void *test = calloc(8, 1);
421
aa465fac4ef6 fix reallocate_null test not used and wrong
Mike Becker <universe@uap-core.de>
parents: 419
diff changeset
46 memcpy(test, "Test", 5);
391
f094a53c1178 adds allocator interface and default implementation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
47 test = cxRealloc(cxDefaultAllocator, test, 16);
397
cfc1193b1e65 removes unnecessary cx_allocator typedef
Mike Becker <universe@uap-core.de>
parents: 396
diff changeset
48 CU_ASSERT_PTR_NOT_NULL(test)
391
f094a53c1178 adds allocator interface and default implementation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
49 CU_ASSERT_STRING_EQUAL("Test", test)
f094a53c1178 adds allocator interface and default implementation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
50 free(test);
f094a53c1178 adds allocator interface and default implementation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
51 }
f094a53c1178 adds allocator interface and default implementation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
52
414
81a4c3a63e65 adds cxReallocate()
Mike Becker <universe@uap-core.de>
parents: 410
diff changeset
53 void test_default_reallocate(void) {
81a4c3a63e65 adds cxReallocate()
Mike Becker <universe@uap-core.de>
parents: 410
diff changeset
54 void *test = calloc(8, 1);
421
aa465fac4ef6 fix reallocate_null test not used and wrong
Mike Becker <universe@uap-core.de>
parents: 419
diff changeset
55 memcpy(test, "Test", 5);
414
81a4c3a63e65 adds cxReallocate()
Mike Becker <universe@uap-core.de>
parents: 410
diff changeset
56 int rval = cxReallocate(cxDefaultAllocator, &test, 16);
81a4c3a63e65 adds cxReallocate()
Mike Becker <universe@uap-core.de>
parents: 410
diff changeset
57 CU_ASSERT_EQUAL(rval, 0);
81a4c3a63e65 adds cxReallocate()
Mike Becker <universe@uap-core.de>
parents: 410
diff changeset
58 CU_ASSERT_PTR_NOT_NULL(test)
81a4c3a63e65 adds cxReallocate()
Mike Becker <universe@uap-core.de>
parents: 410
diff changeset
59 CU_ASSERT_STRING_EQUAL("Test", test)
81a4c3a63e65 adds cxReallocate()
Mike Becker <universe@uap-core.de>
parents: 410
diff changeset
60 free(test);
81a4c3a63e65 adds cxReallocate()
Mike Becker <universe@uap-core.de>
parents: 410
diff changeset
61 }
81a4c3a63e65 adds cxReallocate()
Mike Becker <universe@uap-core.de>
parents: 410
diff changeset
62
391
f094a53c1178 adds allocator interface and default implementation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
63 void test_default_calloc(void) {
397
cfc1193b1e65 removes unnecessary cx_allocator typedef
Mike Becker <universe@uap-core.de>
parents: 396
diff changeset
64 void *test = cxCalloc(cxDefaultAllocator, 8, 2);
cfc1193b1e65 removes unnecessary cx_allocator typedef
Mike Becker <universe@uap-core.de>
parents: 396
diff changeset
65 CU_ASSERT_PTR_NOT_NULL(test)
391
f094a53c1178 adds allocator interface and default implementation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
66 free(test);
f094a53c1178 adds allocator interface and default implementation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
67 }
f094a53c1178 adds allocator interface and default implementation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
68
f094a53c1178 adds allocator interface and default implementation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
69 void test_default_free(void) {
397
cfc1193b1e65 removes unnecessary cx_allocator typedef
Mike Becker <universe@uap-core.de>
parents: 396
diff changeset
70 void *test = malloc(16);
392
c195c33de85d add at least a cxFree() call, even if we can't test it
Mike Becker <universe@uap-core.de>
parents: 391
diff changeset
71 cxFree(cxDefaultAllocator, test);
391
f094a53c1178 adds allocator interface and default implementation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
72 CU_PASS("Testing standard free is not possible.")
f094a53c1178 adds allocator interface and default implementation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
73 }
f094a53c1178 adds allocator interface and default implementation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
74
f094a53c1178 adds allocator interface and default implementation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
75 int main() {
f094a53c1178 adds allocator interface and default implementation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
76 CU_pSuite suite = NULL;
f094a53c1178 adds allocator interface and default implementation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
77
f094a53c1178 adds allocator interface and default implementation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
78 if (CUE_SUCCESS != CU_initialize_registry()) {
f094a53c1178 adds allocator interface and default implementation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
79 return CU_get_error();
f094a53c1178 adds allocator interface and default implementation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
80 }
f094a53c1178 adds allocator interface and default implementation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
81
410
76b76f0f046b add test config and let the test binary return nonzero on test failures
Mike Becker <universe@uap-core.de>
parents: 397
diff changeset
82 suite = CU_add_suite("default allocator", NULL, NULL);
391
f094a53c1178 adds allocator interface and default implementation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
83
443
d6d8712e15bc remove error handling from tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 434
diff changeset
84 CU_add_test(suite, "default allocator available", test_default_allocator_available);
d6d8712e15bc remove error handling from tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 434
diff changeset
85 CU_add_test(suite, "test of malloc()", test_default_malloc);
d6d8712e15bc remove error handling from tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 434
diff changeset
86 CU_add_test(suite, "test of realloc()", test_default_realloc);
d6d8712e15bc remove error handling from tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 434
diff changeset
87 CU_add_test(suite, "test of realloc() via cxReallocate", test_default_reallocate);
d6d8712e15bc remove error handling from tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 434
diff changeset
88 CU_add_test(suite, "test of calloc()", test_default_calloc);
d6d8712e15bc remove error handling from tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 434
diff changeset
89 CU_add_test(suite, "test of free()", test_default_free);
391
f094a53c1178 adds allocator interface and default implementation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
90
410
76b76f0f046b add test config and let the test binary return nonzero on test failures
Mike Becker <universe@uap-core.de>
parents: 397
diff changeset
91 CU_basic_set_mode(UCX_CU_BRM);
76b76f0f046b add test config and let the test binary return nonzero on test failures
Mike Becker <universe@uap-core.de>
parents: 397
diff changeset
92
76b76f0f046b add test config and let the test binary return nonzero on test failures
Mike Becker <universe@uap-core.de>
parents: 397
diff changeset
93 int exitcode;
76b76f0f046b add test config and let the test binary return nonzero on test failures
Mike Becker <universe@uap-core.de>
parents: 397
diff changeset
94 if (CU_basic_run_tests()) {
76b76f0f046b add test config and let the test binary return nonzero on test failures
Mike Becker <universe@uap-core.de>
parents: 397
diff changeset
95 exitcode = CU_get_error();
76b76f0f046b add test config and let the test binary return nonzero on test failures
Mike Becker <universe@uap-core.de>
parents: 397
diff changeset
96 } else {
76b76f0f046b add test config and let the test binary return nonzero on test failures
Mike Becker <universe@uap-core.de>
parents: 397
diff changeset
97 exitcode = CU_get_number_of_failures() == 0 ? 0 : 1;
76b76f0f046b add test config and let the test binary return nonzero on test failures
Mike Becker <universe@uap-core.de>
parents: 397
diff changeset
98 }
391
f094a53c1178 adds allocator interface and default implementation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
99 CU_cleanup_registry();
410
76b76f0f046b add test config and let the test binary return nonzero on test failures
Mike Becker <universe@uap-core.de>
parents: 397
diff changeset
100 return exitcode;
391
f094a53c1178 adds allocator interface and default implementation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
101 }

mercurial