tests/test_list.c

changeset 1608
46d8a8305948
parent 1607
0ecb13118cac
equal deleted inserted replaced
1607:0ecb13118cac 1608:46d8a8305948
44 arr.data[1] = 3; 44 arr.data[1] = 3;
45 arr.data[2] = 5; 45 arr.data[2] = 5;
46 arr.data[3] = 7; 46 arr.data[3] = 7;
47 arr.data[4] = 11; 47 arr.data[4] = 11;
48 arr.size = 3; 48 arr.size = 3;
49 arr.capacity = 5;
50 int elem = 8, elem2 = 47; 49 int elem = 8, elem2 = 47;
51 int result; 50 int result;
52 CX_TEST_DO { 51 CX_TEST_DO {
53 result = cx_array_add(arr, &elem); 52 result = cx_array_add(arr, &elem);
54 CX_TEST_ASSERT(result == 0); 53 CX_TEST_ASSERT(result == 0);
73 CX_TEST_ASSERT(arr.capacity >= 6); 72 CX_TEST_ASSERT(arr.capacity >= 6);
74 } 73 }
75 cx_array_free(arr); 74 cx_array_free(arr);
76 } 75 }
77 76
78 CX_TEST(test_array_copy_overlap) {
79 CX_ARRAY_DECLARE_SIZED(char, arr, uint8_t);
80 cx_array_initialize(arr, 16);
81 strcpy(arr, "Hello, World!");
82 CX_TEST_DO {
83 errno = 0;
84 int result = cx_array_simple_copy(arr, 7, arr, 14);
85 CX_TEST_ASSERT(result == 0);
86 CX_TEST_ASSERT(errno == 0);
87 CX_TEST_ASSERT(arr_size == 21);
88 CX_TEST_ASSERT(arr_capacity == 32);
89 CX_TEST_ASSERT(0 == memcmp(arr, "Hello, Hello, World!\0", 21));
90 }
91 cxFreeDefault(arr);
92 }
93
94 CX_TEST(test_array_reserve) { 77 CX_TEST(test_array_reserve) {
95 CX_TEST_DO { 78 CX_ARRAY(int, arr);
96 // TODO: create new test for the new API 79 cx_array_init(arr, 5);
97 } 80 arr.data[0] = 2;
81 arr.data[1] = 3;
82 arr.data[2] = 5;
83 arr.size = 3;
84 CX_TEST_DO {
85 // extend
86 CX_TEST_ASSERT(0 == cx_array_reserve(arr, 8));
87 CX_TEST_ASSERT(arr.size == 3);
88 CX_TEST_ASSERT(arr.capacity == 8);
89 CX_TEST_ASSERT(arr.data[0] == 2);
90 CX_TEST_ASSERT(arr.data[1] == 3);
91 CX_TEST_ASSERT(arr.data[2] == 5);
92
93 // shrink
94 CX_TEST_ASSERT(0 == cx_array_reserve(arr, 2));
95 CX_TEST_ASSERT(arr.size == 2);
96 CX_TEST_ASSERT(arr.capacity == 2);
97 CX_TEST_ASSERT(arr.data[0] == 2);
98 CX_TEST_ASSERT(arr.data[1] == 3);
99 }
100 cx_array_free(arr);
101 }
102
103 CX_TEST(test_array_move_to_new) {
104 CX_ARRAY(int, arr);
105 int fixed[5] = {2, 4, 6};
106 cx_array_init_fixed(arr, fixed, 3);
107 CX_TEST_DO {
108 CX_TEST_ASSERT(arr.data == fixed);
109 CX_TEST_ASSERT(arr.size == 3);
110 CX_TEST_ASSERT(arr.capacity == 5);
111
112 CX_TEST_ASSERT(0 == cx_array_move_to_new(arr, 8));
113
114 CX_TEST_ASSERT(arr.data != fixed);
115 CX_TEST_ASSERT(arr.size == 3);
116 CX_TEST_ASSERT(arr.capacity == 8);
117 CX_TEST_ASSERT(arr.data[0] == 2);
118 CX_TEST_ASSERT(arr.data[1] == 4);
119 CX_TEST_ASSERT(arr.data[2] == 6);
120
121 for (int x = 8 ; x <= 18 ; x+=2) {
122 cx_array_add(arr, &x);
123 }
124
125 CX_TEST_ASSERT(arr.size == 9);
126 CX_TEST_ASSERT(arr.capacity >= 9);
127
128 for (int x = 1 ; x <= 9 ; x++) {
129 CX_TEST_ASSERT(arr.data[x-1] == 2*x);
130 }
131 }
132 cx_array_free(arr);
98 } 133 }
99 134
100 CX_TEST(test_array_insert_sorted) { 135 CX_TEST(test_array_insert_sorted) {
101 int d1 = 50; 136 int d1 = 50;
102 int d2 = 80; 137 int d2 = 80;
113 int expected[31] = { 148 int expected[31] = {
114 10, 40, 50, 51, 52, 54, 56, 56, 57, 58, 58, 59, 60, 62, 64, 65, 67, 149 10, 40, 50, 51, 52, 54, 56, 56, 57, 58, 58, 59, 60, 62, 64, 65, 67,
115 70, 71, 71, 72, 75, 75, 75, 77, 78, 80, 90, 90, 120, 130 150 70, 71, 71, 72, 75, 75, 75, 77, 78, 80, 90, 90, 120, 130
116 }; 151 };
117 152
118 CX_ARRAY_DECLARE(int, array); 153 CX_ARRAY(int, array);
119 cx_array_initialize(array, 4); 154 cx_array_init(array, 4);
120 155
121 CX_TEST_DO { 156 CX_TEST_DO {
122 CX_TEST_ASSERT(0 == cx_array_simple_add_sorted(array, d1, cx_cmp_int)); 157 CX_TEST_ASSERT(0 == cx_array_insert_sorted(array, cx_cmp_int, &d1));
123 CX_TEST_ASSERT(array_size == 1); 158 CX_TEST_ASSERT(array.size == 1);
124 CX_TEST_ASSERT(array_capacity == 4); 159 CX_TEST_ASSERT(array.capacity == 4);
125 CX_TEST_ASSERT(0 == cx_array_simple_add_sorted(array, d2, cx_cmp_int)); 160 CX_TEST_ASSERT(0 == cx_array_insert_sorted(array, cx_cmp_int, &d2));
126 CX_TEST_ASSERT(array_size == 2); 161 CX_TEST_ASSERT(array.size == 2);
127 CX_TEST_ASSERT(array_capacity == 4); 162 CX_TEST_ASSERT(array.capacity == 4);
128 CX_TEST_ASSERT(0 == cx_array_simple_add_sorted(array, d3, cx_cmp_int)); 163 CX_TEST_ASSERT(0 == cx_array_insert_sorted(array, cx_cmp_int, &d3));
129 CX_TEST_ASSERT(array_size == 3); 164 CX_TEST_ASSERT(array.size == 3);
130 CX_TEST_ASSERT(array_capacity == 4); 165 CX_TEST_ASSERT(array.capacity == 4);
131 CX_TEST_ASSERT(0 == cx_array_simple_add_sorted(array, d4, cx_cmp_int)); 166 CX_TEST_ASSERT(0 == cx_array_insert_sorted(array, cx_cmp_int, &d4));
132 CX_TEST_ASSERT(array_size == 4); 167 CX_TEST_ASSERT(array.size == 4);
133 CX_TEST_ASSERT(array_capacity == 4); 168 CX_TEST_ASSERT(array.capacity == 4);
134 CX_TEST_ASSERT(0 == cx_array_simple_add_sorted(array, d5, cx_cmp_int)); 169 CX_TEST_ASSERT(0 == cx_array_insert_sorted(array, cx_cmp_int, &d5));
135 CX_TEST_ASSERT(array_size == 5); 170 CX_TEST_ASSERT(array.size == 5);
136 CX_TEST_ASSERT(array_capacity >= 5); 171 CX_TEST_ASSERT(array.capacity >= 5);
137 CX_TEST_ASSERT(0 == cx_array_simple_insert_sorted(array, d6a, 6, cx_cmp_int)); 172 CX_TEST_ASSERT(0 == cx_array_insert_sorted_array(array, cx_cmp_int, d6a, 6));
138 CX_TEST_ASSERT(array_size == 11); 173 CX_TEST_ASSERT(array.size == 11);
139 CX_TEST_ASSERT(array_capacity >= 11); 174 CX_TEST_ASSERT(array.capacity >= 11);
140 CX_TEST_ASSERT(0 == cx_array_simple_insert_sorted(array, d7a, 6, cx_cmp_int)); 175 CX_TEST_ASSERT(0 == cx_array_insert_sorted_array(array, cx_cmp_int, d7a, 6));
141 CX_TEST_ASSERT(array_size == 17); 176 CX_TEST_ASSERT(array.size == 17);
142 CX_TEST_ASSERT(array_capacity >= 17); 177 CX_TEST_ASSERT(array.capacity >= 17);
143 CX_TEST_ASSERT(0 == cx_array_simple_add_sorted(array, d8, cx_cmp_int)); 178 CX_TEST_ASSERT(0 == cx_array_insert_sorted(array, cx_cmp_int, &d8));
144 CX_TEST_ASSERT(array_size == 18); 179 CX_TEST_ASSERT(array.size == 18);
145 CX_TEST_ASSERT(array_capacity >= 18); 180 CX_TEST_ASSERT(array.capacity >= 18);
146 CX_TEST_ASSERT(0 == cx_array_simple_add_sorted(array, d9, cx_cmp_int)); 181 CX_TEST_ASSERT(0 == cx_array_insert_sorted(array, cx_cmp_int, &d9));
147 CX_TEST_ASSERT(array_size == 19); 182 CX_TEST_ASSERT(array.size == 19);
148 CX_TEST_ASSERT(array_capacity >= 19); 183 CX_TEST_ASSERT(array.capacity >= 19);
149 CX_TEST_ASSERT(0 == cx_array_simple_insert_sorted(array, d10a, 3, cx_cmp_int)); 184 CX_TEST_ASSERT(0 == cx_array_insert_sorted_array(array, cx_cmp_int, d10a, 3));
150 CX_TEST_ASSERT(array_size == 22); 185 CX_TEST_ASSERT(array.size == 22);
151 CX_TEST_ASSERT(array_capacity >= 22); 186 CX_TEST_ASSERT(array.capacity >= 22);
152 CX_TEST_ASSERT(0 == cx_array_simple_insert_sorted(array, d11a, 6, cx_cmp_int)); 187 CX_TEST_ASSERT(0 == cx_array_insert_sorted_array(array, cx_cmp_int, d11a, 6));
153 CX_TEST_ASSERT(array_size == 28); 188 CX_TEST_ASSERT(array.size == 28);
154 CX_TEST_ASSERT(array_capacity >= 28); 189 CX_TEST_ASSERT(array.capacity >= 28);
155 CX_TEST_ASSERT(0 == cx_array_simple_insert_sorted(array, d12a, 3, cx_cmp_int)); 190 CX_TEST_ASSERT(0 == cx_array_insert_sorted_array(array, cx_cmp_int, d12a, 3));
156 CX_TEST_ASSERT(array_size == 31); 191 CX_TEST_ASSERT(array.size == 31);
157 CX_TEST_ASSERT(array_capacity >= 31); 192 CX_TEST_ASSERT(array.capacity >= 31);
158 193
159 CX_TEST_ASSERT(0 == memcmp(array, expected, 31 * sizeof(int))); 194 CX_TEST_ASSERT(0 == memcmp(array.data, expected, 31 * sizeof(int)));
160 } 195 }
161 cxFreeDefault(array); 196 cx_array_free(array);
162 } 197 }
163 198
164 CX_TEST(test_array_insert_unique) { 199 CX_TEST(test_array_insert_unique) {
165 int d1 = 50; 200 int d1 = 50;
166 int d2 = 80; 201 int d2 = 80;
176 int expected[22] = { 211 int expected[22] = {
177 40, 50, 51, 52, 54, 56, 57, 58, 60, 62, 64, 212 40, 50, 51, 52, 54, 56, 57, 58, 60, 62, 64,
178 65, 67, 70, 75, 77, 78, 80, 90, 95, 100, 110 213 65, 67, 70, 75, 77, 78, 80, 90, 95, 100, 110
179 }; 214 };
180 215
181 CX_ARRAY_DECLARE(int, array); 216 CX_ARRAY(int, array);
182 cx_array_initialize(array, 4); 217 cx_array_init(array, 4);
183 218
184 CX_TEST_DO { 219 CX_TEST_DO {
185 CX_TEST_ASSERT(0 == cx_array_simple_add_unique(array, d1, cx_cmp_int)); 220 CX_TEST_ASSERT(0 == cx_array_insert_unique(array, cx_cmp_int, &d1));
186 CX_TEST_ASSERT(array_size == 1); 221 CX_TEST_ASSERT(array.size == 1);
187 CX_TEST_ASSERT(array_capacity == 4); 222 CX_TEST_ASSERT(array.capacity == 4);
188 CX_TEST_ASSERT(0 == cx_array_simple_add_unique(array, d2, cx_cmp_int)); 223 CX_TEST_ASSERT(0 == cx_array_insert_unique(array, cx_cmp_int, &d2));
189 CX_TEST_ASSERT(array_size == 2); 224 CX_TEST_ASSERT(array.size == 2);
190 CX_TEST_ASSERT(array_capacity == 4); 225 CX_TEST_ASSERT(array.capacity == 4);
191 CX_TEST_ASSERT(0 == cx_array_simple_add_unique(array, d3, cx_cmp_int)); 226 CX_TEST_ASSERT(0 == cx_array_insert_unique(array, cx_cmp_int, &d3));
192 CX_TEST_ASSERT(array_size == 3); 227 CX_TEST_ASSERT(array.size == 3);
193 CX_TEST_ASSERT(array_capacity == 4); 228 CX_TEST_ASSERT(array.capacity == 4);
194 CX_TEST_ASSERT(0 == cx_array_simple_add_unique(array, d4, cx_cmp_int)); 229 CX_TEST_ASSERT(0 == cx_array_insert_unique(array, cx_cmp_int, &d4));
195 CX_TEST_ASSERT(array_size == 4); 230 CX_TEST_ASSERT(array.size == 4);
196 CX_TEST_ASSERT(array_capacity == 4); 231 CX_TEST_ASSERT(array.capacity == 4);
197 CX_TEST_ASSERT(0 == cx_array_simple_add_unique(array, d5, cx_cmp_int)); 232 CX_TEST_ASSERT(0 == cx_array_insert_unique(array, cx_cmp_int, &d5));
198 CX_TEST_ASSERT(array_size == 5); 233 CX_TEST_ASSERT(array.size == 5);
199 CX_TEST_ASSERT(array_capacity >= 5); 234 CX_TEST_ASSERT(array.capacity >= 5);
200 CX_TEST_ASSERT(0 == cx_array_simple_insert_unique(array, d6a, 6, cx_cmp_int)); 235 CX_TEST_ASSERT(0 == cx_array_insert_unique_array(array, cx_cmp_int, d6a, 6));
201 CX_TEST_ASSERT(array_size == 11); 236 CX_TEST_ASSERT(array.size == 11);
202 CX_TEST_ASSERT(array_capacity >= 11); 237 CX_TEST_ASSERT(array.capacity >= 11);
203 CX_TEST_ASSERT(0 == cx_array_simple_insert_unique(array, d7a, 6, cx_cmp_int)); 238 CX_TEST_ASSERT(0 == cx_array_insert_unique_array(array, cx_cmp_int, d7a, 6));
204 CX_TEST_ASSERT(array_size == 17); 239 CX_TEST_ASSERT(array.size == 17);
205 CX_TEST_ASSERT(array_capacity >= 17); 240 CX_TEST_ASSERT(array.capacity >= 17);
206 CX_TEST_ASSERT(0 == cx_array_simple_add_unique(array, d8, cx_cmp_int)); 241 CX_TEST_ASSERT(0 == cx_array_insert_unique(array, cx_cmp_int, &d8));
207 CX_TEST_ASSERT(array_size == 18); 242 CX_TEST_ASSERT(array.size == 18);
208 CX_TEST_ASSERT(array_capacity >= 18); 243 CX_TEST_ASSERT(array.capacity >= 18);
209 CX_TEST_ASSERT(0 == cx_array_simple_add_unique(array, d9, cx_cmp_int)); 244 CX_TEST_ASSERT(0 == cx_array_insert_unique(array, cx_cmp_int, &d9));
210 CX_TEST_ASSERT(array_size == 18); 245 CX_TEST_ASSERT(array.size == 18);
211 CX_TEST_ASSERT(array_capacity >= 18); 246 CX_TEST_ASSERT(array.capacity >= 18);
212 CX_TEST_ASSERT(0 == cx_array_simple_insert_unique(array, d10a, 3, cx_cmp_int)); 247 CX_TEST_ASSERT(0 == cx_array_insert_unique_array(array, cx_cmp_int, d10a, 3));
213 CX_TEST_ASSERT(array_size == 19); 248 CX_TEST_ASSERT(array.size == 19);
214 CX_TEST_ASSERT(array_capacity >= 19); 249 CX_TEST_ASSERT(array.capacity >= 19);
215 CX_TEST_ASSERT(0 == cx_array_simple_insert_unique(array, d11a, 8, cx_cmp_int)); 250 CX_TEST_ASSERT(0 == cx_array_insert_unique_array(array, cx_cmp_int, d11a, 8));
216 CX_TEST_ASSERT(array_size == 22); 251 CX_TEST_ASSERT(array.size == 22);
217 CX_TEST_ASSERT(array_capacity >= 22); 252 CX_TEST_ASSERT(array.capacity >= 22);
218 253
219 CX_TEST_ASSERT(0 == memcmp(array, expected, 22 * sizeof(int))); 254 CX_TEST_ASSERT(0 == memcmp(array.data, expected, 22 * sizeof(int)));
220 } 255 }
221 cxFreeDefault(array); 256 cx_array_free(array);
222 } 257 }
223 258
224 CX_TEST(test_array_binary_search) { 259 CX_TEST(test_array_binary_search) {
225 int array[18] = { 260 int array[18] = {
226 40, 50, 51, 52, 54, 56, 57, 58, 60, 261 40, 50, 51, 52, 54, 56, 57, 58, 60,
3241 3276
3242 CxTestSuite *cx_test_suite_array_list(void) { 3277 CxTestSuite *cx_test_suite_array_list(void) {
3243 CxTestSuite *suite = cx_test_suite_new("array_list"); 3278 CxTestSuite *suite = cx_test_suite_new("array_list");
3244 3279
3245 cx_test_register(suite, test_array_add); 3280 cx_test_register(suite, test_array_add);
3246 cx_test_register(suite, test_array_copy_overlap);
3247 cx_test_register(suite, test_array_reserve); 3281 cx_test_register(suite, test_array_reserve);
3282 cx_test_register(suite, test_array_move_to_new);
3248 cx_test_register(suite, test_array_insert_sorted); 3283 cx_test_register(suite, test_array_insert_sorted);
3249 cx_test_register(suite, test_array_insert_unique); 3284 cx_test_register(suite, test_array_insert_unique);
3250 cx_test_register(suite, test_array_binary_search); 3285 cx_test_register(suite, test_array_binary_search);
3251 cx_test_register(suite, test_array_binary_search_with_duplicates); 3286 cx_test_register(suite, test_array_binary_search_with_duplicates);
3252 3287

mercurial