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++; } };
/** * Advances the iterator and sets the out parameter to the value of the * next element in the sequence. * * @param[in] iter the iterator that is being advanced * @param[out] out Pointer to where the next element is set * * @return CC_OK if the iterator was advanced, or CC_ITER_END if the * end of the Queue has been reached. */ enum cc_stat queue_iter_next(QueueIter *iter, void **out) { return deque_iter_next(&(iter->i), out); }