TEST_C(DequeTests, DequeZipIterNext) { deque_add(deque, "a"); deque_add(deque, "b"); deque_add(deque, "c"); deque_add(deque, "d"); Deque *d2; deque_new(&d2); deque_add(d2, "e"); deque_add(d2, "f"); deque_add(d2, "g"); DequeZipIter zip; deque_zip_iter_init(&zip, deque, d2); size_t i = 0; void *e1, *e2; while (deque_zip_iter_next(&zip, &e1, &e2) != CC_ITER_END) { if (i == 0) { CHECK_EQUAL_C_STRING("a", (char*)e1); CHECK_EQUAL_C_STRING("e", (char*)e2); } if (i == 2) { CHECK_EQUAL_C_STRING("c", (char*)e1); CHECK_EQUAL_C_STRING("g", (char*)e2); } i++; } CHECK_EQUAL_C_INT(3, i); deque_destroy(d2); };
TEST_C(DequeTests, DequeZipIterRemove) { deque_add(deque, "a"); deque_add(deque, "b"); deque_add(deque, "c"); deque_add(deque, "d"); Deque *d2; deque_new(&d2); deque_add(d2, "e"); deque_add(d2, "f"); deque_add(d2, "g"); DequeZipIter zip; deque_zip_iter_init(&zip, deque, d2); void *e1, *e2; void *r1, *r2; while (deque_zip_iter_next(&zip, &e1, &e2) != CC_ITER_END) { if (strcmp((char*) e1, "b") == 0) deque_zip_iter_remove(&zip, &r1, &r2); } CHECK_EQUAL_C_STRING("b", (char*)r1); CHECK_EQUAL_C_STRING("f", (char*)r2); CHECK_EQUAL_C_INT(0, deque_contains(deque, "b")); CHECK_EQUAL_C_INT(0, deque_contains(deque, "f")); CHECK_EQUAL_C_INT(3, deque_size(deque)); CHECK_EQUAL_C_INT(2, deque_size(d2)); deque_destroy(d2); };
TEST_C(DequeTests, DequeZipIterAdd) { deque_add(deque, "a"); deque_add(deque, "b"); deque_add(deque, "c"); deque_add(deque, "d"); Deque *d2; deque_new(&d2); deque_add(d2, "e"); deque_add(d2, "f"); deque_add(d2, "g"); char *h = "h"; char *i = "i"; DequeZipIter zip; deque_zip_iter_init(&zip, deque, d2); void *e1, *e2; while (deque_zip_iter_next(&zip, &e1, &e2) != CC_ITER_END) { if (strcmp((char*) e1, "b") == 0) deque_zip_iter_add(&zip, h, i); } size_t index; deque_index_of(deque, "h", &index); CHECK_EQUAL_C_INT(2, index); deque_index_of(deque, "i", &index); CHECK_EQUAL_C_INT(2, index); deque_index_of(deque, "c", &index); CHECK_EQUAL_C_INT(3, index); CHECK_EQUAL_C_INT(1, deque_contains(deque, "h")); CHECK_EQUAL_C_INT(1, deque_contains(d2, "i")); CHECK_EQUAL_C_INT(5, deque_size(deque)); CHECK_EQUAL_C_INT(4, deque_size(d2)); deque_destroy(d2); };
/** * Outputs the next element pair in the sequence and advances the iterator. * * @param[in] iter Iterator that is being advanced * @param[out] out1 Output of the first queue element * @param[out] out2 Output of the second queue element * * @return CC_OK if a next element pair is returned, or CC_ITER_END if the end of one * of the queues has been reached. */ enum cc_stat queue_zip_iter_next(QueueZipIter *iter, void **out1, void **out2) { return deque_zip_iter_next(&(iter->i), out1, out2); }