TEST_C(DequeTests, DequeIteratorNext) { int a = 1; int b = 2; int c = 3; int d = 4; int e = 5; int f = 6; deque_add(deque, &a); deque_add(deque, &b); deque_add(deque, &c); deque_add(deque, &d); deque_add(deque, &e); deque_add(deque, &f); DequeIter iter; deque_iter_init(&iter, deque); size_t i = 0; void *el; while (deque_iter_next(&iter, &el) != CC_ITER_END) { void *k; deque_get_at(deque, i, &k); CHECK_EQUAL_C_POINTER(k, el); i++; CHECK_EQUAL_C_INT(i, iter.index); } };
TEST_C(DequeTests, DequeIteratorAdd) { int a = 1; int b = 2; int c = 3; int d = 4; int e = 5; int f = 6; int g = 7; deque_add(deque, &a); deque_add(deque, &b); deque_add(deque, &c); deque_add(deque, &d); deque_add(deque, &e); deque_add(deque, &f); DequeIter iter; deque_iter_init(&iter, deque); size_t i = 0; int *el; CHECK_EQUAL_C_INT(6, deque_size(deque)); while (deque_iter_next(&iter, (void*) &el) != CC_ITER_END) { if (*el == d) deque_iter_add(&iter, &g); if (i >= 3) { CHECK_EQUAL_C_INT(i, deque_iter_index(&iter) - 1); } i++; } CHECK_EQUAL_C_INT(7, deque_size(deque)); void *ret; deque_get_at(deque, 4, &ret); CHECK_EQUAL_C_INT(g, *(int*)ret); };
TEST_C(DequeTests, DequeIteratorRemove) { int a = 1; int b = 2; int c = 3; int d = 4; int e = 5; int f = 6; deque_add(deque, &a); deque_add(deque, &b); deque_add(deque, &c); deque_add(deque, &d); deque_add(deque, &e); deque_add(deque, &f); DequeIter iter; deque_iter_init(&iter, deque); size_t i = 0; void *el; while (deque_iter_next(&iter, &el) != CC_ITER_END) { if (i == 3) deque_iter_remove(&iter, NULL); if (i > 2) { CHECK_EQUAL_C_INT(5, deque_size(deque)); } else { CHECK_EQUAL_C_INT(6, deque_size(deque)); } if (i >= 3) { CHECK_EQUAL_C_INT(i-1, deque_iter_index(&iter)); } i++; } };
/** * Initializes the iterator. * * @param[in] iter the iterator that is being initialized * @param[in] queue the queue to iterate over */ void queue_iter_init(QueueIter *iter, Queue *queue) { deque_iter_init(&(iter->i), queue->d); }