2 #include <ccan/tap/tap.h>
3 #include <ccan/deque/deque.h>
4 /* Include the C files directly. */
7 #define malloc(x) malloc(malloc_sz = x)
8 #include <ccan/deque/deque.c>
12 struct quad { int w, x, y, z; } p, q, r, s, *save;
13 assert(sizeof(struct quad) == sizeof(int) * 4);
17 typedef DEQ_WRAP(struct quad) qd_t;
20 ok1(deq_init(a, 4, DEQ_SHRINK_AT_20PCT) == 0);
21 ok1(malloc_sz == sizeof(struct quad) * 4);
23 ok1(a->v && a->deq.head == 0 && a->deq.tail == 0 && a->deq.len == 0 && a->deq.cap == 4 &&
24 a->deq.min == 4 && a->deq.esz == sizeof(struct quad) && a->deq.shrink == DEQ_SHRINK_AT_20PCT);
26 memset(a->v, 0xFF, a->deq.cap * sizeof(struct quad));
28 int chk[12] = { 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3 };
29 p = (struct quad) { 1, 1, 1, 1 };
30 ok1(deq_push(a, p) == 1);
31 ok1(a->v == save && a->deq.head == 0 && a->deq.tail == 1 && a->deq.len == 1 && a->deq.cap == 4);
32 ok1(memcmp(a->v, chk, sizeof(int) * 4) == 0 && memcmp(a->v, chk, sizeof(chk)) != 0);
33 q = (struct quad) { 2, 2, 2, 2 };
34 ok1(deq_push(a, q) == 1);
35 ok1(a->v == save && a->deq.head == 0 && a->deq.tail == 2 && a->deq.len == 2 && a->deq.cap == 4);
36 ok1(memcmp(a->v, chk, sizeof(int) * 8) == 0 && memcmp(a->v, chk, sizeof(chk)) != 0);
37 r = (struct quad) { 3, 3, 3, 3 };
38 ok1(deq_push(a, r) == 1);
39 ok1(a->v == save && a->deq.head == 0 && a->deq.tail == 3 && a->deq.len == 3 && a->deq.cap == 4);
40 ok1(memcmp(a->v, chk, sizeof(int) * 12) == 0);
42 ok1(deq_shift(a, &s) == 1 && s.w == 1 && s.x == 1 && s.y == 1 && s.z == 1);
43 ok1(deq_shift(a, &s) == 1 && s.w == 2 && s.x == 2 && s.y == 2 && s.z == 2);
44 ok1(deq_shift(a, &s) == 1 && s.w == 3 && s.x == 3 && s.y == 3 && s.z == 3);
45 ok1(a->v == save && a->deq.head == 3 && a->deq.tail == 3 && a->deq.len == 0 && a->deq.cap == 4);
50 ok1(a->v == save && a->deq.head == 3 && a->deq.tail == 3 && a->deq.len == 4 && a->deq.cap == 4);
53 ok1(a->v != save && a->deq.head == 0 && a->deq.tail == 5 && a->deq.len == 5 && a->deq.cap == 8);
54 ok1(malloc_sz == sizeof(struct quad) * 8);
57 ok1(a->v == save && a->deq.head == 7 && a->deq.tail == 5 && a->deq.len == 6 && a->deq.cap == 8);