tests/test_list.c

changeset 1429
6e0c3a8a914a
parent 1428
0ac4aa1737fd
equal deleted inserted replaced
1428:0ac4aa1737fd 1429:6e0c3a8a914a
1117 CX_TEST(test_empty_list_iterator) { 1117 CX_TEST(test_empty_list_iterator) {
1118 CxList *list = cxEmptyList; 1118 CxList *list = cxEmptyList;
1119 1119
1120 CxIterator it1 = cxListIterator(list); 1120 CxIterator it1 = cxListIterator(list);
1121 CxIterator it2 = cxListBackwardsIterator(list); 1121 CxIterator it2 = cxListBackwardsIterator(list);
1122 CxIterator it3 = cxListMutIterator(list); 1122
1123 CxIterator it4 = cxListMutBackwardsIterator(list); 1123 CX_TEST_DO {
1124 CX_TEST_ASSERT(!cxIteratorValid(it1));
1125 CX_TEST_ASSERT(!cxIteratorValid(it2));
1126
1127 int c = 0;
1128 cx_foreach(void*, data, it1) c++;
1129 cx_foreach(void*, data, it2) c++;
1130 CX_TEST_ASSERT(c == 0);
1131 }
1132 }
1133
1134 CX_TEST(test_null_list_iterator) {
1135 CxList *list = NULL;
1136
1137 CxIterator it1 = cxListIterator(list);
1138 CxIterator it2 = cxListBackwardsIterator(list);
1139 CxIterator it3 = cxListIteratorAt(list, 0);
1140 CxIterator it4 = cxListBackwardsIteratorAt(list, 0);
1124 1141
1125 CX_TEST_DO { 1142 CX_TEST_DO {
1126 CX_TEST_ASSERT(!cxIteratorValid(it1)); 1143 CX_TEST_ASSERT(!cxIteratorValid(it1));
1127 CX_TEST_ASSERT(!cxIteratorValid(it2)); 1144 CX_TEST_ASSERT(!cxIteratorValid(it2));
1128 CX_TEST_ASSERT(!cxIteratorValid(it3)); 1145 CX_TEST_ASSERT(!cxIteratorValid(it3));
1131 int c = 0; 1148 int c = 0;
1132 cx_foreach(void*, data, it1) c++; 1149 cx_foreach(void*, data, it1) c++;
1133 cx_foreach(void*, data, it2) c++; 1150 cx_foreach(void*, data, it2) c++;
1134 cx_foreach(void*, data, it3) c++; 1151 cx_foreach(void*, data, it3) c++;
1135 cx_foreach(void*, data, it4) c++; 1152 cx_foreach(void*, data, it4) c++;
1136 CX_TEST_ASSERT(c == 0);
1137 }
1138 }
1139
1140 CX_TEST(test_null_list_iterator) {
1141 CxList *list = NULL;
1142
1143 CxIterator it1 = cxListIterator(list);
1144 CxIterator it2 = cxListBackwardsIterator(list);
1145 CxIterator it3 = cxListMutIterator(list);
1146 CxIterator it4 = cxListMutBackwardsIterator(list);
1147 CxIterator it5 = cxListMutIteratorAt(list, 0);
1148 CxIterator it6 = cxListMutBackwardsIteratorAt(list, 0);
1149
1150 CX_TEST_DO {
1151 CX_TEST_ASSERT(!cxIteratorValid(it1));
1152 CX_TEST_ASSERT(!cxIteratorValid(it2));
1153 CX_TEST_ASSERT(!cxIteratorValid(it3));
1154 CX_TEST_ASSERT(!cxIteratorValid(it4));
1155 CX_TEST_ASSERT(!cxIteratorValid(it5));
1156 CX_TEST_ASSERT(!cxIteratorValid(it6));
1157
1158 int c = 0;
1159 cx_foreach(void*, data, it1) c++;
1160 cx_foreach(void*, data, it2) c++;
1161 cx_foreach(void*, data, it3) c++;
1162 cx_foreach(void*, data, it4) c++;
1163 cx_foreach(void*, data, it5) c++;
1164 cx_foreach(void*, data, it6) c++;
1165 CX_TEST_ASSERT(c == 0); 1153 CX_TEST_ASSERT(c == 0);
1166 } 1154 }
1167 } 1155 }
1168 1156
1169 CX_TEST(test_empty_list_noops) { 1157 CX_TEST(test_empty_list_noops) {
2277 CX_TEST_ASSERT(*x == testdata[iter.index]); 2265 CX_TEST_ASSERT(*x == testdata[iter.index]);
2278 i--; 2266 i--;
2279 } 2267 }
2280 CX_TEST_ASSERT(i == 0); 2268 CX_TEST_ASSERT(i == 0);
2281 i = len / 2; 2269 i = len / 2;
2282 CxIterator mut_iter = cxListMutIteratorAt(list, i); 2270 CxIterator mut_iter = cxListIteratorAt(list, i);
2283 CX_TEST_ASSERT(mut_iter.elem_size == list->collection.elem_size); 2271 CX_TEST_ASSERT(mut_iter.elem_size == list->collection.elem_size);
2284 CX_TEST_ASSERT(mut_iter.elem_count == list->collection.size); 2272 CX_TEST_ASSERT(mut_iter.elem_count == list->collection.size);
2285 size_t j = 0; 2273 size_t j = 0;
2286 cx_foreach(int*, x, mut_iter) { 2274 cx_foreach(int*, x, mut_iter) {
2287 CX_TEST_ASSERT(mut_iter.index == len / 2 + j / 2); 2275 CX_TEST_ASSERT(mut_iter.index == len / 2 + j / 2);
2291 j++; 2279 j++;
2292 } 2280 }
2293 CX_TEST_ASSERT(i == len); 2281 CX_TEST_ASSERT(i == len);
2294 i = len / 2; 2282 i = len / 2;
2295 j = 0; 2283 j = 0;
2296 mut_iter = cxListMutBackwardsIteratorAt(list, i - 1); 2284 mut_iter = cxListBackwardsIteratorAt(list, i - 1);
2297 cx_foreach(int*, x, mut_iter) { 2285 cx_foreach(int*, x, mut_iter) {
2298 CX_TEST_ASSERT(mut_iter.index == len / 2 - 1 - j); 2286 CX_TEST_ASSERT(mut_iter.index == len / 2 - 1 - j);
2299 CX_TEST_ASSERT(*x == testdata[i - 1]); 2287 CX_TEST_ASSERT(*x == testdata[i - 1]);
2300 if (i % 2 == 0) cxIteratorFlagRemoval(mut_iter); 2288 if (i % 2 == 0) cxIteratorFlagRemoval(mut_iter);
2301 i--; 2289 i--;
2316 for (size_t i = 0; i < 5; i++) { 2304 for (size_t i = 0; i < 5; i++) {
2317 cxListAdd(list, &fivenums[i]); 2305 cxListAdd(list, &fivenums[i]);
2318 } 2306 }
2319 int newdata[] = array_init(10, 20, 30, 40, 50); 2307 int newdata[] = array_init(10, 20, 30, 40, 50);
2320 2308
2321 CxIterator iter = cxListMutIteratorAt(list, 2); 2309 CxIterator iter = cxListIteratorAt(list, 2);
2322 CX_TEST_ASSERT(cxIteratorValid(iter)); 2310 CX_TEST_ASSERT(cxIteratorValid(iter));
2323 CX_TEST_ASSERT(iter.index == 2); 2311 CX_TEST_ASSERT(iter.index == 2);
2324 CX_TEST_ASSERT(*(int *) cxIteratorCurrent(iter) == 2); 2312 CX_TEST_ASSERT(*(int *) cxIteratorCurrent(iter) == 2);
2325 CX_TEST_ASSERT(iter.elem_count == 5); 2313 CX_TEST_ASSERT(iter.elem_count == 5);
2326 cxListInsertAfter(&iter, &newdata[0]); 2314 cxListInsertAfter(&iter, &newdata[0]);
2332 CX_TEST_ASSERT(cxIteratorValid(iter)); 2320 CX_TEST_ASSERT(cxIteratorValid(iter));
2333 CX_TEST_ASSERT(iter.index == 3); 2321 CX_TEST_ASSERT(iter.index == 3);
2334 CX_TEST_ASSERT(*(int *) cxIteratorCurrent(iter) == 2); 2322 CX_TEST_ASSERT(*(int *) cxIteratorCurrent(iter) == 2);
2335 CX_TEST_ASSERT(iter.elem_count == 7); 2323 CX_TEST_ASSERT(iter.elem_count == 7);
2336 2324
2337 iter = cxListMutIterator(list); 2325 iter = cxListIterator(list);
2338 cxListInsertBefore(&iter, &newdata[2]); 2326 cxListInsertBefore(&iter, &newdata[2]);
2339 CX_TEST_ASSERT(cxIteratorValid(iter)); 2327 CX_TEST_ASSERT(cxIteratorValid(iter));
2340 CX_TEST_ASSERT(iter.index == 1); 2328 CX_TEST_ASSERT(iter.index == 1);
2341 CX_TEST_ASSERT(*(int *) cxIteratorCurrent(iter) == 0); 2329 CX_TEST_ASSERT(*(int *) cxIteratorCurrent(iter) == 0);
2342 CX_TEST_ASSERT(iter.elem_count == 8); 2330 CX_TEST_ASSERT(iter.elem_count == 8);
2343 iter = cxListMutIteratorAt(list, cxListSize(list)); 2331 iter = cxListIteratorAt(list, cxListSize(list));
2344 cxListInsertBefore(&iter, &newdata[3]); 2332 cxListInsertBefore(&iter, &newdata[3]);
2345 CX_TEST_ASSERT(!cxIteratorValid(iter)); 2333 CX_TEST_ASSERT(!cxIteratorValid(iter));
2346 CX_TEST_ASSERT(iter.index == 9); 2334 CX_TEST_ASSERT(iter.index == 9);
2347 CX_TEST_ASSERT(iter.elem_count == 9); 2335 CX_TEST_ASSERT(iter.elem_count == 9);
2348 iter = cxListMutIteratorAt(list, cxListSize(list)); 2336 iter = cxListIteratorAt(list, cxListSize(list));
2349 cxListInsertAfter(&iter, &newdata[4]); 2337 cxListInsertAfter(&iter, &newdata[4]);
2350 CX_TEST_ASSERT(!cxIteratorValid(iter)); 2338 CX_TEST_ASSERT(!cxIteratorValid(iter));
2351 CX_TEST_ASSERT(iter.index == 10); 2339 CX_TEST_ASSERT(iter.index == 10);
2352 CX_TEST_ASSERT(iter.elem_count == 10); 2340 CX_TEST_ASSERT(iter.elem_count == 10);
2353 2341
2442 cxListRemove(list, 47); 2430 cxListRemove(list, 47);
2443 CX_TEST_ASSERT(2 == destr_test_ctr); 2431 CX_TEST_ASSERT(2 == destr_test_ctr);
2444 CX_TEST_ASSERT(testdata[48] == destr_last_value + off); 2432 CX_TEST_ASSERT(testdata[48] == destr_last_value + off);
2445 CX_TEST_ASSERT(testdata_len - destr_test_ctr == cxListSize(list)); 2433 CX_TEST_ASSERT(testdata_len - destr_test_ctr == cxListSize(list));
2446 2434
2447 CxIterator iter = cxListMutIteratorAt(list, 7); 2435 CxIterator iter = cxListIteratorAt(list, 7);
2448 CX_TEST_ASSERT(iter.elem_count == testdata_len - 2); 2436 CX_TEST_ASSERT(iter.elem_count == testdata_len - 2);
2449 cxIteratorNext(iter); 2437 cxIteratorNext(iter);
2450 CX_TEST_ASSERT(2 == destr_test_ctr); 2438 CX_TEST_ASSERT(2 == destr_test_ctr);
2451 CX_TEST_ASSERT(testdata[48] == destr_last_value + off); 2439 CX_TEST_ASSERT(testdata[48] == destr_last_value + off);
2452 CX_TEST_ASSERT(testdata_len - destr_test_ctr == cxListSize(list)); 2440 CX_TEST_ASSERT(testdata_len - destr_test_ctr == cxListSize(list));
2455 CX_TEST_ASSERT(iter.elem_count == testdata_len - 3); 2443 CX_TEST_ASSERT(iter.elem_count == testdata_len - 3);
2456 CX_TEST_ASSERT(3 == destr_test_ctr); 2444 CX_TEST_ASSERT(3 == destr_test_ctr);
2457 CX_TEST_ASSERT(testdata[8] == destr_last_value + off); 2445 CX_TEST_ASSERT(testdata[8] == destr_last_value + off);
2458 CX_TEST_ASSERT(testdata_len - destr_test_ctr == cxListSize(list)); 2446 CX_TEST_ASSERT(testdata_len - destr_test_ctr == cxListSize(list));
2459 2447
2460 iter = cxListMutBackwardsIteratorAt(list, 5); 2448 iter = cxListBackwardsIteratorAt(list, 5);
2461 cxIteratorNext(iter); 2449 cxIteratorNext(iter);
2462 CX_TEST_ASSERT(3 == destr_test_ctr); 2450 CX_TEST_ASSERT(3 == destr_test_ctr);
2463 CX_TEST_ASSERT(testdata[8] == destr_last_value + off); 2451 CX_TEST_ASSERT(testdata[8] == destr_last_value + off);
2464 CX_TEST_ASSERT(testdata_len - destr_test_ctr == cxListSize(list)); 2452 CX_TEST_ASSERT(testdata_len - destr_test_ctr == cxListSize(list));
2465 cxIteratorFlagRemoval(iter); 2453 cxIteratorFlagRemoval(iter);

mercurial