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); |