summaryrefslogtreecommitdiff
path: root/test.c
blob: 6e3ccd6b5d0c23122dccfa211e6e36dcb509a442 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
#include <assert.h>
#include <stdio.h>

#include "dll.h"

#define NUM_NODES	100

DLL_INIT(foo);

typedef struct entry_t {
	dll_t	node;
	int	id;
} entry_t;


int main(int argc, char *argv[])
{
	entry_t	entries[NUM_NODES], *entry, *_entry;
	dll_t	nodes[NUM_NODES];
	dll_t	*tmp, *_tmp;

	for (int i = 0; i < NUM_NODES; i++) {
		dll_pre(&foo, &nodes[i]);
		printf("appended %i:%p to tail\n", i, &nodes[i]);
	}

	DLL_FOR_EACH(&foo, tmp)
		printf("node=%p\n", tmp);

	for (int i = 0; i < NUM_NODES; i++) {
		if (!(i % 2))
			continue;

		printf("deleted %i:%p\n", i, dll_del(&nodes[i]));
	}

	DLL_FOR_EACH(&foo, tmp)
		printf("node=%p\n", tmp);

	assert(!dll_empty(&foo));

	DLL_FOR_EACH_SAFE(&foo, tmp, _tmp)
		printf("deleted %p\n", dll_del(tmp));

	DLL_FOR_EACH(&foo, tmp)
		printf("!!!notempty!!! node=%p\n", tmp);

	assert(dll_empty(&foo));

	for (int i = 0; i < NUM_NODES; i++) {
		dll_pre(&foo, &entries[i].node);
		entries[i].id = i;
	}

	DLL_FOR_EACH_ENTRY(&foo, entry, entry_t, node) {
		printf("id=%i entry=%p node=%p\n",
			entry->id, entry, &entry->node);
	}

	for (int i = 0; i < NUM_NODES; i++) {
		if (!(i % 2))
			continue;

		printf("deleted %i:%p\n", i, dll_del(&entries[i].node));
	}

	DLL_FOR_EACH_ENTRY(&foo, entry, entry_t, node) {
		printf("id=%i entry=%p node=%p\n",
			entry->id, entry, &entry->node);
	}

	DLL_FOR_EACH_ENTRY_SAFE(&foo, entry, _entry, entry_t, node)
		printf("deleted %p\n", dll_del(&entry->node));

	DLL_FOR_EACH_ENTRY(&foo, entry, entry_t, node)
		printf("!!!notempty!!! entry=%p\n", entry);

	assert(dll_empty(&foo));
}
© 2021 All Rights Reserved