diff --git a/include/unicstl_config.h b/include/unicstl_config.h index 994abb7..451f88c 100644 --- a/include/unicstl_config.h +++ b/include/unicstl_config.h @@ -27,7 +27,8 @@ * @brief debug * */ -#define NDEBUG +#define NDEBUG // assert disable + #define UNICSTL_DEBUG #ifdef UNICSTL_DEBUG diff --git a/src/stack.c b/src/stack.c index 544fb73..1e346b8 100644 --- a/src/stack.c +++ b/src/stack.c @@ -300,6 +300,9 @@ static bool stack_init(struct _stack* self, uint32_t obj_size) const void* stack_iter_next(struct _iterator* iter) { + assert(iter != NULL); + assert(iter->parent != NULL); + stack_t self = (stack_t)iter->parent; void *obj = self->_head->obj + self->_iter._cur * self->_obj_size; self->_iter._cur += 1; @@ -308,8 +311,10 @@ const void* stack_iter_next(struct _iterator* iter) bool stack_iter_hasnext(struct _iterator* iter) { - stack_t self = (stack_t)iter->parent; + assert(iter != NULL); + assert(iter->parent != NULL); + stack_t self = (stack_t)iter->parent; if(self->_iter._cur < self->size(self)) { return true; @@ -320,15 +325,11 @@ bool stack_iter_hasnext(struct _iterator* iter) iterator_t stack_iter(struct _stack* self) { assert(self != NULL); - if (self == NULL) - { - return NULL; - } + self->_iter.parent = self; self->_iter._cur = 0; return &self->_iter; } - static bool stack_init2(struct _stack* self, uint32_t obj_size, uint32_t capacity) { assert(self != NULL); diff --git a/test/test_stack.c b/test/test_stack.c index 98caa98..c8376e2 100644 --- a/test/test_stack.c +++ b/test/test_stack.c @@ -440,6 +440,44 @@ static void test_stack2_struct(void) TEST_ASSERT_NULL(stack); } +static void test_stack2_iter(void) +{ + uint32_t i = 0; + int data[] = { 1,2,3,4,5,6,7,8,9,10 }; + int temp = 0; + uint32_t len = sizeof(data) / sizeof(data[0]); + uint32_t capacity = len; + + stack_t stack = NULL; + stack = stack_new2(sizeof(int), capacity); + TEST_ASSERT_NOT_NULL(stack); + stack->print_obj = print_num; + + TEST_ASSERT_FALSE(stack->peek(stack, &temp)); + TEST_ASSERT_TRUE(stack->clear(stack)); + for (i = 0; i < len; i++) + { + TEST_ASSERT_TRUE(stack->push(stack, &data[i])); + TEST_ASSERT_EQUAL_INT(i + 1, stack->size(stack)); + + TEST_ASSERT_TRUE(stack->peek(stack, &temp)); + TEST_ASSERT_EQUAL_INT(data[i], temp); + } + + iterator_t iter = stack->iter(stack); + TEST_ASSERT_NOT_NULL(iter); + i = 0; + while(iter->hasnext(iter)) + { + temp = *(int *)iter->next(iter); + printf("%d ", temp); + TEST_ASSERT_EQUAL_INT(data[len - 1 - i], temp); + i++; + } + stack_free(&stack); + TEST_ASSERT_NULL(stack); +} + void test_stack(void) { UnitySetTestFile(__FILE__); @@ -454,4 +492,6 @@ void test_stack(void) RUN_TEST(test_stack2_num); RUN_TEST(test_stack2_struct); + + RUN_TEST(test_stack2_iter); }