tests/test_hash_map.c

Fri, 24 Oct 2025 21:15:14 +0200

author
Mike Becker <universe@uap-core.de>
date
Fri, 24 Oct 2025 21:15:14 +0200
changeset 1443
6986e9ed70f3
parent 1442
244fb8bc3584
permissions
-rw-r--r--

add test coverage for allocation failures in clone-function

785
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
1 /*
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
2 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
3 *
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
4 * Copyright 2023 Mike Becker, Olaf Wintermann All rights reserved.
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
5 *
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
6 * Redistribution and use in source and binary forms, with or without
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
7 * modification, are permitted provided that the following conditions are met:
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
8 *
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
9 * 1. Redistributions of source code must retain the above copyright
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
10 * notice, this list of conditions and the following disclaimer.
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
11 *
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
12 * 2. Redistributions in binary form must reproduce the above copyright
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
13 * notice, this list of conditions and the following disclaimer in the
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
14 * documentation and/or other materials provided with the distribution.
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
15 *
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
16 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
17 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
18 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
19 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
20 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
21 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
22 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
23 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
24 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
bb18daa62d5f migrate map tests - relates to #342
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
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
26 * POSSIBILITY OF SUCH DAMAGE.
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
27 */
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
28
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
29 #include "cx/test.h"
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
30 #include "util_allocator.h"
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
31
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
32 #include "cx/hash_map.h"
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
33
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
34 CX_TEST(test_hash_map_create) {
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
35 CxTestingAllocator talloc;
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
36 cx_testing_allocator_init(&talloc);
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
37 CxAllocator *allocator = &talloc.base;
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
38 CX_TEST_DO {
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
39 CxMap *map = cxHashMapCreate(allocator, 1, 0);
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
40 struct cx_hash_map_s *hmap = (struct cx_hash_map_s *) map;
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
41 CX_TEST_ASSERT(hmap->bucket_count > 0);
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
42 for(size_t i = 0 ; i < hmap->bucket_count ; i++) {
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
43 CX_TEST_ASSERT(hmap->buckets[i] == NULL);
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
44 }
856
6bbbf219251d fix name of collection base member (to avoid base.base)
Mike Becker <universe@uap-core.de>
parents: 855
diff changeset
45 CX_TEST_ASSERT(map->collection.elem_size == 1);
6bbbf219251d fix name of collection base member (to avoid base.base)
Mike Becker <universe@uap-core.de>
parents: 855
diff changeset
46 CX_TEST_ASSERT(map->collection.size == 0);
6bbbf219251d fix name of collection base member (to avoid base.base)
Mike Becker <universe@uap-core.de>
parents: 855
diff changeset
47 CX_TEST_ASSERT(map->collection.allocator == allocator);
6bbbf219251d fix name of collection base member (to avoid base.base)
Mike Becker <universe@uap-core.de>
parents: 855
diff changeset
48 CX_TEST_ASSERT(!map->collection.store_pointer);
6bbbf219251d fix name of collection base member (to avoid base.base)
Mike Becker <universe@uap-core.de>
parents: 855
diff changeset
49 CX_TEST_ASSERT(map->collection.cmpfunc == NULL);
6bbbf219251d fix name of collection base member (to avoid base.base)
Mike Becker <universe@uap-core.de>
parents: 855
diff changeset
50 CX_TEST_ASSERT(map->collection.simple_destructor == NULL);
6bbbf219251d fix name of collection base member (to avoid base.base)
Mike Becker <universe@uap-core.de>
parents: 855
diff changeset
51 CX_TEST_ASSERT(map->collection.advanced_destructor == NULL);
6bbbf219251d fix name of collection base member (to avoid base.base)
Mike Becker <universe@uap-core.de>
parents: 855
diff changeset
52 CX_TEST_ASSERT(map->collection.destructor_data == NULL);
785
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
53
993
b642eca4b956 make names of destroy and free functions consistent - fixes #484
Mike Becker <universe@uap-core.de>
parents: 985
diff changeset
54 cxMapFree(map);
785
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
55 CX_TEST_ASSERT(cx_testing_allocator_verify(&talloc));
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
56 }
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
57 cx_testing_allocator_destroy(&talloc);
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
58 }
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
59
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
60 CX_TEST(test_hash_map_create_store_pointers) {
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
61 CxTestingAllocator talloc;
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
62 cx_testing_allocator_init(&talloc);
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
63 CxAllocator *allocator = &talloc.base;
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
64 CX_TEST_DO {
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
65 CxMap *map = cxHashMapCreate(allocator, CX_STORE_POINTERS, 0);
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
66 struct cx_hash_map_s *hmap = (struct cx_hash_map_s *) map;
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
67 CX_TEST_ASSERT(hmap->bucket_count > 0);
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
68 for (size_t i = 0; i < hmap->bucket_count; i++) {
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
69 CX_TEST_ASSERT(hmap->buckets[i] == NULL);
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
70 }
856
6bbbf219251d fix name of collection base member (to avoid base.base)
Mike Becker <universe@uap-core.de>
parents: 855
diff changeset
71 CX_TEST_ASSERT(map->collection.size == 0);
6bbbf219251d fix name of collection base member (to avoid base.base)
Mike Becker <universe@uap-core.de>
parents: 855
diff changeset
72 CX_TEST_ASSERT(map->collection.allocator == allocator);
6bbbf219251d fix name of collection base member (to avoid base.base)
Mike Becker <universe@uap-core.de>
parents: 855
diff changeset
73 CX_TEST_ASSERT(map->collection.store_pointer);
6bbbf219251d fix name of collection base member (to avoid base.base)
Mike Becker <universe@uap-core.de>
parents: 855
diff changeset
74 CX_TEST_ASSERT(map->collection.elem_size == sizeof(void *));
785
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
75
993
b642eca4b956 make names of destroy and free functions consistent - fixes #484
Mike Becker <universe@uap-core.de>
parents: 985
diff changeset
76 cxMapFree(map);
785
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
77 CX_TEST_ASSERT(cx_testing_allocator_verify(&talloc));
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
78 }
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
79 cx_testing_allocator_destroy(&talloc);
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
80 }
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
81
1341
dc88d2ece7e4 add cxMapEmplace()
Mike Becker <universe@uap-core.de>
parents: 1319
diff changeset
82 CX_TEST(test_hash_map_emplace) {
dc88d2ece7e4 add cxMapEmplace()
Mike Becker <universe@uap-core.de>
parents: 1319
diff changeset
83 CxTestingAllocator talloc;
dc88d2ece7e4 add cxMapEmplace()
Mike Becker <universe@uap-core.de>
parents: 1319
diff changeset
84 cx_testing_allocator_init(&talloc);
dc88d2ece7e4 add cxMapEmplace()
Mike Becker <universe@uap-core.de>
parents: 1319
diff changeset
85 CxAllocator *allocator = &talloc.base;
dc88d2ece7e4 add cxMapEmplace()
Mike Becker <universe@uap-core.de>
parents: 1319
diff changeset
86 CX_TEST_DO {
dc88d2ece7e4 add cxMapEmplace()
Mike Becker <universe@uap-core.de>
parents: 1319
diff changeset
87 CxMap *map = cxHashMapCreate(allocator, 20, 4);
dc88d2ece7e4 add cxMapEmplace()
Mike Becker <universe@uap-core.de>
parents: 1319
diff changeset
88
dc88d2ece7e4 add cxMapEmplace()
Mike Becker <universe@uap-core.de>
parents: 1319
diff changeset
89 char *v = cxMapEmplace(map, "key 1");
dc88d2ece7e4 add cxMapEmplace()
Mike Becker <universe@uap-core.de>
parents: 1319
diff changeset
90 CX_TEST_ASSERT(v != NULL);
dc88d2ece7e4 add cxMapEmplace()
Mike Becker <universe@uap-core.de>
parents: 1319
diff changeset
91 strcpy(v, "val 1");
dc88d2ece7e4 add cxMapEmplace()
Mike Becker <universe@uap-core.de>
parents: 1319
diff changeset
92
dc88d2ece7e4 add cxMapEmplace()
Mike Becker <universe@uap-core.de>
parents: 1319
diff changeset
93 char *tv = cxMapGet(map, "key 1");
dc88d2ece7e4 add cxMapEmplace()
Mike Becker <universe@uap-core.de>
parents: 1319
diff changeset
94 CX_TEST_ASSERT(tv != NULL);
dc88d2ece7e4 add cxMapEmplace()
Mike Becker <universe@uap-core.de>
parents: 1319
diff changeset
95 CX_TEST_ASSERT(0 == strcmp(tv, "val 1"));
dc88d2ece7e4 add cxMapEmplace()
Mike Becker <universe@uap-core.de>
parents: 1319
diff changeset
96
dc88d2ece7e4 add cxMapEmplace()
Mike Becker <universe@uap-core.de>
parents: 1319
diff changeset
97 v = cxMapEmplace(map, "key 1");
dc88d2ece7e4 add cxMapEmplace()
Mike Becker <universe@uap-core.de>
parents: 1319
diff changeset
98 CX_TEST_ASSERT(v != NULL);
dc88d2ece7e4 add cxMapEmplace()
Mike Becker <universe@uap-core.de>
parents: 1319
diff changeset
99 CX_TEST_ASSERT(0 != strcmp(v, "val 1"));
dc88d2ece7e4 add cxMapEmplace()
Mike Becker <universe@uap-core.de>
parents: 1319
diff changeset
100
dc88d2ece7e4 add cxMapEmplace()
Mike Becker <universe@uap-core.de>
parents: 1319
diff changeset
101 tv = cxMapGet(map, "key 1");
dc88d2ece7e4 add cxMapEmplace()
Mike Becker <universe@uap-core.de>
parents: 1319
diff changeset
102 CX_TEST_ASSERT(tv != NULL);
dc88d2ece7e4 add cxMapEmplace()
Mike Becker <universe@uap-core.de>
parents: 1319
diff changeset
103 CX_TEST_ASSERT(0 != strcmp(tv, "val 1"));
dc88d2ece7e4 add cxMapEmplace()
Mike Becker <universe@uap-core.de>
parents: 1319
diff changeset
104
dc88d2ece7e4 add cxMapEmplace()
Mike Becker <universe@uap-core.de>
parents: 1319
diff changeset
105 cxMapFree(map);
dc88d2ece7e4 add cxMapEmplace()
Mike Becker <universe@uap-core.de>
parents: 1319
diff changeset
106 CX_TEST_ASSERT(cx_testing_allocator_verify(&talloc));
dc88d2ece7e4 add cxMapEmplace()
Mike Becker <universe@uap-core.de>
parents: 1319
diff changeset
107 }
dc88d2ece7e4 add cxMapEmplace()
Mike Becker <universe@uap-core.de>
parents: 1319
diff changeset
108 cx_testing_allocator_destroy(&talloc);
dc88d2ece7e4 add cxMapEmplace()
Mike Becker <universe@uap-core.de>
parents: 1319
diff changeset
109 }
dc88d2ece7e4 add cxMapEmplace()
Mike Becker <universe@uap-core.de>
parents: 1319
diff changeset
110
dc88d2ece7e4 add cxMapEmplace()
Mike Becker <universe@uap-core.de>
parents: 1319
diff changeset
111 CX_TEST(test_hash_map_emplace_pointers) {
dc88d2ece7e4 add cxMapEmplace()
Mike Becker <universe@uap-core.de>
parents: 1319
diff changeset
112 CxTestingAllocator talloc;
dc88d2ece7e4 add cxMapEmplace()
Mike Becker <universe@uap-core.de>
parents: 1319
diff changeset
113 cx_testing_allocator_init(&talloc);
dc88d2ece7e4 add cxMapEmplace()
Mike Becker <universe@uap-core.de>
parents: 1319
diff changeset
114 CxAllocator *allocator = &talloc.base;
dc88d2ece7e4 add cxMapEmplace()
Mike Becker <universe@uap-core.de>
parents: 1319
diff changeset
115 CX_TEST_DO {
dc88d2ece7e4 add cxMapEmplace()
Mike Becker <universe@uap-core.de>
parents: 1319
diff changeset
116 CxMap *map = cxHashMapCreate(allocator, CX_STORE_POINTERS, 4);
dc88d2ece7e4 add cxMapEmplace()
Mike Becker <universe@uap-core.de>
parents: 1319
diff changeset
117 cxDefineAdvancedDestructor(map, cxFree, allocator);
dc88d2ece7e4 add cxMapEmplace()
Mike Becker <universe@uap-core.de>
parents: 1319
diff changeset
118
dc88d2ece7e4 add cxMapEmplace()
Mike Becker <universe@uap-core.de>
parents: 1319
diff changeset
119 char *val1 = cxMalloc(allocator, 8);
dc88d2ece7e4 add cxMapEmplace()
Mike Becker <universe@uap-core.de>
parents: 1319
diff changeset
120 strcpy(val1, "val 1");
dc88d2ece7e4 add cxMapEmplace()
Mike Becker <universe@uap-core.de>
parents: 1319
diff changeset
121 char *val2 = cxMalloc(allocator, 8);
dc88d2ece7e4 add cxMapEmplace()
Mike Becker <universe@uap-core.de>
parents: 1319
diff changeset
122 strcpy(val2, "val 2");
dc88d2ece7e4 add cxMapEmplace()
Mike Becker <universe@uap-core.de>
parents: 1319
diff changeset
123
dc88d2ece7e4 add cxMapEmplace()
Mike Becker <universe@uap-core.de>
parents: 1319
diff changeset
124 char **v1 = cxMapEmplace(map, "key 1");
dc88d2ece7e4 add cxMapEmplace()
Mike Becker <universe@uap-core.de>
parents: 1319
diff changeset
125 CX_TEST_ASSERT(v1 != NULL);
dc88d2ece7e4 add cxMapEmplace()
Mike Becker <universe@uap-core.de>
parents: 1319
diff changeset
126 *v1 = val1;
dc88d2ece7e4 add cxMapEmplace()
Mike Becker <universe@uap-core.de>
parents: 1319
diff changeset
127
dc88d2ece7e4 add cxMapEmplace()
Mike Becker <universe@uap-core.de>
parents: 1319
diff changeset
128 char *tv = cxMapGet(map, "key 1");
dc88d2ece7e4 add cxMapEmplace()
Mike Becker <universe@uap-core.de>
parents: 1319
diff changeset
129 CX_TEST_ASSERT(tv != NULL);
dc88d2ece7e4 add cxMapEmplace()
Mike Becker <universe@uap-core.de>
parents: 1319
diff changeset
130 CX_TEST_ASSERT(0 == strcmp(tv, "val 1"));
dc88d2ece7e4 add cxMapEmplace()
Mike Becker <universe@uap-core.de>
parents: 1319
diff changeset
131
dc88d2ece7e4 add cxMapEmplace()
Mike Becker <universe@uap-core.de>
parents: 1319
diff changeset
132 // this will call the destructor of former v1
dc88d2ece7e4 add cxMapEmplace()
Mike Becker <universe@uap-core.de>
parents: 1319
diff changeset
133 char **v2 = cxMapEmplace(map, "key 1");
dc88d2ece7e4 add cxMapEmplace()
Mike Becker <universe@uap-core.de>
parents: 1319
diff changeset
134 CX_TEST_ASSERT(v2 != NULL);
dc88d2ece7e4 add cxMapEmplace()
Mike Becker <universe@uap-core.de>
parents: 1319
diff changeset
135 *v2 = val2;
dc88d2ece7e4 add cxMapEmplace()
Mike Becker <universe@uap-core.de>
parents: 1319
diff changeset
136 tv = cxMapGet(map, "key 1");
dc88d2ece7e4 add cxMapEmplace()
Mike Becker <universe@uap-core.de>
parents: 1319
diff changeset
137 CX_TEST_ASSERT(tv != NULL);
dc88d2ece7e4 add cxMapEmplace()
Mike Becker <universe@uap-core.de>
parents: 1319
diff changeset
138 CX_TEST_ASSERT(0 == strcmp(tv, "val 2"));
dc88d2ece7e4 add cxMapEmplace()
Mike Becker <universe@uap-core.de>
parents: 1319
diff changeset
139
dc88d2ece7e4 add cxMapEmplace()
Mike Becker <universe@uap-core.de>
parents: 1319
diff changeset
140 cxMapFree(map);
dc88d2ece7e4 add cxMapEmplace()
Mike Becker <universe@uap-core.de>
parents: 1319
diff changeset
141 CX_TEST_ASSERT(cx_testing_allocator_verify(&talloc));
dc88d2ece7e4 add cxMapEmplace()
Mike Becker <universe@uap-core.de>
parents: 1319
diff changeset
142 }
dc88d2ece7e4 add cxMapEmplace()
Mike Becker <universe@uap-core.de>
parents: 1319
diff changeset
143 cx_testing_allocator_destroy(&talloc);
dc88d2ece7e4 add cxMapEmplace()
Mike Becker <universe@uap-core.de>
parents: 1319
diff changeset
144 }
dc88d2ece7e4 add cxMapEmplace()
Mike Becker <universe@uap-core.de>
parents: 1319
diff changeset
145
785
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
146 CX_TEST(test_hash_map_rehash) {
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
147 CxTestingAllocator talloc;
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
148 cx_testing_allocator_init(&talloc);
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
149 CxAllocator *allocator = &talloc.base;
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
150 CX_TEST_DO {
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
151 CxMap *map = cxHashMapCreate(allocator, CX_STORE_POINTERS, 7);
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
152
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
153 cxMapPut(map, "key 1", (void *) "val 1");
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
154 cxMapPut(map, "key 2", (void *) "val 2");
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
155 cxMapPut(map, "key 3", (void *) "val 3");
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
156 cxMapPut(map, "foo 4", (void *) "val 4");
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
157 cxMapPut(map, "key 5", (void *) "val 5");
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
158 cxMapPut(map, "key 6", (void *) "val 6");
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
159 cxMapPut(map, "bar 7", (void *) "val 7");
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
160 cxMapPut(map, "key 8", (void *) "val 8");
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
161 cxMapPut(map, "key 9", (void *) "val 9");
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
162 cxMapPut(map, "key 10", (void *) "val 10");
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
163
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
164 CX_TEST_ASSERT(((struct cx_hash_map_s *)map)->bucket_count == 7);
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
165 int result = cxMapRehash(map);
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
166 CX_TEST_ASSERT(result == 0);
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
167 CX_TEST_ASSERT(((struct cx_hash_map_s *)map)->bucket_count == 25);
856
6bbbf219251d fix name of collection base member (to avoid base.base)
Mike Becker <universe@uap-core.de>
parents: 855
diff changeset
168 CX_TEST_ASSERT(map->collection.size == 10);
785
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
169
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
170 CX_TEST_ASSERT(0 == strcmp(cxMapGet(map, "key 1"), "val 1"));
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
171 CX_TEST_ASSERT(0 == strcmp(cxMapGet(map, "key 2"), "val 2"));
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
172 CX_TEST_ASSERT(0 == strcmp(cxMapGet(map, "key 3"), "val 3"));
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
173 CX_TEST_ASSERT(0 == strcmp(cxMapGet(map, "foo 4"), "val 4"));
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
174 CX_TEST_ASSERT(0 == strcmp(cxMapGet(map, "key 5"), "val 5"));
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
175 CX_TEST_ASSERT(0 == strcmp(cxMapGet(map, "key 6"), "val 6"));
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
176 CX_TEST_ASSERT(0 == strcmp(cxMapGet(map, "bar 7"), "val 7"));
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
177 CX_TEST_ASSERT(0 == strcmp(cxMapGet(map, "key 8"), "val 8"));
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
178 CX_TEST_ASSERT(0 == strcmp(cxMapGet(map, "key 9"), "val 9"));
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
179 CX_TEST_ASSERT(0 == strcmp(cxMapGet(map, "key 10"), "val 10"));
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
180
993
b642eca4b956 make names of destroy and free functions consistent - fixes #484
Mike Becker <universe@uap-core.de>
parents: 985
diff changeset
181 cxMapFree(map);
785
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
182 CX_TEST_ASSERT(cx_testing_allocator_verify(&talloc));
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
183 }
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
184 cx_testing_allocator_destroy(&talloc);
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
185 }
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
186
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
187 CX_TEST(test_hash_map_rehash_not_required) {
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
188 CxTestingAllocator talloc;
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
189 cx_testing_allocator_init(&talloc);
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
190 CxAllocator *allocator = &talloc.base;
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
191 CX_TEST_DO {
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
192 CxMap *map = cxHashMapCreate(allocator, CX_STORE_POINTERS, 8);
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
193
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
194 cxMapPut(map, "key 1", (void *) "val 1");
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
195 cxMapPut(map, "key 2", (void *) "val 2");
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
196 cxMapPut(map, "key 3", (void *) "val 3");
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
197 cxMapPut(map, "key 4", (void *) "val 4");
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
198 cxMapPut(map, "key 5", (void *) "val 5");
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
199 cxMapPut(map, "key 6", (void *) "val 6");
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
200
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
201 // 6/8 does not exceed 0.75, therefore the function should not rehash
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
202 int result = cxMapRehash(map);
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
203 CX_TEST_ASSERT(result == 0);
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
204 CX_TEST_ASSERT(((struct cx_hash_map_s *)map)->bucket_count == 8);
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
205
993
b642eca4b956 make names of destroy and free functions consistent - fixes #484
Mike Becker <universe@uap-core.de>
parents: 985
diff changeset
206 cxMapFree(map);
785
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
207 CX_TEST_ASSERT(cx_testing_allocator_verify(&talloc));
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
208 }
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
209 cx_testing_allocator_destroy(&talloc);
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
210 }
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
211
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
212 CX_TEST(test_hash_map_clear) {
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
213 CxTestingAllocator talloc;
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
214 cx_testing_allocator_init(&talloc);
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
215 CxAllocator *allocator = &talloc.base;
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
216 CX_TEST_DO {
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
217 CxMap *map = cxHashMapCreate(allocator, CX_STORE_POINTERS, 0);
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
218
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
219 cxMapPut(map, "key 1", (void *) "val 1");
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
220 cxMapPut(map, "key 2", (void *) "val 2");
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
221 cxMapPut(map, "key 3", (void *) "val 3");
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
222
856
6bbbf219251d fix name of collection base member (to avoid base.base)
Mike Becker <universe@uap-core.de>
parents: 855
diff changeset
223 CX_TEST_ASSERT(map->collection.size == 3);
785
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
224
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
225 cxMapClear(map);
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
226
856
6bbbf219251d fix name of collection base member (to avoid base.base)
Mike Becker <universe@uap-core.de>
parents: 855
diff changeset
227 CX_TEST_ASSERT(map->collection.size == 0);
785
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
228 CX_TEST_ASSERT(cxMapGet(map, "key 1") == NULL);
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
229 CX_TEST_ASSERT(cxMapGet(map, "key 2") == NULL);
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
230 CX_TEST_ASSERT(cxMapGet(map, "key 3") == NULL);
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
231
993
b642eca4b956 make names of destroy and free functions consistent - fixes #484
Mike Becker <universe@uap-core.de>
parents: 985
diff changeset
232 cxMapFree(map);
785
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
233 CX_TEST_ASSERT(cx_testing_allocator_verify(&talloc));
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
234 }
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
235 cx_testing_allocator_destroy(&talloc);
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
236 }
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
237
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
238 CX_TEST(test_hash_map_store_ucx_strings) {
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
239 CxTestingAllocator talloc;
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
240 cx_testing_allocator_init(&talloc);
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
241 CxAllocator *allocator = &talloc.base;
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
242 CX_TEST_DO {
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
243 // create the map
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
244 CxMap *map = cxHashMapCreate(allocator, sizeof(cxstring), 8);
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
245
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
246 // define some strings
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
247 cxstring s1 = CX_STR("this");
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
248 cxstring s2 = CX_STR("is");
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
249 cxstring s3 = CX_STR("a");
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
250 cxstring s4 = CX_STR("test");
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
251 cxstring s5 = CX_STR("setup");
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
252
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
253 // put them into the map
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
254 cxMapPut(map, "s1", &s1);
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
255 cxMapPut(map, "s2", &s2);
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
256 cxMapPut(map, "s3", &s3);
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
257 cxMapPut(map, "s4", &s4);
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
258
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
259 // overwrite a value
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
260 cxMapPut(map, "s1", &s5);
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
261
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
262 // look up a string
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
263 cxstring * s3p = cxMapGet(map, "s3");
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
264 CX_TEST_ASSERT(s3p->length == s3.length);
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
265 CX_TEST_ASSERT(s3p->ptr == s3.ptr);
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
266 CX_TEST_ASSERT(s3p != &s3);
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
267
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
268 // remove a string
994
3603bdf4a78b remove map detach function - fixes #487
Mike Becker <universe@uap-core.de>
parents: 993
diff changeset
269 cxstring ret = {0};
3603bdf4a78b remove map detach function - fixes #487
Mike Becker <universe@uap-core.de>
parents: 993
diff changeset
270 CX_TEST_ASSERT(0 == cxMapRemoveAndGet(map, "s2", &ret));
856
6bbbf219251d fix name of collection base member (to avoid base.base)
Mike Becker <universe@uap-core.de>
parents: 855
diff changeset
271 CX_TEST_ASSERT(map->collection.size == 3);
994
3603bdf4a78b remove map detach function - fixes #487
Mike Becker <universe@uap-core.de>
parents: 993
diff changeset
272 CX_TEST_ASSERT(0 == cx_strcmp(ret, cx_str("is")));
785
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
273
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
274 // iterate
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
275 bool s3found = false, s4found = false, s5found = false;
1115
6db21dee4929 create specialized map iterators - fixes #550
Mike Becker <universe@uap-core.de>
parents: 1114
diff changeset
276 CxMapIterator iter = cxMapIteratorValues(map);
785
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
277 cx_foreach(cxstring*, s, iter) {
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
278 s3found |= s3.ptr == s->ptr;
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
279 s4found |= s4.ptr == s->ptr;
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
280 s5found |= s5.ptr == s->ptr;
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
281 }
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
282 CX_TEST_ASSERT(s3found && s4found && s5found);
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
283
993
b642eca4b956 make names of destroy and free functions consistent - fixes #484
Mike Becker <universe@uap-core.de>
parents: 985
diff changeset
284 cxMapFree(map);
785
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
285 CX_TEST_ASSERT(cx_testing_allocator_verify(&talloc));
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
286 }
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
287 cx_testing_allocator_destroy(&talloc);
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
288 }
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
289
1442
244fb8bc3584 fix hash map not being able to deal with 64-bit hashes
Mike Becker <universe@uap-core.de>
parents: 1439
diff changeset
290 CX_TEST(test_hash_map_integer_keys) {
244fb8bc3584 fix hash map not being able to deal with 64-bit hashes
Mike Becker <universe@uap-core.de>
parents: 1439
diff changeset
291 CxMap *map = cxHashMapCreateSimple(sizeof(cxstring));
244fb8bc3584 fix hash map not being able to deal with 64-bit hashes
Mike Becker <universe@uap-core.de>
parents: 1439
diff changeset
292 CX_TEST_DO {
244fb8bc3584 fix hash map not being able to deal with 64-bit hashes
Mike Becker <universe@uap-core.de>
parents: 1439
diff changeset
293 cxstring s1 = CX_STR("hello");
244fb8bc3584 fix hash map not being able to deal with 64-bit hashes
Mike Becker <universe@uap-core.de>
parents: 1439
diff changeset
294 cxstring s2 = CX_STR("world");
244fb8bc3584 fix hash map not being able to deal with 64-bit hashes
Mike Becker <universe@uap-core.de>
parents: 1439
diff changeset
295
244fb8bc3584 fix hash map not being able to deal with 64-bit hashes
Mike Becker <universe@uap-core.de>
parents: 1439
diff changeset
296 cxMapPut(map, UINT32_C(70875), &s1);
244fb8bc3584 fix hash map not being able to deal with 64-bit hashes
Mike Becker <universe@uap-core.de>
parents: 1439
diff changeset
297 cxMapPut(map, UINT64_C(5785133750), &s2);
244fb8bc3584 fix hash map not being able to deal with 64-bit hashes
Mike Becker <universe@uap-core.de>
parents: 1439
diff changeset
298
244fb8bc3584 fix hash map not being able to deal with 64-bit hashes
Mike Becker <universe@uap-core.de>
parents: 1439
diff changeset
299 CX_TEST_ASSERT(cx_strcmp_p(&s1, cxMapGet(map, UINT32_C(70875))) == 0);
244fb8bc3584 fix hash map not being able to deal with 64-bit hashes
Mike Becker <universe@uap-core.de>
parents: 1439
diff changeset
300 CX_TEST_ASSERT(cx_strcmp_p(&s2, cxMapGet(map, UINT64_C(5785133750))) == 0);
244fb8bc3584 fix hash map not being able to deal with 64-bit hashes
Mike Becker <universe@uap-core.de>
parents: 1439
diff changeset
301 }
244fb8bc3584 fix hash map not being able to deal with 64-bit hashes
Mike Becker <universe@uap-core.de>
parents: 1439
diff changeset
302 cxMapFree(map);
244fb8bc3584 fix hash map not being able to deal with 64-bit hashes
Mike Becker <universe@uap-core.de>
parents: 1439
diff changeset
303 }
244fb8bc3584 fix hash map not being able to deal with 64-bit hashes
Mike Becker <universe@uap-core.de>
parents: 1439
diff changeset
304
785
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
305 CX_TEST(test_hash_map_remove_via_iterator) {
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
306 CxTestingAllocator talloc;
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
307 cx_testing_allocator_init(&talloc);
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
308 CxAllocator *allocator = &talloc.base;
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
309 CX_TEST_DO {
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
310 CxMap *map = cxHashMapCreate(allocator, CX_STORE_POINTERS, 4);
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
311
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
312 cxMapPut(map, "key 1", (void *) "val 1");
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
313 cxMapPut(map, "key 2", (void *) "val 2");
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
314 cxMapPut(map, "key 3", (void *) "val 3");
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
315 cxMapPut(map, "key 4", (void *) "val 4");
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
316 cxMapPut(map, "key 5", (void *) "val 5");
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
317 cxMapPut(map, "key 6", (void *) "val 6");
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
318
1429
6e0c3a8a914a remove the concept of "mutating iterators" - resolves #579
Mike Becker <universe@uap-core.de>
parents: 1388
diff changeset
319 CxMapIterator iter = cxMapIterator(map);
785
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
320 cx_foreach(CxMapEntry*, entry, iter) {
890
54565fd74e74 move all const keywords to the west - fixes #426
Mike Becker <universe@uap-core.de>
parents: 856
diff changeset
321 if (((const char *)entry->key->data)[4] % 2 == 1) cxIteratorFlagRemoval(iter);
785
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
322 }
1387
9bdd053820b7 the elem_count member of an iterator was not updated after removing an element flagged by cxIteratorFlagRemoval() - fixes #728
Mike Becker <universe@uap-core.de>
parents: 1341
diff changeset
323 CX_TEST_ASSERT(cxMapSize(map) == 3);
9bdd053820b7 the elem_count member of an iterator was not updated after removing an element flagged by cxIteratorFlagRemoval() - fixes #728
Mike Becker <universe@uap-core.de>
parents: 1341
diff changeset
324 CX_TEST_ASSERT(iter.elem_count == 3);
856
6bbbf219251d fix name of collection base member (to avoid base.base)
Mike Becker <universe@uap-core.de>
parents: 855
diff changeset
325 CX_TEST_ASSERT(iter.index == map->collection.size);
785
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
326
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
327 CX_TEST_ASSERT(cxMapGet(map, "key 1") == NULL);
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
328 CX_TEST_ASSERT(cxMapGet(map, "key 2") != NULL);
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
329 CX_TEST_ASSERT(cxMapGet(map, "key 3") == NULL);
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
330 CX_TEST_ASSERT(cxMapGet(map, "key 4") != NULL);
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
331 CX_TEST_ASSERT(cxMapGet(map, "key 5") == NULL);
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
332 CX_TEST_ASSERT(cxMapGet(map, "key 6") != NULL);
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
333
993
b642eca4b956 make names of destroy and free functions consistent - fixes #484
Mike Becker <universe@uap-core.de>
parents: 985
diff changeset
334 cxMapFree(map);
785
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
335 CX_TEST_ASSERT(cx_testing_allocator_verify(&talloc));
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
336 }
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
337 cx_testing_allocator_destroy(&talloc);
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
338 }
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
339
1114
ad5eeb256242 fix that overwriting a map element did not call any destructor function
Mike Becker <universe@uap-core.de>
parents: 1111
diff changeset
340 struct test_destr_struct {
ad5eeb256242 fix that overwriting a map element did not call any destructor function
Mike Becker <universe@uap-core.de>
parents: 1111
diff changeset
341 char *str;
ad5eeb256242 fix that overwriting a map element did not call any destructor function
Mike Becker <universe@uap-core.de>
parents: 1111
diff changeset
342 };
ad5eeb256242 fix that overwriting a map element did not call any destructor function
Mike Becker <universe@uap-core.de>
parents: 1111
diff changeset
343
ad5eeb256242 fix that overwriting a map element did not call any destructor function
Mike Becker <universe@uap-core.de>
parents: 1111
diff changeset
344 static void test_simple_destructor(void *d) {
ad5eeb256242 fix that overwriting a map element did not call any destructor function
Mike Becker <universe@uap-core.de>
parents: 1111
diff changeset
345 struct test_destr_struct *data = d;
ad5eeb256242 fix that overwriting a map element did not call any destructor function
Mike Becker <universe@uap-core.de>
parents: 1111
diff changeset
346 strcpy(data->str, "OK");
785
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
347 }
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
348
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
349 static void test_advanced_destructor(
985
68754c7de906 major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents: 926
diff changeset
350 cx_attr_unused void *unused,
1114
ad5eeb256242 fix that overwriting a map element did not call any destructor function
Mike Becker <universe@uap-core.de>
parents: 1111
diff changeset
351 void *d
785
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
352 ) {
1114
ad5eeb256242 fix that overwriting a map element did not call any destructor function
Mike Becker <universe@uap-core.de>
parents: 1111
diff changeset
353 test_simple_destructor(d);
785
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
354 }
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
355
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
356 static CX_TEST_SUBROUTINE(verify_any_destructor, CxMap *map) {
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
357 CxHashKey k1 = cx_hash_key_str("key 1");
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
358 CxHashKey k2 = cx_hash_key_str("key 2");
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
359 CxHashKey k3 = cx_hash_key_str("key 3");
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
360 CxHashKey k4 = cx_hash_key_str("key 4");
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
361 CxHashKey k5 = cx_hash_key_str("key 5");
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
362
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
363 char v1[] = "val 1";
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
364 char v2[] = "val 2";
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
365 char v3[] = "val 3";
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
366 char v4[] = "val 4";
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
367 char v5[] = "val 5";
1114
ad5eeb256242 fix that overwriting a map element did not call any destructor function
Mike Becker <universe@uap-core.de>
parents: 1111
diff changeset
368 char v6[] = "val 6";
ad5eeb256242 fix that overwriting a map element did not call any destructor function
Mike Becker <universe@uap-core.de>
parents: 1111
diff changeset
369 char v7[] = "val 7";
785
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
370
1114
ad5eeb256242 fix that overwriting a map element did not call any destructor function
Mike Becker <universe@uap-core.de>
parents: 1111
diff changeset
371 struct test_destr_struct d1 = {v1};
ad5eeb256242 fix that overwriting a map element did not call any destructor function
Mike Becker <universe@uap-core.de>
parents: 1111
diff changeset
372 struct test_destr_struct d2 = {v2};
ad5eeb256242 fix that overwriting a map element did not call any destructor function
Mike Becker <universe@uap-core.de>
parents: 1111
diff changeset
373 struct test_destr_struct d3 = {v3};
ad5eeb256242 fix that overwriting a map element did not call any destructor function
Mike Becker <universe@uap-core.de>
parents: 1111
diff changeset
374 struct test_destr_struct d4 = {v4};
ad5eeb256242 fix that overwriting a map element did not call any destructor function
Mike Becker <universe@uap-core.de>
parents: 1111
diff changeset
375 struct test_destr_struct d5 = {v5};
ad5eeb256242 fix that overwriting a map element did not call any destructor function
Mike Becker <universe@uap-core.de>
parents: 1111
diff changeset
376 struct test_destr_struct d6 = {v6};
ad5eeb256242 fix that overwriting a map element did not call any destructor function
Mike Becker <universe@uap-core.de>
parents: 1111
diff changeset
377 struct test_destr_struct d7 = {v7};
ad5eeb256242 fix that overwriting a map element did not call any destructor function
Mike Becker <universe@uap-core.de>
parents: 1111
diff changeset
378
ad5eeb256242 fix that overwriting a map element did not call any destructor function
Mike Becker <universe@uap-core.de>
parents: 1111
diff changeset
379 void *v1data = &d1;
ad5eeb256242 fix that overwriting a map element did not call any destructor function
Mike Becker <universe@uap-core.de>
parents: 1111
diff changeset
380 void *v2data = &d2;
ad5eeb256242 fix that overwriting a map element did not call any destructor function
Mike Becker <universe@uap-core.de>
parents: 1111
diff changeset
381 void *v3data = &d3;
ad5eeb256242 fix that overwriting a map element did not call any destructor function
Mike Becker <universe@uap-core.de>
parents: 1111
diff changeset
382 void *v4data = &d4;
ad5eeb256242 fix that overwriting a map element did not call any destructor function
Mike Becker <universe@uap-core.de>
parents: 1111
diff changeset
383 void *v5data = &d5;
ad5eeb256242 fix that overwriting a map element did not call any destructor function
Mike Becker <universe@uap-core.de>
parents: 1111
diff changeset
384 void *v6data = &d6;
ad5eeb256242 fix that overwriting a map element did not call any destructor function
Mike Becker <universe@uap-core.de>
parents: 1111
diff changeset
385 void *v7data = &d7;
ad5eeb256242 fix that overwriting a map element did not call any destructor function
Mike Becker <universe@uap-core.de>
parents: 1111
diff changeset
386
ad5eeb256242 fix that overwriting a map element did not call any destructor function
Mike Becker <universe@uap-core.de>
parents: 1111
diff changeset
387 cxMapPut(map, k1, v1data);
ad5eeb256242 fix that overwriting a map element did not call any destructor function
Mike Becker <universe@uap-core.de>
parents: 1111
diff changeset
388 cxMapPut(map, k2, v2data);
ad5eeb256242 fix that overwriting a map element did not call any destructor function
Mike Becker <universe@uap-core.de>
parents: 1111
diff changeset
389 cxMapPut(map, k3, v3data);
ad5eeb256242 fix that overwriting a map element did not call any destructor function
Mike Becker <universe@uap-core.de>
parents: 1111
diff changeset
390 cxMapPut(map, k4, v4data);
785
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
391
994
3603bdf4a78b remove map detach function - fixes #487
Mike Becker <universe@uap-core.de>
parents: 993
diff changeset
392 CX_TEST_ASSERT(0 == cxMapRemove(map, k2));
1114
ad5eeb256242 fix that overwriting a map element did not call any destructor function
Mike Becker <universe@uap-core.de>
parents: 1111
diff changeset
393 if (map->collection.store_pointer) {
ad5eeb256242 fix that overwriting a map element did not call any destructor function
Mike Becker <universe@uap-core.de>
parents: 1111
diff changeset
394 struct test_destr_struct *r;
ad5eeb256242 fix that overwriting a map element did not call any destructor function
Mike Becker <universe@uap-core.de>
parents: 1111
diff changeset
395 CX_TEST_ASSERT(0 == cxMapRemoveAndGet(map, k3, &r));
ad5eeb256242 fix that overwriting a map element did not call any destructor function
Mike Becker <universe@uap-core.de>
parents: 1111
diff changeset
396 CX_TEST_ASSERT(r == &d3);
ad5eeb256242 fix that overwriting a map element did not call any destructor function
Mike Becker <universe@uap-core.de>
parents: 1111
diff changeset
397 } else {
ad5eeb256242 fix that overwriting a map element did not call any destructor function
Mike Becker <universe@uap-core.de>
parents: 1111
diff changeset
398 struct test_destr_struct r;
ad5eeb256242 fix that overwriting a map element did not call any destructor function
Mike Becker <universe@uap-core.de>
parents: 1111
diff changeset
399 CX_TEST_ASSERT(0 == cxMapRemoveAndGet(map, k3, &r));
ad5eeb256242 fix that overwriting a map element did not call any destructor function
Mike Becker <universe@uap-core.de>
parents: 1111
diff changeset
400 CX_TEST_ASSERT(r.str == v3);
ad5eeb256242 fix that overwriting a map element did not call any destructor function
Mike Becker <universe@uap-core.de>
parents: 1111
diff changeset
401 }
785
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
402
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
403 CX_TEST_ASSERT(0 == strcmp(v1, "val 1"));
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
404 CX_TEST_ASSERT(0 == strcmp(v2, "OK"));
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
405 CX_TEST_ASSERT(0 == strcmp(v3, "val 3"));
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
406 CX_TEST_ASSERT(0 == strcmp(v4, "val 4"));
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
407 CX_TEST_ASSERT(0 == strcmp(v5, "val 5"));
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
408
1114
ad5eeb256242 fix that overwriting a map element did not call any destructor function
Mike Becker <universe@uap-core.de>
parents: 1111
diff changeset
409 // put k5, overwrite k1, put new k3
ad5eeb256242 fix that overwriting a map element did not call any destructor function
Mike Becker <universe@uap-core.de>
parents: 1111
diff changeset
410 cxMapPut(map, k5, v5data);
ad5eeb256242 fix that overwriting a map element did not call any destructor function
Mike Becker <universe@uap-core.de>
parents: 1111
diff changeset
411 cxMapPut(map, k1, v6data);
ad5eeb256242 fix that overwriting a map element did not call any destructor function
Mike Becker <universe@uap-core.de>
parents: 1111
diff changeset
412 cxMapPut(map, k3, v7data);
785
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
413
1114
ad5eeb256242 fix that overwriting a map element did not call any destructor function
Mike Becker <universe@uap-core.de>
parents: 1111
diff changeset
414 // destructor the value behind k1 was called, but for k3 not
ad5eeb256242 fix that overwriting a map element did not call any destructor function
Mike Becker <universe@uap-core.de>
parents: 1111
diff changeset
415 CX_TEST_ASSERT(0 == strcmp(v1, "OK"));
785
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
416 CX_TEST_ASSERT(0 == strcmp(v3, "val 3"));
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
417
1114
ad5eeb256242 fix that overwriting a map element did not call any destructor function
Mike Becker <universe@uap-core.de>
parents: 1111
diff changeset
418 // now remove k1 via key iterator and k5 (val 5) via value iterator
ad5eeb256242 fix that overwriting a map element did not call any destructor function
Mike Becker <universe@uap-core.de>
parents: 1111
diff changeset
419 v1[0] = 'y'; // mark v1 and check that destr is not called for previous val
785
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
420 {
1429
6e0c3a8a914a remove the concept of "mutating iterators" - resolves #579
Mike Becker <universe@uap-core.de>
parents: 1388
diff changeset
421 CxMapIterator iter = cxMapIteratorKeys(map);
1387
9bdd053820b7 the elem_count member of an iterator was not updated after removing an element flagged by cxIteratorFlagRemoval() - fixes #728
Mike Becker <universe@uap-core.de>
parents: 1341
diff changeset
422 CX_TEST_ASSERT(iter.elem_count == 4);
9bdd053820b7 the elem_count member of an iterator was not updated after removing an element flagged by cxIteratorFlagRemoval() - fixes #728
Mike Becker <universe@uap-core.de>
parents: 1341
diff changeset
423 CX_TEST_ASSERT(cxMapSize(map) == 4);
785
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
424 cx_foreach(CxHashKey*, key, iter) {
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
425 if (((char*)key->data)[4] == '1') cxIteratorFlagRemoval(iter);
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
426 }
1387
9bdd053820b7 the elem_count member of an iterator was not updated after removing an element flagged by cxIteratorFlagRemoval() - fixes #728
Mike Becker <universe@uap-core.de>
parents: 1341
diff changeset
427 CX_TEST_ASSERT(iter.elem_count == 3);
9bdd053820b7 the elem_count member of an iterator was not updated after removing an element flagged by cxIteratorFlagRemoval() - fixes #728
Mike Becker <universe@uap-core.de>
parents: 1341
diff changeset
428 CX_TEST_ASSERT(cxMapSize(map) == 3);
785
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
429 }
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
430 {
1429
6e0c3a8a914a remove the concept of "mutating iterators" - resolves #579
Mike Becker <universe@uap-core.de>
parents: 1388
diff changeset
431 CxMapIterator iter = cxMapIteratorValues(map);
1114
ad5eeb256242 fix that overwriting a map element did not call any destructor function
Mike Becker <universe@uap-core.de>
parents: 1111
diff changeset
432 cx_foreach(struct test_destr_struct*, v, iter) {
ad5eeb256242 fix that overwriting a map element did not call any destructor function
Mike Becker <universe@uap-core.de>
parents: 1111
diff changeset
433 if (v->str[4] == '5') cxIteratorFlagRemoval(iter);
785
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
434 }
1387
9bdd053820b7 the elem_count member of an iterator was not updated after removing an element flagged by cxIteratorFlagRemoval() - fixes #728
Mike Becker <universe@uap-core.de>
parents: 1341
diff changeset
435 CX_TEST_ASSERT(iter.elem_count == 2);
9bdd053820b7 the elem_count member of an iterator was not updated after removing an element flagged by cxIteratorFlagRemoval() - fixes #728
Mike Becker <universe@uap-core.de>
parents: 1341
diff changeset
436 CX_TEST_ASSERT(cxMapSize(map) == 2);
785
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
437 }
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
438
1114
ad5eeb256242 fix that overwriting a map element did not call any destructor function
Mike Becker <universe@uap-core.de>
parents: 1111
diff changeset
439 CX_TEST_ASSERT(0 == strcmp(v1, "yK"));
785
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
440 CX_TEST_ASSERT(0 == strcmp(v2, "OK"));
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
441 CX_TEST_ASSERT(0 == strcmp(v3, "val 3"));
1114
ad5eeb256242 fix that overwriting a map element did not call any destructor function
Mike Becker <universe@uap-core.de>
parents: 1111
diff changeset
442 CX_TEST_ASSERT(0 == strcmp(v4, "val 4"));
785
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
443 CX_TEST_ASSERT(0 == strcmp(v5, "OK"));
1114
ad5eeb256242 fix that overwriting a map element did not call any destructor function
Mike Becker <universe@uap-core.de>
parents: 1111
diff changeset
444 CX_TEST_ASSERT(0 == strcmp(v6, "OK"));
ad5eeb256242 fix that overwriting a map element did not call any destructor function
Mike Becker <universe@uap-core.de>
parents: 1111
diff changeset
445 CX_TEST_ASSERT(0 == strcmp(v7, "val 7"));
785
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
446
1114
ad5eeb256242 fix that overwriting a map element did not call any destructor function
Mike Becker <universe@uap-core.de>
parents: 1111
diff changeset
447 // mark the already destroyed items
ad5eeb256242 fix that overwriting a map element did not call any destructor function
Mike Becker <universe@uap-core.de>
parents: 1111
diff changeset
448 // and check that they are not destroyed again
785
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
449 v1[0] = v2[0] = v4[0] = v5[0] = 'c';
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
450
993
b642eca4b956 make names of destroy and free functions consistent - fixes #484
Mike Becker <universe@uap-core.de>
parents: 985
diff changeset
451 cxMapFree(map);
785
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
452
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
453 CX_TEST_ASSERT(0 == strcmp(v1, "cK"));
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
454 CX_TEST_ASSERT(0 == strcmp(v2, "cK"));
1114
ad5eeb256242 fix that overwriting a map element did not call any destructor function
Mike Becker <universe@uap-core.de>
parents: 1111
diff changeset
455 CX_TEST_ASSERT(0 == strcmp(v3, "val 3"));
ad5eeb256242 fix that overwriting a map element did not call any destructor function
Mike Becker <universe@uap-core.de>
parents: 1111
diff changeset
456 CX_TEST_ASSERT(0 == strcmp(v4, "OK"));
785
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
457 CX_TEST_ASSERT(0 == strcmp(v5, "cK"));
1114
ad5eeb256242 fix that overwriting a map element did not call any destructor function
Mike Becker <universe@uap-core.de>
parents: 1111
diff changeset
458 CX_TEST_ASSERT(0 == strcmp(v6, "OK"));
ad5eeb256242 fix that overwriting a map element did not call any destructor function
Mike Becker <universe@uap-core.de>
parents: 1111
diff changeset
459 CX_TEST_ASSERT(0 == strcmp(v7, "OK"));
785
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
460 }
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
461
1114
ad5eeb256242 fix that overwriting a map element did not call any destructor function
Mike Becker <universe@uap-core.de>
parents: 1111
diff changeset
462 CX_TEST(test_hash_map_simple_destructor_objects) {
ad5eeb256242 fix that overwriting a map element did not call any destructor function
Mike Becker <universe@uap-core.de>
parents: 1111
diff changeset
463 CxTestingAllocator talloc;
ad5eeb256242 fix that overwriting a map element did not call any destructor function
Mike Becker <universe@uap-core.de>
parents: 1111
diff changeset
464 cx_testing_allocator_init(&talloc);
ad5eeb256242 fix that overwriting a map element did not call any destructor function
Mike Becker <universe@uap-core.de>
parents: 1111
diff changeset
465 CxAllocator *allocator = &talloc.base;
ad5eeb256242 fix that overwriting a map element did not call any destructor function
Mike Becker <universe@uap-core.de>
parents: 1111
diff changeset
466 CX_TEST_DO {
ad5eeb256242 fix that overwriting a map element did not call any destructor function
Mike Becker <universe@uap-core.de>
parents: 1111
diff changeset
467 CxMap *map = cxHashMapCreate(allocator,
ad5eeb256242 fix that overwriting a map element did not call any destructor function
Mike Becker <universe@uap-core.de>
parents: 1111
diff changeset
468 sizeof(struct test_destr_struct), 0);
ad5eeb256242 fix that overwriting a map element did not call any destructor function
Mike Becker <universe@uap-core.de>
parents: 1111
diff changeset
469 map->collection.simple_destructor = test_simple_destructor;
ad5eeb256242 fix that overwriting a map element did not call any destructor function
Mike Becker <universe@uap-core.de>
parents: 1111
diff changeset
470 CX_TEST_CALL_SUBROUTINE(verify_any_destructor, map);
ad5eeb256242 fix that overwriting a map element did not call any destructor function
Mike Becker <universe@uap-core.de>
parents: 1111
diff changeset
471 CX_TEST_ASSERT(cx_testing_allocator_verify(&talloc));
ad5eeb256242 fix that overwriting a map element did not call any destructor function
Mike Becker <universe@uap-core.de>
parents: 1111
diff changeset
472 }
ad5eeb256242 fix that overwriting a map element did not call any destructor function
Mike Becker <universe@uap-core.de>
parents: 1111
diff changeset
473 cx_testing_allocator_destroy(&talloc);
ad5eeb256242 fix that overwriting a map element did not call any destructor function
Mike Becker <universe@uap-core.de>
parents: 1111
diff changeset
474 }
ad5eeb256242 fix that overwriting a map element did not call any destructor function
Mike Becker <universe@uap-core.de>
parents: 1111
diff changeset
475
ad5eeb256242 fix that overwriting a map element did not call any destructor function
Mike Becker <universe@uap-core.de>
parents: 1111
diff changeset
476 CX_TEST(test_hash_map_advanced_destructor_objects) {
ad5eeb256242 fix that overwriting a map element did not call any destructor function
Mike Becker <universe@uap-core.de>
parents: 1111
diff changeset
477 CxTestingAllocator talloc;
ad5eeb256242 fix that overwriting a map element did not call any destructor function
Mike Becker <universe@uap-core.de>
parents: 1111
diff changeset
478 cx_testing_allocator_init(&talloc);
ad5eeb256242 fix that overwriting a map element did not call any destructor function
Mike Becker <universe@uap-core.de>
parents: 1111
diff changeset
479 CxAllocator *allocator = &talloc.base;
ad5eeb256242 fix that overwriting a map element did not call any destructor function
Mike Becker <universe@uap-core.de>
parents: 1111
diff changeset
480 CX_TEST_DO {
ad5eeb256242 fix that overwriting a map element did not call any destructor function
Mike Becker <universe@uap-core.de>
parents: 1111
diff changeset
481 CxMap *map = cxHashMapCreate(allocator,
ad5eeb256242 fix that overwriting a map element did not call any destructor function
Mike Becker <universe@uap-core.de>
parents: 1111
diff changeset
482 sizeof(struct test_destr_struct), 0);
ad5eeb256242 fix that overwriting a map element did not call any destructor function
Mike Becker <universe@uap-core.de>
parents: 1111
diff changeset
483 map->collection.advanced_destructor = test_advanced_destructor;
ad5eeb256242 fix that overwriting a map element did not call any destructor function
Mike Becker <universe@uap-core.de>
parents: 1111
diff changeset
484 CX_TEST_CALL_SUBROUTINE(verify_any_destructor, map);
ad5eeb256242 fix that overwriting a map element did not call any destructor function
Mike Becker <universe@uap-core.de>
parents: 1111
diff changeset
485 CX_TEST_ASSERT(cx_testing_allocator_verify(&talloc));
ad5eeb256242 fix that overwriting a map element did not call any destructor function
Mike Becker <universe@uap-core.de>
parents: 1111
diff changeset
486 }
ad5eeb256242 fix that overwriting a map element did not call any destructor function
Mike Becker <universe@uap-core.de>
parents: 1111
diff changeset
487 cx_testing_allocator_destroy(&talloc);
ad5eeb256242 fix that overwriting a map element did not call any destructor function
Mike Becker <universe@uap-core.de>
parents: 1111
diff changeset
488 }
ad5eeb256242 fix that overwriting a map element did not call any destructor function
Mike Becker <universe@uap-core.de>
parents: 1111
diff changeset
489
ad5eeb256242 fix that overwriting a map element did not call any destructor function
Mike Becker <universe@uap-core.de>
parents: 1111
diff changeset
490 CX_TEST(test_hash_map_simple_destructor_pointers) {
785
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
491 CxTestingAllocator talloc;
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
492 cx_testing_allocator_init(&talloc);
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
493 CxAllocator *allocator = &talloc.base;
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
494 CX_TEST_DO {
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
495 CxMap *map = cxHashMapCreate(allocator, CX_STORE_POINTERS, 0);
856
6bbbf219251d fix name of collection base member (to avoid base.base)
Mike Becker <universe@uap-core.de>
parents: 855
diff changeset
496 map->collection.simple_destructor = test_simple_destructor;
785
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
497 CX_TEST_CALL_SUBROUTINE(verify_any_destructor, map);
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
498 CX_TEST_ASSERT(cx_testing_allocator_verify(&talloc));
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
499 }
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
500 cx_testing_allocator_destroy(&talloc);
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
501 }
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
502
1114
ad5eeb256242 fix that overwriting a map element did not call any destructor function
Mike Becker <universe@uap-core.de>
parents: 1111
diff changeset
503 CX_TEST(test_hash_map_advanced_destructor_pointers) {
785
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
504 CxTestingAllocator talloc;
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
505 cx_testing_allocator_init(&talloc);
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
506 CxAllocator *allocator = &talloc.base;
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
507 CX_TEST_DO {
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
508 CxMap *map = cxHashMapCreate(allocator, CX_STORE_POINTERS, 0);
856
6bbbf219251d fix name of collection base member (to avoid base.base)
Mike Becker <universe@uap-core.de>
parents: 855
diff changeset
509 map->collection.advanced_destructor = test_advanced_destructor;
785
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
510 CX_TEST_CALL_SUBROUTINE(verify_any_destructor, map);
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
511 CX_TEST_ASSERT(cx_testing_allocator_verify(&talloc));
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
512 }
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
513 cx_testing_allocator_destroy(&talloc);
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
514 }
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
515
1443
6986e9ed70f3 add test coverage for allocation failures in clone-function
Mike Becker <universe@uap-core.de>
parents: 1442
diff changeset
516 static unsigned test_hash_map_clone_func_max_clones;
1439
8e7fe85febc0 add tests for cxMapClone() - relates to #743
Mike Becker <universe@uap-core.de>
parents: 1429
diff changeset
517 static void *test_hash_map_clone_func(void *dst, const void *src,
8e7fe85febc0 add tests for cxMapClone() - relates to #743
Mike Becker <universe@uap-core.de>
parents: 1429
diff changeset
518 const CxAllocator *al, void *data) {
1443
6986e9ed70f3 add test coverage for allocation failures in clone-function
Mike Becker <universe@uap-core.de>
parents: 1442
diff changeset
519 if (test_hash_map_clone_func_max_clones == 0) return NULL;
6986e9ed70f3 add test coverage for allocation failures in clone-function
Mike Becker <universe@uap-core.de>
parents: 1442
diff changeset
520 test_hash_map_clone_func_max_clones--;
1439
8e7fe85febc0 add tests for cxMapClone() - relates to #743
Mike Becker <universe@uap-core.de>
parents: 1429
diff changeset
521 if (dst == NULL) {
8e7fe85febc0 add tests for cxMapClone() - relates to #743
Mike Becker <universe@uap-core.de>
parents: 1429
diff changeset
522 dst = cxMalloc(al, sizeof(int));
8e7fe85febc0 add tests for cxMapClone() - relates to #743
Mike Becker <universe@uap-core.de>
parents: 1429
diff changeset
523 }
8e7fe85febc0 add tests for cxMapClone() - relates to #743
Mike Becker <universe@uap-core.de>
parents: 1429
diff changeset
524 *((int*)dst) = *((int*)src) + *((int*)data);
8e7fe85febc0 add tests for cxMapClone() - relates to #743
Mike Becker <universe@uap-core.de>
parents: 1429
diff changeset
525 return dst;
8e7fe85febc0 add tests for cxMapClone() - relates to #743
Mike Becker <universe@uap-core.de>
parents: 1429
diff changeset
526 }
8e7fe85febc0 add tests for cxMapClone() - relates to #743
Mike Becker <universe@uap-core.de>
parents: 1429
diff changeset
527
8e7fe85febc0 add tests for cxMapClone() - relates to #743
Mike Becker <universe@uap-core.de>
parents: 1429
diff changeset
528 CX_TEST(test_hash_map_clone) {
8e7fe85febc0 add tests for cxMapClone() - relates to #743
Mike Becker <universe@uap-core.de>
parents: 1429
diff changeset
529 CxMap *dst = cxHashMapCreateSimple(sizeof(int));
8e7fe85febc0 add tests for cxMapClone() - relates to #743
Mike Becker <universe@uap-core.de>
parents: 1429
diff changeset
530 CxMap *src = cxHashMapCreateSimple(sizeof(int));
8e7fe85febc0 add tests for cxMapClone() - relates to #743
Mike Becker <universe@uap-core.de>
parents: 1429
diff changeset
531 const char *exist_keys[] = {"k1", "k2", "k3"};
8e7fe85febc0 add tests for cxMapClone() - relates to #743
Mike Becker <universe@uap-core.de>
parents: 1429
diff changeset
532 int exists[] = {1, 3, 4};
8e7fe85febc0 add tests for cxMapClone() - relates to #743
Mike Becker <universe@uap-core.de>
parents: 1429
diff changeset
533 const char *source_keys[] = {"k4", "k2", "k5"};
8e7fe85febc0 add tests for cxMapClone() - relates to #743
Mike Becker <universe@uap-core.de>
parents: 1429
diff changeset
534 int source[] = {7, 9, 15};
8e7fe85febc0 add tests for cxMapClone() - relates to #743
Mike Becker <universe@uap-core.de>
parents: 1429
diff changeset
535 for (unsigned int i = 0 ; i < 3 ; i++) {
8e7fe85febc0 add tests for cxMapClone() - relates to #743
Mike Becker <universe@uap-core.de>
parents: 1429
diff changeset
536 cxMapPut(dst, exist_keys[i], &exists[i]);
8e7fe85febc0 add tests for cxMapClone() - relates to #743
Mike Becker <universe@uap-core.de>
parents: 1429
diff changeset
537 cxMapPut(src, source_keys[i], &source[i]);
8e7fe85febc0 add tests for cxMapClone() - relates to #743
Mike Becker <universe@uap-core.de>
parents: 1429
diff changeset
538 }
8e7fe85febc0 add tests for cxMapClone() - relates to #743
Mike Becker <universe@uap-core.de>
parents: 1429
diff changeset
539 CX_TEST_DO {
8e7fe85febc0 add tests for cxMapClone() - relates to #743
Mike Becker <universe@uap-core.de>
parents: 1429
diff changeset
540 int c = 4;
1443
6986e9ed70f3 add test coverage for allocation failures in clone-function
Mike Becker <universe@uap-core.de>
parents: 1442
diff changeset
541 test_hash_map_clone_func_max_clones = 100; // no limit
1439
8e7fe85febc0 add tests for cxMapClone() - relates to #743
Mike Becker <universe@uap-core.de>
parents: 1429
diff changeset
542 size_t cloned = cxMapClone(dst, src, test_hash_map_clone_func, NULL, &c);
8e7fe85febc0 add tests for cxMapClone() - relates to #743
Mike Becker <universe@uap-core.de>
parents: 1429
diff changeset
543 CX_TEST_ASSERT(cloned == 3);
8e7fe85febc0 add tests for cxMapClone() - relates to #743
Mike Becker <universe@uap-core.de>
parents: 1429
diff changeset
544 CX_TEST_ASSERT(cxMapSize(dst) == 5);
8e7fe85febc0 add tests for cxMapClone() - relates to #743
Mike Becker <universe@uap-core.de>
parents: 1429
diff changeset
545 CX_TEST_ASSERT(*((int*)cxMapGet(dst, "k1")) == 1);
8e7fe85febc0 add tests for cxMapClone() - relates to #743
Mike Becker <universe@uap-core.de>
parents: 1429
diff changeset
546 CX_TEST_ASSERT(*((int*)cxMapGet(dst, "k2")) == 13);
8e7fe85febc0 add tests for cxMapClone() - relates to #743
Mike Becker <universe@uap-core.de>
parents: 1429
diff changeset
547 CX_TEST_ASSERT(*((int*)cxMapGet(dst, "k3")) == 4);
8e7fe85febc0 add tests for cxMapClone() - relates to #743
Mike Becker <universe@uap-core.de>
parents: 1429
diff changeset
548 CX_TEST_ASSERT(*((int*)cxMapGet(dst, "k4")) == 11);
8e7fe85febc0 add tests for cxMapClone() - relates to #743
Mike Becker <universe@uap-core.de>
parents: 1429
diff changeset
549 CX_TEST_ASSERT(*((int*)cxMapGet(dst, "k5")) == 19);
8e7fe85febc0 add tests for cxMapClone() - relates to #743
Mike Becker <universe@uap-core.de>
parents: 1429
diff changeset
550 CX_TEST_ASSERT(cxMapSize(src) == 3);
8e7fe85febc0 add tests for cxMapClone() - relates to #743
Mike Becker <universe@uap-core.de>
parents: 1429
diff changeset
551 CX_TEST_ASSERT(*((int*)cxMapGet(src, "k4")) == 7);
8e7fe85febc0 add tests for cxMapClone() - relates to #743
Mike Becker <universe@uap-core.de>
parents: 1429
diff changeset
552 CX_TEST_ASSERT(*((int*)cxMapGet(src, "k2")) == 9);
8e7fe85febc0 add tests for cxMapClone() - relates to #743
Mike Becker <universe@uap-core.de>
parents: 1429
diff changeset
553 CX_TEST_ASSERT(*((int*)cxMapGet(src, "k5")) == 15);
8e7fe85febc0 add tests for cxMapClone() - relates to #743
Mike Becker <universe@uap-core.de>
parents: 1429
diff changeset
554 }
8e7fe85febc0 add tests for cxMapClone() - relates to #743
Mike Becker <universe@uap-core.de>
parents: 1429
diff changeset
555 cxMapFree(dst);
8e7fe85febc0 add tests for cxMapClone() - relates to #743
Mike Becker <universe@uap-core.de>
parents: 1429
diff changeset
556 cxMapFree(src);
8e7fe85febc0 add tests for cxMapClone() - relates to #743
Mike Becker <universe@uap-core.de>
parents: 1429
diff changeset
557 }
8e7fe85febc0 add tests for cxMapClone() - relates to #743
Mike Becker <universe@uap-core.de>
parents: 1429
diff changeset
558
1443
6986e9ed70f3 add test coverage for allocation failures in clone-function
Mike Becker <universe@uap-core.de>
parents: 1442
diff changeset
559 CX_TEST(test_hash_map_clone_alloc_fail) {
6986e9ed70f3 add test coverage for allocation failures in clone-function
Mike Becker <universe@uap-core.de>
parents: 1442
diff changeset
560 CxMap *dst = cxHashMapCreateSimple(sizeof(int));
6986e9ed70f3 add test coverage for allocation failures in clone-function
Mike Becker <universe@uap-core.de>
parents: 1442
diff changeset
561 CxMap *src = cxHashMapCreateSimple(sizeof(int));
6986e9ed70f3 add test coverage for allocation failures in clone-function
Mike Becker <universe@uap-core.de>
parents: 1442
diff changeset
562 const char *exist_keys[] = {"k1", "k2", "k3"};
6986e9ed70f3 add test coverage for allocation failures in clone-function
Mike Becker <universe@uap-core.de>
parents: 1442
diff changeset
563 int exists[] = {1, 3, 4};
6986e9ed70f3 add test coverage for allocation failures in clone-function
Mike Becker <universe@uap-core.de>
parents: 1442
diff changeset
564 const char *source_keys[] = {"k4", "k2", "k5"};
6986e9ed70f3 add test coverage for allocation failures in clone-function
Mike Becker <universe@uap-core.de>
parents: 1442
diff changeset
565 int source[] = {7, 9, 15};
6986e9ed70f3 add test coverage for allocation failures in clone-function
Mike Becker <universe@uap-core.de>
parents: 1442
diff changeset
566 for (unsigned int i = 0 ; i < 3 ; i++) {
6986e9ed70f3 add test coverage for allocation failures in clone-function
Mike Becker <universe@uap-core.de>
parents: 1442
diff changeset
567 cxMapPut(dst, exist_keys[i], &exists[i]);
6986e9ed70f3 add test coverage for allocation failures in clone-function
Mike Becker <universe@uap-core.de>
parents: 1442
diff changeset
568 cxMapPut(src, source_keys[i], &source[i]);
6986e9ed70f3 add test coverage for allocation failures in clone-function
Mike Becker <universe@uap-core.de>
parents: 1442
diff changeset
569 }
6986e9ed70f3 add test coverage for allocation failures in clone-function
Mike Becker <universe@uap-core.de>
parents: 1442
diff changeset
570 CX_TEST_DO {
6986e9ed70f3 add test coverage for allocation failures in clone-function
Mike Becker <universe@uap-core.de>
parents: 1442
diff changeset
571 int c = 4;
6986e9ed70f3 add test coverage for allocation failures in clone-function
Mike Becker <universe@uap-core.de>
parents: 1442
diff changeset
572 test_hash_map_clone_func_max_clones = 2;
6986e9ed70f3 add test coverage for allocation failures in clone-function
Mike Becker <universe@uap-core.de>
parents: 1442
diff changeset
573 size_t cloned = cxMapClone(dst, src, test_hash_map_clone_func, NULL, &c);
6986e9ed70f3 add test coverage for allocation failures in clone-function
Mike Becker <universe@uap-core.de>
parents: 1442
diff changeset
574 CX_TEST_ASSERT(cloned == 2);
6986e9ed70f3 add test coverage for allocation failures in clone-function
Mike Becker <universe@uap-core.de>
parents: 1442
diff changeset
575 CX_TEST_ASSERT(cxMapSize(dst) == 4);
6986e9ed70f3 add test coverage for allocation failures in clone-function
Mike Becker <universe@uap-core.de>
parents: 1442
diff changeset
576 CX_TEST_ASSERT(*((int*)cxMapGet(dst, "k1")) == 1);
6986e9ed70f3 add test coverage for allocation failures in clone-function
Mike Becker <universe@uap-core.de>
parents: 1442
diff changeset
577 CX_TEST_ASSERT(*((int*)cxMapGet(dst, "k2")) == 13);
6986e9ed70f3 add test coverage for allocation failures in clone-function
Mike Becker <universe@uap-core.de>
parents: 1442
diff changeset
578 CX_TEST_ASSERT(*((int*)cxMapGet(dst, "k3")) == 4);
6986e9ed70f3 add test coverage for allocation failures in clone-function
Mike Becker <universe@uap-core.de>
parents: 1442
diff changeset
579 // the concrete element which is affected might change when the hash function changes
6986e9ed70f3 add test coverage for allocation failures in clone-function
Mike Becker <universe@uap-core.de>
parents: 1442
diff changeset
580 CX_TEST_ASSERT(cxMapGet(dst, "k4") == NULL);
6986e9ed70f3 add test coverage for allocation failures in clone-function
Mike Becker <universe@uap-core.de>
parents: 1442
diff changeset
581 CX_TEST_ASSERT(*((int*)cxMapGet(dst, "k5")) == 19);
6986e9ed70f3 add test coverage for allocation failures in clone-function
Mike Becker <universe@uap-core.de>
parents: 1442
diff changeset
582 CX_TEST_ASSERT(cxMapSize(src) == 3);
6986e9ed70f3 add test coverage for allocation failures in clone-function
Mike Becker <universe@uap-core.de>
parents: 1442
diff changeset
583 CX_TEST_ASSERT(*((int*)cxMapGet(src, "k4")) == 7);
6986e9ed70f3 add test coverage for allocation failures in clone-function
Mike Becker <universe@uap-core.de>
parents: 1442
diff changeset
584 CX_TEST_ASSERT(*((int*)cxMapGet(src, "k2")) == 9);
6986e9ed70f3 add test coverage for allocation failures in clone-function
Mike Becker <universe@uap-core.de>
parents: 1442
diff changeset
585 CX_TEST_ASSERT(*((int*)cxMapGet(src, "k5")) == 15);
6986e9ed70f3 add test coverage for allocation failures in clone-function
Mike Becker <universe@uap-core.de>
parents: 1442
diff changeset
586 }
6986e9ed70f3 add test coverage for allocation failures in clone-function
Mike Becker <universe@uap-core.de>
parents: 1442
diff changeset
587 cxMapFree(dst);
6986e9ed70f3 add test coverage for allocation failures in clone-function
Mike Becker <universe@uap-core.de>
parents: 1442
diff changeset
588 cxMapFree(src);
6986e9ed70f3 add test coverage for allocation failures in clone-function
Mike Becker <universe@uap-core.de>
parents: 1442
diff changeset
589 }
6986e9ed70f3 add test coverage for allocation failures in clone-function
Mike Becker <universe@uap-core.de>
parents: 1442
diff changeset
590
1439
8e7fe85febc0 add tests for cxMapClone() - relates to #743
Mike Becker <universe@uap-core.de>
parents: 1429
diff changeset
591 CX_TEST(test_hash_map_clone_ptr) {
8e7fe85febc0 add tests for cxMapClone() - relates to #743
Mike Becker <universe@uap-core.de>
parents: 1429
diff changeset
592 CxTestingAllocator talloc;
8e7fe85febc0 add tests for cxMapClone() - relates to #743
Mike Becker <universe@uap-core.de>
parents: 1429
diff changeset
593 cx_testing_allocator_init(&talloc);
8e7fe85febc0 add tests for cxMapClone() - relates to #743
Mike Becker <universe@uap-core.de>
parents: 1429
diff changeset
594 CxAllocator *allocator = &talloc.base;
8e7fe85febc0 add tests for cxMapClone() - relates to #743
Mike Becker <universe@uap-core.de>
parents: 1429
diff changeset
595 CxMap *dst = cxHashMapCreateSimple(CX_STORE_POINTERS);
8e7fe85febc0 add tests for cxMapClone() - relates to #743
Mike Becker <universe@uap-core.de>
parents: 1429
diff changeset
596 cxDefineAdvancedDestructor(dst, cxFree, allocator);
8e7fe85febc0 add tests for cxMapClone() - relates to #743
Mike Becker <universe@uap-core.de>
parents: 1429
diff changeset
597 CxMap *src = cxHashMapCreateSimple(CX_STORE_POINTERS);
8e7fe85febc0 add tests for cxMapClone() - relates to #743
Mike Becker <universe@uap-core.de>
parents: 1429
diff changeset
598 const char *exist_keys[] = {"k1", "k2", "k3"};
8e7fe85febc0 add tests for cxMapClone() - relates to #743
Mike Becker <universe@uap-core.de>
parents: 1429
diff changeset
599 int exists[] = {1, 3, 4};
8e7fe85febc0 add tests for cxMapClone() - relates to #743
Mike Becker <universe@uap-core.de>
parents: 1429
diff changeset
600 const char *source_keys[] = {"k4", "k2", "k5"};
8e7fe85febc0 add tests for cxMapClone() - relates to #743
Mike Becker <universe@uap-core.de>
parents: 1429
diff changeset
601 int source[] = {7, 9, 15};
8e7fe85febc0 add tests for cxMapClone() - relates to #743
Mike Becker <universe@uap-core.de>
parents: 1429
diff changeset
602 for (unsigned int i = 0 ; i < 3 ; i++) {
8e7fe85febc0 add tests for cxMapClone() - relates to #743
Mike Becker <universe@uap-core.de>
parents: 1429
diff changeset
603 int *y = cxMalloc(allocator, sizeof(int));
8e7fe85febc0 add tests for cxMapClone() - relates to #743
Mike Becker <universe@uap-core.de>
parents: 1429
diff changeset
604 *y = exists[i];
8e7fe85febc0 add tests for cxMapClone() - relates to #743
Mike Becker <universe@uap-core.de>
parents: 1429
diff changeset
605 cxMapPut(dst, exist_keys[i], y);
8e7fe85febc0 add tests for cxMapClone() - relates to #743
Mike Becker <universe@uap-core.de>
parents: 1429
diff changeset
606 cxMapPut(src, source_keys[i], &source[i]);
8e7fe85febc0 add tests for cxMapClone() - relates to #743
Mike Becker <universe@uap-core.de>
parents: 1429
diff changeset
607 }
8e7fe85febc0 add tests for cxMapClone() - relates to #743
Mike Becker <universe@uap-core.de>
parents: 1429
diff changeset
608 CX_TEST_DO {
8e7fe85febc0 add tests for cxMapClone() - relates to #743
Mike Becker <universe@uap-core.de>
parents: 1429
diff changeset
609 int c = 4;
1443
6986e9ed70f3 add test coverage for allocation failures in clone-function
Mike Becker <universe@uap-core.de>
parents: 1442
diff changeset
610 test_hash_map_clone_func_max_clones = 100; // no limit
1439
8e7fe85febc0 add tests for cxMapClone() - relates to #743
Mike Becker <universe@uap-core.de>
parents: 1429
diff changeset
611 size_t cloned = cxMapClone(dst, src, test_hash_map_clone_func, allocator, &c);
8e7fe85febc0 add tests for cxMapClone() - relates to #743
Mike Becker <universe@uap-core.de>
parents: 1429
diff changeset
612 CX_TEST_ASSERT(cloned == 3);
8e7fe85febc0 add tests for cxMapClone() - relates to #743
Mike Becker <universe@uap-core.de>
parents: 1429
diff changeset
613 CX_TEST_ASSERT(cxMapSize(dst) == 5);
8e7fe85febc0 add tests for cxMapClone() - relates to #743
Mike Becker <universe@uap-core.de>
parents: 1429
diff changeset
614 CX_TEST_ASSERT(*((int*)cxMapGet(dst, "k1")) == 1);
8e7fe85febc0 add tests for cxMapClone() - relates to #743
Mike Becker <universe@uap-core.de>
parents: 1429
diff changeset
615 CX_TEST_ASSERT(*((int*)cxMapGet(dst, "k2")) == 13);
8e7fe85febc0 add tests for cxMapClone() - relates to #743
Mike Becker <universe@uap-core.de>
parents: 1429
diff changeset
616 CX_TEST_ASSERT(*((int*)cxMapGet(dst, "k3")) == 4);
8e7fe85febc0 add tests for cxMapClone() - relates to #743
Mike Becker <universe@uap-core.de>
parents: 1429
diff changeset
617 CX_TEST_ASSERT(*((int*)cxMapGet(dst, "k4")) == 11);
8e7fe85febc0 add tests for cxMapClone() - relates to #743
Mike Becker <universe@uap-core.de>
parents: 1429
diff changeset
618 CX_TEST_ASSERT(*((int*)cxMapGet(dst, "k5")) == 19);
8e7fe85febc0 add tests for cxMapClone() - relates to #743
Mike Becker <universe@uap-core.de>
parents: 1429
diff changeset
619 CX_TEST_ASSERT(cxMapSize(src) == 3);
8e7fe85febc0 add tests for cxMapClone() - relates to #743
Mike Becker <universe@uap-core.de>
parents: 1429
diff changeset
620 CX_TEST_ASSERT(*((int*)cxMapGet(src, "k4")) == 7);
8e7fe85febc0 add tests for cxMapClone() - relates to #743
Mike Becker <universe@uap-core.de>
parents: 1429
diff changeset
621 CX_TEST_ASSERT(*((int*)cxMapGet(src, "k2")) == 9);
8e7fe85febc0 add tests for cxMapClone() - relates to #743
Mike Becker <universe@uap-core.de>
parents: 1429
diff changeset
622 CX_TEST_ASSERT(*((int*)cxMapGet(src, "k5")) == 15);
8e7fe85febc0 add tests for cxMapClone() - relates to #743
Mike Becker <universe@uap-core.de>
parents: 1429
diff changeset
623
8e7fe85febc0 add tests for cxMapClone() - relates to #743
Mike Becker <universe@uap-core.de>
parents: 1429
diff changeset
624 cxMapClear(dst);
8e7fe85febc0 add tests for cxMapClone() - relates to #743
Mike Becker <universe@uap-core.de>
parents: 1429
diff changeset
625 CX_TEST_ASSERT(cx_testing_allocator_verify(&talloc));
8e7fe85febc0 add tests for cxMapClone() - relates to #743
Mike Becker <universe@uap-core.de>
parents: 1429
diff changeset
626 }
8e7fe85febc0 add tests for cxMapClone() - relates to #743
Mike Becker <universe@uap-core.de>
parents: 1429
diff changeset
627 cxMapFree(dst);
8e7fe85febc0 add tests for cxMapClone() - relates to #743
Mike Becker <universe@uap-core.de>
parents: 1429
diff changeset
628 cxMapFree(src);
8e7fe85febc0 add tests for cxMapClone() - relates to #743
Mike Becker <universe@uap-core.de>
parents: 1429
diff changeset
629 cx_testing_allocator_destroy(&talloc);
8e7fe85febc0 add tests for cxMapClone() - relates to #743
Mike Becker <universe@uap-core.de>
parents: 1429
diff changeset
630 }
8e7fe85febc0 add tests for cxMapClone() - relates to #743
Mike Becker <universe@uap-core.de>
parents: 1429
diff changeset
631
785
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
632 CX_TEST(test_empty_map_size) {
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
633 CX_TEST_DO {
856
6bbbf219251d fix name of collection base member (to avoid base.base)
Mike Becker <universe@uap-core.de>
parents: 855
diff changeset
634 CX_TEST_ASSERT(cxEmptyMap->collection.size == 0);
6bbbf219251d fix name of collection base member (to avoid base.base)
Mike Becker <universe@uap-core.de>
parents: 855
diff changeset
635 CX_TEST_ASSERT(cxMapSize(cxEmptyMap) == 0);
785
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
636 }
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
637 }
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
638
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
639 CX_TEST(test_empty_map_iterator) {
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
640 CxMap *map = cxEmptyMap;
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
641
1115
6db21dee4929 create specialized map iterators - fixes #550
Mike Becker <universe@uap-core.de>
parents: 1114
diff changeset
642 CxMapIterator it1 = cxMapIterator(map);
6db21dee4929 create specialized map iterators - fixes #550
Mike Becker <universe@uap-core.de>
parents: 1114
diff changeset
643 CxMapIterator it2 = cxMapIteratorValues(map);
6db21dee4929 create specialized map iterators - fixes #550
Mike Becker <universe@uap-core.de>
parents: 1114
diff changeset
644 CxMapIterator it3 = cxMapIteratorKeys(map);
1429
6e0c3a8a914a remove the concept of "mutating iterators" - resolves #579
Mike Becker <universe@uap-core.de>
parents: 1388
diff changeset
645 CxMapIterator it4 = cxMapIterator(map);
6e0c3a8a914a remove the concept of "mutating iterators" - resolves #579
Mike Becker <universe@uap-core.de>
parents: 1388
diff changeset
646 CxMapIterator it5 = cxMapIteratorValues(map);
6e0c3a8a914a remove the concept of "mutating iterators" - resolves #579
Mike Becker <universe@uap-core.de>
parents: 1388
diff changeset
647 CxMapIterator it6 = cxMapIteratorKeys(map);
785
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
648
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
649 CX_TEST_DO {
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
650 CX_TEST_ASSERT(!cxIteratorValid(it1));
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
651 CX_TEST_ASSERT(!cxIteratorValid(it2));
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
652 CX_TEST_ASSERT(!cxIteratorValid(it3));
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
653 CX_TEST_ASSERT(!cxIteratorValid(it4));
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
654 CX_TEST_ASSERT(!cxIteratorValid(it5));
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
655 CX_TEST_ASSERT(!cxIteratorValid(it6));
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
656
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
657 int c = 0;
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
658 cx_foreach(void*, data, it1) c++;
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
659 cx_foreach(void*, data, it2) c++;
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
660 cx_foreach(void*, data, it3) c++;
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
661 cx_foreach(void*, data, it4) c++;
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
662 cx_foreach(void*, data, it5) c++;
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
663 cx_foreach(void*, data, it6) c++;
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
664 CX_TEST_ASSERT(c == 0);
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
665 }
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
666 }
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
667
1388
edc34e904fe3 add tests for creating iterators with NULL lists or maps
Mike Becker <universe@uap-core.de>
parents: 1387
diff changeset
668 CX_TEST(test_null_map_iterator) {
edc34e904fe3 add tests for creating iterators with NULL lists or maps
Mike Becker <universe@uap-core.de>
parents: 1387
diff changeset
669 CxMap *map = NULL;
edc34e904fe3 add tests for creating iterators with NULL lists or maps
Mike Becker <universe@uap-core.de>
parents: 1387
diff changeset
670
edc34e904fe3 add tests for creating iterators with NULL lists or maps
Mike Becker <universe@uap-core.de>
parents: 1387
diff changeset
671 CxMapIterator it1 = cxMapIterator(map);
edc34e904fe3 add tests for creating iterators with NULL lists or maps
Mike Becker <universe@uap-core.de>
parents: 1387
diff changeset
672 CxMapIterator it2 = cxMapIteratorValues(map);
edc34e904fe3 add tests for creating iterators with NULL lists or maps
Mike Becker <universe@uap-core.de>
parents: 1387
diff changeset
673 CxMapIterator it3 = cxMapIteratorKeys(map);
1429
6e0c3a8a914a remove the concept of "mutating iterators" - resolves #579
Mike Becker <universe@uap-core.de>
parents: 1388
diff changeset
674 CxMapIterator it4 = cxMapIterator(map);
6e0c3a8a914a remove the concept of "mutating iterators" - resolves #579
Mike Becker <universe@uap-core.de>
parents: 1388
diff changeset
675 CxMapIterator it5 = cxMapIteratorValues(map);
6e0c3a8a914a remove the concept of "mutating iterators" - resolves #579
Mike Becker <universe@uap-core.de>
parents: 1388
diff changeset
676 CxMapIterator it6 = cxMapIteratorKeys(map);
1388
edc34e904fe3 add tests for creating iterators with NULL lists or maps
Mike Becker <universe@uap-core.de>
parents: 1387
diff changeset
677
edc34e904fe3 add tests for creating iterators with NULL lists or maps
Mike Becker <universe@uap-core.de>
parents: 1387
diff changeset
678 CX_TEST_DO {
edc34e904fe3 add tests for creating iterators with NULL lists or maps
Mike Becker <universe@uap-core.de>
parents: 1387
diff changeset
679 CX_TEST_ASSERT(!cxIteratorValid(it1));
edc34e904fe3 add tests for creating iterators with NULL lists or maps
Mike Becker <universe@uap-core.de>
parents: 1387
diff changeset
680 CX_TEST_ASSERT(!cxIteratorValid(it2));
edc34e904fe3 add tests for creating iterators with NULL lists or maps
Mike Becker <universe@uap-core.de>
parents: 1387
diff changeset
681 CX_TEST_ASSERT(!cxIteratorValid(it3));
edc34e904fe3 add tests for creating iterators with NULL lists or maps
Mike Becker <universe@uap-core.de>
parents: 1387
diff changeset
682 CX_TEST_ASSERT(!cxIteratorValid(it4));
edc34e904fe3 add tests for creating iterators with NULL lists or maps
Mike Becker <universe@uap-core.de>
parents: 1387
diff changeset
683 CX_TEST_ASSERT(!cxIteratorValid(it5));
edc34e904fe3 add tests for creating iterators with NULL lists or maps
Mike Becker <universe@uap-core.de>
parents: 1387
diff changeset
684 CX_TEST_ASSERT(!cxIteratorValid(it6));
edc34e904fe3 add tests for creating iterators with NULL lists or maps
Mike Becker <universe@uap-core.de>
parents: 1387
diff changeset
685
edc34e904fe3 add tests for creating iterators with NULL lists or maps
Mike Becker <universe@uap-core.de>
parents: 1387
diff changeset
686 int c = 0;
edc34e904fe3 add tests for creating iterators with NULL lists or maps
Mike Becker <universe@uap-core.de>
parents: 1387
diff changeset
687 cx_foreach(void*, data, it1) c++;
edc34e904fe3 add tests for creating iterators with NULL lists or maps
Mike Becker <universe@uap-core.de>
parents: 1387
diff changeset
688 cx_foreach(void*, data, it2) c++;
edc34e904fe3 add tests for creating iterators with NULL lists or maps
Mike Becker <universe@uap-core.de>
parents: 1387
diff changeset
689 cx_foreach(void*, data, it3) c++;
edc34e904fe3 add tests for creating iterators with NULL lists or maps
Mike Becker <universe@uap-core.de>
parents: 1387
diff changeset
690 cx_foreach(void*, data, it4) c++;
edc34e904fe3 add tests for creating iterators with NULL lists or maps
Mike Becker <universe@uap-core.de>
parents: 1387
diff changeset
691 cx_foreach(void*, data, it5) c++;
edc34e904fe3 add tests for creating iterators with NULL lists or maps
Mike Becker <universe@uap-core.de>
parents: 1387
diff changeset
692 cx_foreach(void*, data, it6) c++;
edc34e904fe3 add tests for creating iterators with NULL lists or maps
Mike Becker <universe@uap-core.de>
parents: 1387
diff changeset
693 CX_TEST_ASSERT(c == 0);
edc34e904fe3 add tests for creating iterators with NULL lists or maps
Mike Becker <universe@uap-core.de>
parents: 1387
diff changeset
694 }
edc34e904fe3 add tests for creating iterators with NULL lists or maps
Mike Becker <universe@uap-core.de>
parents: 1387
diff changeset
695 }
edc34e904fe3 add tests for creating iterators with NULL lists or maps
Mike Becker <universe@uap-core.de>
parents: 1387
diff changeset
696
785
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
697 CX_TEST(test_empty_map_no_ops) {
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
698 CX_TEST_DO {
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
699 // assertion not possible
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
700 // test that no segfault happens and valgrind is happy
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
701 cxMapClear(cxEmptyMap);
993
b642eca4b956 make names of destroy and free functions consistent - fixes #484
Mike Becker <universe@uap-core.de>
parents: 985
diff changeset
702 cxMapFree(cxEmptyMap);
785
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
703 CX_TEST_ASSERT(true);
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
704 }
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
705 }
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
706
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
707 CX_TEST(test_empty_map_get) {
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
708 CX_TEST_DO {
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
709 CxHashKey key = cx_hash_key_str("test");
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
710 CX_TEST_ASSERT(cxMapGet(cxEmptyMap, key) == NULL);
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
711 }
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
712 }
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
713
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
714 CX_TEST(test_hash_map_generics) {
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
715 CxTestingAllocator talloc;
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
716 cx_testing_allocator_init(&talloc);
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
717 CxAllocator *allocator = &talloc.base;
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
718 CX_TEST_DO {
994
3603bdf4a78b remove map detach function - fixes #487
Mike Becker <universe@uap-core.de>
parents: 993
diff changeset
719 CxMap *map = cxHashMapCreate(allocator, CX_STORE_POINTERS, 0);
785
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
720 cxMapPut(map, "test", "test");
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
721 cxMapPut(map, cx_mutstr("foo"), "bar");
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
722 cxMapPut(map, cx_str("hallo"), "welt");
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
723
856
6bbbf219251d fix name of collection base member (to avoid base.base)
Mike Becker <universe@uap-core.de>
parents: 855
diff changeset
724 CX_TEST_ASSERT(map->collection.size == 3);
785
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
725 CX_TEST_ASSERT(0 == strcmp(cxMapGet(map, "test"), "test"));
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
726 CX_TEST_ASSERT(0 == strcmp(cxMapGet(map, "foo"), "bar"));
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
727 CX_TEST_ASSERT(0 == strcmp(cxMapGet(map, "hallo"), "welt"));
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
728
994
3603bdf4a78b remove map detach function - fixes #487
Mike Becker <universe@uap-core.de>
parents: 993
diff changeset
729 CX_TEST_ASSERT(0 == cxMapRemove(map, cx_str("test")));
890
54565fd74e74 move all const keywords to the west - fixes #426
Mike Becker <universe@uap-core.de>
parents: 856
diff changeset
730 const char *hallo = "hallo";
994
3603bdf4a78b remove map detach function - fixes #487
Mike Becker <universe@uap-core.de>
parents: 993
diff changeset
731 CX_TEST_ASSERT(0 == cxMapRemove(map, hallo));
785
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
732 cxMapPut(map, cx_hash_key_str("key"), "value");
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
733
856
6bbbf219251d fix name of collection base member (to avoid base.base)
Mike Becker <universe@uap-core.de>
parents: 855
diff changeset
734 CX_TEST_ASSERT(map->collection.size == 2);
785
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
735 CX_TEST_ASSERT(0 == strcmp(cxMapGet(map, "key"), "value"));
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
736 CX_TEST_ASSERT(0 == strcmp(cxMapGet(map, "foo"), "bar"));
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
737
994
3603bdf4a78b remove map detach function - fixes #487
Mike Becker <universe@uap-core.de>
parents: 993
diff changeset
738 const char *r1, *r2;
3603bdf4a78b remove map detach function - fixes #487
Mike Becker <universe@uap-core.de>
parents: 993
diff changeset
739 CX_TEST_ASSERT(0 == cxMapRemoveAndGet(map, "key", &r1));
3603bdf4a78b remove map detach function - fixes #487
Mike Becker <universe@uap-core.de>
parents: 993
diff changeset
740 CX_TEST_ASSERT(0 == strcmp(r1, "value"));
3603bdf4a78b remove map detach function - fixes #487
Mike Becker <universe@uap-core.de>
parents: 993
diff changeset
741 CX_TEST_ASSERT(0 == cxMapRemoveAndGet(map, cx_str("foo"), &r2));
3603bdf4a78b remove map detach function - fixes #487
Mike Becker <universe@uap-core.de>
parents: 993
diff changeset
742 CX_TEST_ASSERT(0 == strcmp(r2, "bar"));
3603bdf4a78b remove map detach function - fixes #487
Mike Becker <universe@uap-core.de>
parents: 993
diff changeset
743 r2 = "nope";
3603bdf4a78b remove map detach function - fixes #487
Mike Becker <universe@uap-core.de>
parents: 993
diff changeset
744 CX_TEST_ASSERT(0 != cxMapRemoveAndGet(map, cx_hash_key("notfound",9), &r2));
3603bdf4a78b remove map detach function - fixes #487
Mike Becker <universe@uap-core.de>
parents: 993
diff changeset
745 CX_TEST_ASSERT(0 == strcmp(r2, "nope"));
785
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
746
856
6bbbf219251d fix name of collection base member (to avoid base.base)
Mike Becker <universe@uap-core.de>
parents: 855
diff changeset
747 CX_TEST_ASSERT(map->collection.size == 0);
785
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
748
993
b642eca4b956 make names of destroy and free functions consistent - fixes #484
Mike Becker <universe@uap-core.de>
parents: 985
diff changeset
749 cxMapFree(map);
785
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
750 CX_TEST_ASSERT(cx_testing_allocator_verify(&talloc));
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
751 }
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
752 cx_testing_allocator_destroy(&talloc);
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
753 }
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
754
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
755 struct test_map_kv {
890
54565fd74e74 move all const keywords to the west - fixes #426
Mike Becker <universe@uap-core.de>
parents: 856
diff changeset
756 const char *key;
54565fd74e74 move all const keywords to the west - fixes #426
Mike Becker <universe@uap-core.de>
parents: 856
diff changeset
757 const char *value;
785
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
758 };
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
759
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
760 static struct test_map_kv const test_map_operations[] = {
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
761 {"key 1", "test"},
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
762 {"key 2", "blub"},
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
763 {"key 3", "hallo"},
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
764 {"key 2", "foobar"},
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
765 {"key 4", "value 4"},
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
766 {"key 5", "value 5"},
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
767 {"key 6", "value 6"},
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
768 {"key 4", NULL},
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
769 {"key 7", "value 7"},
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
770 {"key 8", "value 8"},
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
771 {"does not exist", NULL},
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
772 {"key 9", "value 9"},
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
773 {"key 6", "other value"},
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
774 {"key 7", "something else"},
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
775 {"key 8", NULL},
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
776 {"key 2", NULL},
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
777 {"key 8", "new value"},
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
778 };
926
8fdd8d78c14b fix several survivors of east-const and some missing consts
Mike Becker <universe@uap-core.de>
parents: 890
diff changeset
779 static const size_t test_map_operations_len =
785
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
780 sizeof(test_map_operations) / sizeof(struct test_map_kv);
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
781 static struct test_map_kv test_map_reference[] = {
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
782 {"key 1", NULL},
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
783 {"key 2", NULL},
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
784 {"key 3", NULL},
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
785 {"key 4", NULL},
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
786 {"key 5", NULL},
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
787 {"key 6", NULL},
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
788 {"key 7", NULL},
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
789 {"key 8", NULL},
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
790 {"key 9", NULL},
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
791 };
926
8fdd8d78c14b fix several survivors of east-const and some missing consts
Mike Becker <universe@uap-core.de>
parents: 890
diff changeset
792 static const size_t test_map_reference_len =
785
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
793 sizeof(test_map_reference) / sizeof(struct test_map_kv);
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
794
890
54565fd74e74 move all const keywords to the west - fixes #426
Mike Becker <universe@uap-core.de>
parents: 856
diff changeset
795 static void test_map_reference_put(const char *key, const char *value) {
785
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
796 for (size_t i = 0 ; i < test_map_reference_len ; i++) {
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
797 if (0 == strcmp(key, test_map_reference[i].key)) {
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
798 test_map_reference[i].value = value;
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
799 return;
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
800 }
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
801 }
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
802 }
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
803
890
54565fd74e74 move all const keywords to the west - fixes #426
Mike Becker <universe@uap-core.de>
parents: 856
diff changeset
804 static const char *test_map_reference_get(const char *key) {
785
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
805 for (size_t i = 0 ; i < test_map_reference_len ; i++) {
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
806 if (0 == strcmp(key, test_map_reference[i].key)) {
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
807 return test_map_reference[i].value;
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
808 }
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
809 }
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
810 return NULL;
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
811 }
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
812
890
54565fd74e74 move all const keywords to the west - fixes #426
Mike Becker <universe@uap-core.de>
parents: 856
diff changeset
813 static const char *test_map_reference_remove(const char *key) {
785
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
814 for (size_t i = 0 ; i < test_map_reference_len ; i++) {
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
815 if (0 == strcmp(key, test_map_reference[i].key)) {
890
54565fd74e74 move all const keywords to the west - fixes #426
Mike Becker <universe@uap-core.de>
parents: 856
diff changeset
816 const char *ret = test_map_reference[i].value;
785
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
817 test_map_reference[i].value = NULL;
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
818 return ret;
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
819 }
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
820 }
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
821 return NULL;
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
822 }
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
823
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
824 static size_t test_map_reference_size(void) {
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
825 size_t size = 0;
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
826 for (size_t i = 0; i < test_map_reference_len; i++) {
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
827 if (test_map_reference[i].value != NULL) {
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
828 size++;
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
829 }
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
830 }
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
831 return size;
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
832 }
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
833
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
834 static CX_TEST_SUBROUTINE(verify_map_contents, CxMap *map) {
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
835 // verify that the reference map has same size (i.e. no other keys are mapped)
856
6bbbf219251d fix name of collection base member (to avoid base.base)
Mike Becker <universe@uap-core.de>
parents: 855
diff changeset
836 CX_TEST_ASSERT(map->collection.size == test_map_reference_size());
785
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
837
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
838 // verify key iterator
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
839 {
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
840 // collect the keys from the map iterator
1115
6db21dee4929 create specialized map iterators - fixes #550
Mike Becker <universe@uap-core.de>
parents: 1114
diff changeset
841 CxMapIterator keyiter = cxMapIteratorKeys(map);
850
b2bc48c2b251 add iterator over raw C arrays - closes #389
Mike Becker <universe@uap-core.de>
parents: 785
diff changeset
842 CX_TEST_ASSERT(keyiter.elem_size == sizeof(CxHashKey));
856
6bbbf219251d fix name of collection base member (to avoid base.base)
Mike Becker <universe@uap-core.de>
parents: 855
diff changeset
843 CX_TEST_ASSERT(keyiter.elem_count == map->collection.size);
6bbbf219251d fix name of collection base member (to avoid base.base)
Mike Becker <universe@uap-core.de>
parents: 855
diff changeset
844 CxHashKey *keys = calloc(map->collection.size, sizeof(CxHashKey));
785
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
845 cx_foreach(CxHashKey*, elem, keyiter) {
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
846 keys[keyiter.index] = *elem;
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
847 }
856
6bbbf219251d fix name of collection base member (to avoid base.base)
Mike Becker <universe@uap-core.de>
parents: 855
diff changeset
848 CX_TEST_ASSERT(keyiter.index == map->collection.size);
785
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
849 // verify that all keys are mapped to values in reference map
856
6bbbf219251d fix name of collection base member (to avoid base.base)
Mike Becker <universe@uap-core.de>
parents: 855
diff changeset
850 for (size_t i = 0 ; i < map->collection.size ; i++) {
785
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
851 cxmutstr ksz = cx_strdup(cx_strn(keys[i].data, keys[i].len));
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
852 CX_TEST_ASSERT(test_map_reference_get(ksz.ptr) != NULL);
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
853 cx_strfree(&ksz);
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
854 }
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
855 free(keys);
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
856 }
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
857
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
858 // verify value iterator
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
859 {
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
860 // by using that the values in our test data are unique strings
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
861 // we can re-use a similar approach as above
1115
6db21dee4929 create specialized map iterators - fixes #550
Mike Becker <universe@uap-core.de>
parents: 1114
diff changeset
862 CxMapIterator valiter = cxMapIteratorValues(map);
856
6bbbf219251d fix name of collection base member (to avoid base.base)
Mike Becker <universe@uap-core.de>
parents: 855
diff changeset
863 CX_TEST_ASSERT(valiter.elem_size == map->collection.elem_size);
6bbbf219251d fix name of collection base member (to avoid base.base)
Mike Becker <universe@uap-core.de>
parents: 855
diff changeset
864 CX_TEST_ASSERT(valiter.elem_count == map->collection.size);
890
54565fd74e74 move all const keywords to the west - fixes #426
Mike Becker <universe@uap-core.de>
parents: 856
diff changeset
865 const char ** values = calloc(map->collection.size, sizeof(const char *));
54565fd74e74 move all const keywords to the west - fixes #426
Mike Becker <universe@uap-core.de>
parents: 856
diff changeset
866 cx_foreach(const char *, elem, valiter) {
785
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
867 values[valiter.index] = elem;
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
868 }
856
6bbbf219251d fix name of collection base member (to avoid base.base)
Mike Becker <universe@uap-core.de>
parents: 855
diff changeset
869 CX_TEST_ASSERT(valiter.index == map->collection.size);
785
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
870 // verify that all values are present in the reference map
856
6bbbf219251d fix name of collection base member (to avoid base.base)
Mike Becker <universe@uap-core.de>
parents: 855
diff changeset
871 for (size_t i = 0 ; i < map->collection.size ; i++) {
785
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
872 bool found = false;
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
873 for (size_t j = 0; j < test_map_reference_len ; j++) {
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
874 if (test_map_reference[j].value == values[i]) {
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
875 found = true;
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
876 break;
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
877 }
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
878 }
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
879 CX_TEST_ASSERTM(found, "A value was not found in the reference map");
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
880 }
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
881 free(values);
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
882 }
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
883
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
884 // verify pair iterator
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
885 {
1115
6db21dee4929 create specialized map iterators - fixes #550
Mike Becker <universe@uap-core.de>
parents: 1114
diff changeset
886 CxMapIterator pairiter = cxMapIterator(map);
850
b2bc48c2b251 add iterator over raw C arrays - closes #389
Mike Becker <universe@uap-core.de>
parents: 785
diff changeset
887 CX_TEST_ASSERT(pairiter.elem_size == sizeof(CxMapEntry));
856
6bbbf219251d fix name of collection base member (to avoid base.base)
Mike Becker <universe@uap-core.de>
parents: 855
diff changeset
888 CX_TEST_ASSERT(pairiter.elem_count == map->collection.size);
6bbbf219251d fix name of collection base member (to avoid base.base)
Mike Becker <universe@uap-core.de>
parents: 855
diff changeset
889 struct test_map_kv *pairs = calloc(map->collection.size, sizeof(struct test_map_kv));
785
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
890 cx_foreach(CxMapEntry*, entry, pairiter) {
890
54565fd74e74 move all const keywords to the west - fixes #426
Mike Becker <universe@uap-core.de>
parents: 856
diff changeset
891 const CxHashKey *key = entry->key;
785
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
892 pairs[pairiter.index].key = cx_strdup(cx_strn(key->data, key->len)).ptr;
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
893 pairs[pairiter.index].value = entry->value;
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
894 }
856
6bbbf219251d fix name of collection base member (to avoid base.base)
Mike Becker <universe@uap-core.de>
parents: 855
diff changeset
895 CX_TEST_ASSERT(pairiter.index == map->collection.size);
785
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
896 // verify that all pairs are present in the reference map
856
6bbbf219251d fix name of collection base member (to avoid base.base)
Mike Becker <universe@uap-core.de>
parents: 855
diff changeset
897 for (size_t i = 0 ; i < map->collection.size ; i++) {
785
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
898 CX_TEST_ASSERT(test_map_reference_get(pairs[i].key) == pairs[i].value);
1318
12fa1d37fe48 allow changing the cxDefaultAllocator - resolves #669
Mike Becker <universe@uap-core.de>
parents: 1115
diff changeset
899 // this was cx_strdup'ed
1319
aa1f580f8f59 add convenience macros for using the default allocator - relates to #669
Mike Becker <universe@uap-core.de>
parents: 1318
diff changeset
900 cxFreeDefault((void*)pairs[i].key);
785
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
901 }
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
902 free(pairs);
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
903 }
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
904 }
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
905
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
906 CX_TEST(test_hash_map_basic_operations) {
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
907 CxTestingAllocator talloc;
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
908 cx_testing_allocator_init(&talloc);
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
909 CxAllocator *allocator = &talloc.base;
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
910 CX_TEST_DO {
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
911 // create the map
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
912 CxMap *map = cxHashMapCreate(allocator, CX_STORE_POINTERS, 8);
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
913
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
914 // clear the reference map
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
915 for (size_t i = 0 ; i < test_map_reference_len ; i++) {
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
916 test_map_reference[i].value = NULL;
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
917 }
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
918
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
919 // verify iterators for empty map
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
920 CX_TEST_CALL_SUBROUTINE(verify_map_contents, map);
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
921
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
922 // execute operations and verify results
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
923 for (size_t i = 0 ; i < test_map_operations_len ; i++) {
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
924 struct test_map_kv kv = test_map_operations[i];
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
925 CxHashKey key = cx_hash_key_str(kv.key);
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
926 key.hash = 0; // force the hash map to compute the hash
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
927 if (kv.value != NULL) {
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
928 // execute a put operation and verify that the exact value can be read back
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
929 test_map_reference_put(kv.key, kv.value);
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
930 int result = cxMapPut(map, key, (void *) kv.value);
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
931 CX_TEST_ASSERT(result == 0);
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
932 void *added = cxMapGet(map, key);
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
933 CX_TEST_ASSERT(0 == memcmp(kv.value, added, strlen(kv.value)));
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
934 } else {
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
935 // execute a remove and verify that the removed element was returned (or NULL)
890
54565fd74e74 move all const keywords to the west - fixes #426
Mike Becker <universe@uap-core.de>
parents: 856
diff changeset
936 const char *found = test_map_reference_remove(kv.key);
994
3603bdf4a78b remove map detach function - fixes #487
Mike Becker <universe@uap-core.de>
parents: 993
diff changeset
937 void *removed = (void*) 0x1337;
3603bdf4a78b remove map detach function - fixes #487
Mike Becker <universe@uap-core.de>
parents: 993
diff changeset
938 int result = cxMapRemoveAndGet(map, key, &removed);
3603bdf4a78b remove map detach function - fixes #487
Mike Becker <universe@uap-core.de>
parents: 993
diff changeset
939 if (found == NULL) {
3603bdf4a78b remove map detach function - fixes #487
Mike Becker <universe@uap-core.de>
parents: 993
diff changeset
940 CX_TEST_ASSERT(0 != result);
3603bdf4a78b remove map detach function - fixes #487
Mike Becker <universe@uap-core.de>
parents: 993
diff changeset
941 CX_TEST_ASSERT(removed == (void*) 0x1337);
3603bdf4a78b remove map detach function - fixes #487
Mike Becker <universe@uap-core.de>
parents: 993
diff changeset
942 } else {
3603bdf4a78b remove map detach function - fixes #487
Mike Becker <universe@uap-core.de>
parents: 993
diff changeset
943 CX_TEST_ASSERT(0 == result);
3603bdf4a78b remove map detach function - fixes #487
Mike Becker <universe@uap-core.de>
parents: 993
diff changeset
944 CX_TEST_ASSERT(removed == found);
3603bdf4a78b remove map detach function - fixes #487
Mike Becker <universe@uap-core.de>
parents: 993
diff changeset
945 }
3603bdf4a78b remove map detach function - fixes #487
Mike Becker <universe@uap-core.de>
parents: 993
diff changeset
946
785
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
947 }
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
948 // compare the current map state with the reference map
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
949 CX_TEST_CALL_SUBROUTINE(verify_map_contents, map);
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
950 }
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
951
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
952 // destroy the map and verify the memory (de)allocations
993
b642eca4b956 make names of destroy and free functions consistent - fixes #484
Mike Becker <universe@uap-core.de>
parents: 985
diff changeset
953 cxMapFree(map);
785
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
954 CX_TEST_ASSERT(cx_testing_allocator_verify(&talloc));
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
955 }
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
956 cx_testing_allocator_destroy(&talloc);
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
957 }
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
958
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
959 CxTestSuite *cx_test_suite_hash_map(void) {
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
960 CxTestSuite *suite = cx_test_suite_new("map");
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
961
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
962 cx_test_register(suite, test_hash_map_create);
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
963 cx_test_register(suite, test_hash_map_create_store_pointers);
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
964 cx_test_register(suite, test_hash_map_basic_operations);
1341
dc88d2ece7e4 add cxMapEmplace()
Mike Becker <universe@uap-core.de>
parents: 1319
diff changeset
965 cx_test_register(suite, test_hash_map_emplace);
dc88d2ece7e4 add cxMapEmplace()
Mike Becker <universe@uap-core.de>
parents: 1319
diff changeset
966 cx_test_register(suite, test_hash_map_emplace_pointers);
785
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
967 cx_test_register(suite, test_hash_map_rehash);
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
968 cx_test_register(suite, test_hash_map_rehash_not_required);
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
969 cx_test_register(suite, test_hash_map_clear);
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
970 cx_test_register(suite, test_hash_map_store_ucx_strings);
1442
244fb8bc3584 fix hash map not being able to deal with 64-bit hashes
Mike Becker <universe@uap-core.de>
parents: 1439
diff changeset
971 cx_test_register(suite, test_hash_map_integer_keys);
785
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
972 cx_test_register(suite, test_hash_map_remove_via_iterator);
1114
ad5eeb256242 fix that overwriting a map element did not call any destructor function
Mike Becker <universe@uap-core.de>
parents: 1111
diff changeset
973 cx_test_register(suite, test_hash_map_simple_destructor_objects);
ad5eeb256242 fix that overwriting a map element did not call any destructor function
Mike Becker <universe@uap-core.de>
parents: 1111
diff changeset
974 cx_test_register(suite, test_hash_map_advanced_destructor_objects);
ad5eeb256242 fix that overwriting a map element did not call any destructor function
Mike Becker <universe@uap-core.de>
parents: 1111
diff changeset
975 cx_test_register(suite, test_hash_map_simple_destructor_pointers);
ad5eeb256242 fix that overwriting a map element did not call any destructor function
Mike Becker <universe@uap-core.de>
parents: 1111
diff changeset
976 cx_test_register(suite, test_hash_map_advanced_destructor_pointers);
1439
8e7fe85febc0 add tests for cxMapClone() - relates to #743
Mike Becker <universe@uap-core.de>
parents: 1429
diff changeset
977 cx_test_register(suite, test_hash_map_clone);
1443
6986e9ed70f3 add test coverage for allocation failures in clone-function
Mike Becker <universe@uap-core.de>
parents: 1442
diff changeset
978 cx_test_register(suite, test_hash_map_clone_alloc_fail);
1439
8e7fe85febc0 add tests for cxMapClone() - relates to #743
Mike Becker <universe@uap-core.de>
parents: 1429
diff changeset
979 cx_test_register(suite, test_hash_map_clone_ptr);
785
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
980 cx_test_register(suite, test_empty_map_no_ops);
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
981 cx_test_register(suite, test_empty_map_size);
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
982 cx_test_register(suite, test_empty_map_get);
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
983 cx_test_register(suite, test_empty_map_iterator);
1388
edc34e904fe3 add tests for creating iterators with NULL lists or maps
Mike Becker <universe@uap-core.de>
parents: 1387
diff changeset
984 cx_test_register(suite, test_null_map_iterator);
785
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
985 cx_test_register(suite, test_hash_map_generics);
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
986
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
987 return suite;
bb18daa62d5f migrate map tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
988 }

mercurial