diff --git a/src/lib/list.c b/src/lib/list.c index ee599b3..319e350 100644 --- a/src/lib/list.c +++ b/src/lib/list.c @@ -54,7 +54,7 @@ void *list_insert(void *list_ptr, void *elem, int n) { } } - unsigned char *array = list_ptr; + unsigned char *array = (unsigned char *) list + sizeof(list_meta_t); if (n < list->size) memmove(array + (n + 1) * list->elem_size, array + n * list->elem_size, (list->size - n) * list->elem_size); diff --git a/test/test_list.c b/test/test_list.c index 79d7280..8266a92 100644 --- a/test/test_list.c +++ b/test/test_list.c @@ -60,19 +60,28 @@ Test(list, resize) { list = list_append(list, &v); cr_assert_not_null(list); cr_assert_eq(list_size(list), i + 1); + for (int j = 0; j <= i; j++) { + cr_assert_eq(list[j], 9182 - j); + } } for (int i = 0; i < 4096; i++) { list = list_remove(list, -1); cr_assert_not_null(list); cr_assert_eq(list_size(list), 4096 - i - 1); + for (int j = 0; j < 4096 - i; j++) { + cr_assert_eq(list[j], 9182 - j); + } } for (int i = 0; i < 4096; i++) { - v = 9182 - i; + v = 47391 - i; list = list_append(list, &v); cr_assert_not_null(list); cr_assert_eq(list_size(list), i + 1); + for (int j = 0; j <= i; j++) { + cr_assert_eq(list[j], 47391 - j); + } } list = list_clear(list);