singe/thirdparty/uthash/tests/test63.c

129 lines
3.1 KiB
C

#include <stdio.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 *list1, struct List *list2, struct List *els, int n) {
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_ll_concat_case(int a, int b) {
struct List els[] = {
{1, &dummy, &dummy},
{2, &dummy, &dummy},
{3, &dummy, &dummy},
{4, &dummy, &dummy},
{5, &dummy, &dummy},
{6, &dummy, &dummy},
};
struct List *list1 = NULL;
struct List *list2 = NULL;
for (int i = 0; i < a; ++i) {
LL_APPEND(list1, &els[i]);
}
for (int i = 0; i < b; ++i) {
LL_APPEND(list2, &els[i+3]);
}
LL_CONCAT(list1, list2);
printf("### %d %d\n", a, b);
printf("list1 = %d, list2 = %d\n", list1 ? list1->value : -1, list2 ? list2->value : -1);
dump_els(list1, list2, els, 6);
}
static void test_ll_concat() {
printf("## test_ll_concat\n");
for (int a = 0; a <= 2; ++a) {
for (int b = 0; b <= 2; ++b) {
test_ll_concat_case(a, b);
}
}
}
static void test_dl_concat_case(int a, int b) {
struct List els[] = {
{1, &dummy, &dummy},
{2, &dummy, &dummy},
{3, &dummy, &dummy},
{4, &dummy, &dummy},
{5, &dummy, &dummy},
{6, &dummy, &dummy},
};
struct List *list1 = NULL;
struct List *list2 = NULL;
for (int i = 0; i < a; ++i) {
DL_APPEND(list1, &els[i]);
}
for (int i = 0; i < b; ++i) {
DL_APPEND(list2, &els[i+3]);
}
DL_CONCAT(list1, list2);
printf("### %d %d\n", a, b);
printf("list1 = %d, list2 = %d\n", list1 ? list1->value : -1, list2 ? list2->value : -1);
dump_els(list1, list2, els, 6);
}
static void test_dl_concat() {
printf("## test_dl_concat\n");
for (int a = 0; a <= 3; ++a) {
for (int b = 0; b <= 3; ++b) {
test_dl_concat_case(a, b);
}
}
}
static void test_cdl_concat_case(int a, int b) {
struct List els[] = {
{1, &dummy, &dummy},
{2, &dummy, &dummy},
{3, &dummy, &dummy},
{4, &dummy, &dummy},
{5, &dummy, &dummy},
{6, &dummy, &dummy},
};
struct List *list1 = NULL;
struct List *list2 = NULL;
for (int i = 0; i < a; ++i) {
CDL_APPEND(list1, &els[i]);
}
for (int i = 0; i < b; ++i) {
CDL_APPEND(list2, &els[i+3]);
}
CDL_CONCAT(list1, list2);
printf("### %d %d\n", a, b);
printf("list1 = %d, list2 = %d\n", list1 ? list1->value : -1, list2 ? list2->value : -1);
dump_els(list1, list2, els, 6);
}
static void test_cdl_concat() {
printf("## test_cdl_concat\n");
for (int a = 0; a <= 3; ++a) {
for (int b = 0; b <= 3; ++b) {
test_cdl_concat_case(a, b);
}
}
}
int main()
{
test_ll_concat();
test_dl_concat();
test_cdl_concat();
return 0;
}