Commit da823fa5 authored by Linshizhi's avatar Linshizhi

Add random access interface to list.

parent 664dcc0c
......@@ -70,3 +70,17 @@ void* listPop(List *l) {
return v;
}
void* listGet(List *l, int idx) {
int i = 0;
if (listEmpty(l))
return NULL;
Node *current = listHead(l);
while (current && ++i <= idx)
current = nodeNext(current);
return current->val;
}
......@@ -44,6 +44,7 @@ List* createList(void);
void destroyList(List **l);
void listPush(List *l, void *val);
void* listPop(List *l);
void* listGet(List *l, int idx);
......
......@@ -81,3 +81,28 @@ CTEST2(LIST_TEST, POP_FROM_EMPTY_LIST) {
LIST_EMPTY_STATUS_CHECK(data->l);
}
CTEST2(LIST_TEST, RANDOM_ACCESS) {
int *val = NULL;
for (int i = 0; i < 1000; ++i) {
val = (int*)malloc(sizeof(int));
*val = i;
listPush(data->l, val);
}
for (int i = 0; i < 1000; ++i) {
val = listGet(data->l, i);
printf("%d\n", *(int*)val);
ASSERT_EQUAL(*(int*)val, i);
}
}
CTEST2(LIST_TEST, RANDOM_ACCESS_EMPTY) {
int *val = NULL;
for (int i = 0; i < 256; ++i) {
val = listGet(data->l, i);
ASSERT_NULL(val);
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment