1 #include <ccan/deque/deque.h>
2 /* Include the C files directly. */
3 #include <ccan/deque/deque.c>
4 #include <ccan/tap/tap.h>
13 ok1(deq_new(a, 4, DEQ_SHRINK_AT_20PCT) == 0);
14 ok1(a->v && a->deq.head == 0 && a->deq.tail == 0 && a->deq.len == 0 && a->deq.cap == 4 &&
15 a->deq.min == 4 && a->deq.esz == 1 && a->deq.shrink == DEQ_SHRINK_AT_20PCT);
17 memset(a->v, 0, a->deq.cap);
18 ok1(deq_len(a) == 0 && deq_cap(a) == 4);
20 ok1(deq_push(a, 'a') == 1);
21 ok1(a->v == save && a->deq.head == 0 && a->deq.tail == 1 && a->deq.len == 1 && a->deq.cap == 4);
23 ok1(t = '~' && deq_first(a, &t) == 1 && t == 'a');
24 ok1(t = '~' && deq_last(a, &t) == 1 && t == 'a');
25 ok1(deq_len(a) == 1 && deq_cap(a) == 4);
27 ok1(t = '~' && deq_pop(a, &t) == 1 && t == 'a');
28 ok1(a->v == save && a->deq.head == 0 && a->deq.tail == 0 && a->deq.len == 0 && a->deq.cap == 4);
30 ok1(deq_unshift(a, 'a') == 1);
31 ok1(a->v == save && a->deq.head == 3 && a->deq.tail == 0 && a->deq.len == 1 && a->deq.cap == 4);
33 ok1(t = '~' && deq_first(a, &t) == 1 && t == 'a');
34 ok1(t = '~' && deq_last(a, &t) == 1 && t == 'a');
36 ok1(t = '~' && deq_shift(a, &t) == 1 && t == 'a');
37 ok1(a->v == save && a->deq.head == 0 && a->deq.tail == 0 && a->deq.len == 0 && a->deq.cap == 4);
39 memset(a->v, 0, a->deq.cap);
44 ok1(a->v == save && a->deq.head == 0 && a->deq.tail == 0 && a->deq.len == 4 && a->deq.cap == 4);
45 ok1(strncmp("abcd", a->v + a->deq.head, a->deq.len) == 0);
46 ok1(t = '~' && deq_first(a, &t) == 1 && t == 'a');
47 ok1(t = '~' && deq_last(a, &t) == 1 && t == 'd');
52 ok1(a->v == save && a->deq.head == 0 && a->deq.tail == 5 && a->deq.len == 5 && a->deq.cap == 8);
53 ok1(strncmp("abcde", a->v + a->deq.head, a->deq.len) == 0);
54 ok1(t = '~' && deq_first(a, &t) == 1 && t == 'a');
55 ok1(t = '~' && deq_last(a, &t) == 1 && t == 'e');
56 ok1(deq_len(a) == 5 && deq_cap(a) == 8);
62 ok1(a->v == save && a->deq.head == 0 && a->deq.tail == 0 && a->deq.len == 8 && a->deq.cap == 8);
63 ok1(strncmp("abcdefgh", a->v + a->deq.head, a->deq.len) == 0);
65 ok1(t = '~' && deq_shift(a, &t) == 1 && t == 'a');
66 ok1(t = '~' && deq_shift(a, &t) == 1 && t == 'b');
67 ok1(t = '~' && deq_shift(a, &t) == 1 && t == 'c');
68 ok1(t = '~' && deq_shift(a, &t) == 1 && t == 'd');
69 ok1(a->v == save && a->deq.head == 4 && a->deq.tail == 0 && a->deq.len == 4 && a->deq.cap == 8);
70 ok1(strncmp("efgh", a->v + a->deq.head, a->deq.len) == 0);
71 ok1(t = '~' && deq_first(a, &t) == 1 && t == 'e');
72 ok1(t = '~' && deq_last(a, &t) == 1 && t == 'h');
78 ok1(a->v == save && a->deq.head == 4 && a->deq.tail == 4 && a->deq.len == 8 && a->deq.cap == 8);
79 ok1(strncmp("ijklefgh", a->v, a->deq.len) == 0);
84 ok1(a->v == save && a->deq.head == 0 && a->deq.tail == 9 && a->deq.len == 9 && a->deq.cap == 16);
85 ok1(strncmp("efghijklm", a->v + a->deq.head, a->deq.len) == 0);
88 for (i = 9, t = '!'; i <= 128; i++, t = (t == '~' ? '!' : t + 1))
92 ok1(a->v == save && a->deq.head == 0 && a->deq.tail == 129 && a->deq.len == 129 && a->deq.cap == 256);
94 for(j = 0; i > 52; i--, j++)
96 ok1(a->v == save && a->deq.head == j && a->deq.tail == 129 && a->deq.len == 52 && a->deq.cap == 256);
100 ok1(a->v == save && a->deq.head == 1 && a->deq.tail == 52 && a->deq.len == 51 && a->deq.cap == 128);
101 ok1(strncmp("fghijklmnopqrstuvwxyz{|}~!\"#$%&'()*+,-./0123456789:", a->v + a->deq.head, a->deq.len) == 0);
103 a->deq.shrink = DEQ_SHRINK_IF_EMPTY;
104 for(i = a->deq.len; i > 1; i--)
106 ok1(a->v == save && a->deq.head == 51 && a->deq.tail == 52 && a->deq.len == 1 && a->deq.cap == 128);
110 ok1(a->v == save && a->deq.head == 1 && a->deq.tail == 1 && a->deq.len == 0 && a->deq.cap == a->deq.min);
114 ok1(deq_unshift(a, 'a') == 1);
116 memset(a->v, 0, a->deq.cap - 1);
117 ok1(t = '~' && deq_pop(a, &t) == 1 && t == 'a');
118 ok1(a->v == save && a->deq.head == 3 && a->deq.tail == 3 && a->deq.len == 0 && a->deq.cap == 4);
126 ok1(strncmp("ACDB", a->v, 4) == 0);
127 ok1(a->v == save && a->deq.head == 2 && a->deq.tail == 2 && a->deq.len == 4 && a->deq.cap == 4);
128 ok1(t = '~' && deq_pop(a, &t) == 1 && t == 'C');
129 ok1(t = '~' && deq_shift(a, &t) == 1 && t == 'D');
130 ok1(t = '~' && deq_shift(a, &t) == 1 && t == 'B');
131 ok1(t = '~' && deq_pop(a, &t) == 1 && t == 'A');
133 ok1(deq_pop(a, &t) == 0);
134 ok1(deq_shift(a, &t) == 0);
139 return exit_status();