singe/thirdparty/uthash/tests/test102.c

68 lines
1.4 KiB
C

#include <assert.h>
#include <stdio.h>
#include <stdlib.h>
#include "utlist.h"
struct List {
int value;
struct List *prev;
struct List *next;
};
struct List dummy = {9, NULL, NULL};
static void dump_els(struct List *list, struct List *els, int n) {
printf("--- list = &els[%d]\n", (int)(list - els));
for (int i=0; i < n; ++i) {
printf("%d (prev %d next %d)\n", els[i].value,
els[i].prev ? els[i].prev->value : -1,
els[i].next ? els[i].next->value : -1);
}
}
static void test_dl_reverse() {
struct List els[] = {
{0, &dummy, &dummy},
{1, &dummy, &dummy},
{2, &dummy, &dummy},
{3, &dummy, &dummy},
{4, &dummy, &dummy},
};
struct List *list = NULL;
int i;
DL_REVERSE(list);
assert(list == NULL);
for (i = 0; i < 5; ++i) {
DL_REVERSE(list);
DL_PREPEND(list, &els[i]);
dump_els(list, els, 5);
}
}
static void test_cdl_reverse() {
struct List els[] = {
{0, &dummy, &dummy},
{1, &dummy, &dummy},
{2, &dummy, &dummy},
{3, &dummy, &dummy},
{4, &dummy, &dummy},
};
struct List *list = NULL;
int i;
CDL_REVERSE(list);
assert(list == NULL);
for (i = 0; i < 5; ++i) {
CDL_REVERSE(list);
CDL_PREPEND(list, &els[i]);
dump_els(list, els, 5);
}
}
int main() {
test_dl_reverse();
test_cdl_reverse();
}