diff --git a/src/list.c b/src/list.c index f777467..ab4b0d6 100644 --- a/src/list.c +++ b/src/list.c @@ -283,14 +283,9 @@ struct _list* list_slice(struct _list* self, int start, int end, int step) list->compare = self->compare; list->print_obj = self->print_obj; - if (start > size || end > size) - { - goto done; - } - if (step > 0) { - if (start > end) + if (start >= end) { goto done; } @@ -312,7 +307,7 @@ struct _list* list_slice(struct _list* self, int start, int end, int step) } else /*if(step < 0)*/ { - if (start < end) + if (start <= end) { goto done; } diff --git a/test/test_list.c b/test/test_list.c index f82988e..8db9726 100644 --- a/test/test_list.c +++ b/test/test_list.c @@ -451,6 +451,11 @@ static void test_list_slice_empty(void) TEST_ASSERT_TRUE(list2->empty(list2)); list_free(&list2); + list2 = list->slice(list, len, LIST_UNLIMITED, 1); // if start == end + TEST_ASSERT_NOT_NULL(list2); + TEST_ASSERT_TRUE(list2->empty(list2)); + list_free(&list2); + list2 = list->slice(list, 1, 5, -1); // if start < end && step < 0 TEST_ASSERT_NOT_NULL(list2); TEST_ASSERT_TRUE(list2->empty(list2));