1 #include <ccan/deque/deque.h>
2 #include <ccan/tap/tap.h>
11 ok1(deq_new(a, 4, DEQ_SHRINK_AT_20PCT) == 0);
12 ok1(a->v && a->deq.head == 0 && a->deq.tail == 0 && a->deq.len == 0 && a->deq.cap == 4 &&
13 a->deq.min == 4 && a->deq.esz == 1 && a->deq.shrink == DEQ_SHRINK_AT_20PCT);
15 memset(a->v, 0, a->deq.cap);
16 ok1(deq_len(a) == 0 && deq_cap(a) == 4);
18 ok1(deq_push(a, 'a') == 1);
19 ok1(a->v == save && a->deq.head == 0 && a->deq.tail == 1 && a->deq.len == 1 && a->deq.cap == 4);
21 ok1(t = '~' && deq_first(a, &t) == 1 && t == 'a');
22 ok1(t = '~' && deq_last(a, &t) == 1 && t == 'a');
23 ok1(deq_len(a) == 1 && deq_cap(a) == 4);
25 ok1(t = '~' && deq_pop(a, &t) == 1 && t == 'a');
26 ok1(a->v == save && a->deq.head == 0 && a->deq.tail == 0 && a->deq.len == 0 && a->deq.cap == 4);
28 ok1(deq_unshift(a, 'a') == 1);
29 ok1(a->v == save && a->deq.head == 3 && a->deq.tail == 0 && a->deq.len == 1 && a->deq.cap == 4);
31 ok1(t = '~' && deq_first(a, &t) == 1 && t == 'a');
32 ok1(t = '~' && deq_last(a, &t) == 1 && t == 'a');
34 ok1(t = '~' && deq_shift(a, &t) == 1 && t == 'a');
35 ok1(a->v == save && a->deq.head == 0 && a->deq.tail == 0 && a->deq.len == 0 && a->deq.cap == 4);
37 memset(a->v, 0, a->deq.cap);
42 ok1(a->v == save && a->deq.head == 0 && a->deq.tail == 0 && a->deq.len == 4 && a->deq.cap == 4);
43 ok1(strncmp("abcd", a->v + a->deq.head, a->deq.len) == 0);
44 ok1(t = '~' && deq_first(a, &t) == 1 && t == 'a');
45 ok1(t = '~' && deq_last(a, &t) == 1 && t == 'd');
50 ok1(a->v == save && a->deq.head == 0 && a->deq.tail == 5 && a->deq.len == 5 && a->deq.cap == 8);
51 ok1(strncmp("abcde", a->v + a->deq.head, a->deq.len) == 0);
52 ok1(t = '~' && deq_first(a, &t) == 1 && t == 'a');
53 ok1(t = '~' && deq_last(a, &t) == 1 && t == 'e');
54 ok1(deq_len(a) == 5 && deq_cap(a) == 8);
60 ok1(a->v == save && a->deq.head == 0 && a->deq.tail == 0 && a->deq.len == 8 && a->deq.cap == 8);
61 ok1(strncmp("abcdefgh", a->v + a->deq.head, a->deq.len) == 0);
63 ok1(t = '~' && deq_shift(a, &t) == 1 && t == 'a');
64 ok1(t = '~' && deq_shift(a, &t) == 1 && t == 'b');
65 ok1(t = '~' && deq_shift(a, &t) == 1 && t == 'c');
66 ok1(t = '~' && deq_shift(a, &t) == 1 && t == 'd');
67 ok1(a->v == save && a->deq.head == 4 && a->deq.tail == 0 && a->deq.len == 4 && a->deq.cap == 8);
68 ok1(strncmp("efgh", a->v + a->deq.head, a->deq.len) == 0);
69 ok1(t = '~' && deq_first(a, &t) == 1 && t == 'e');
70 ok1(t = '~' && deq_last(a, &t) == 1 && t == 'h');
76 ok1(a->v == save && a->deq.head == 4 && a->deq.tail == 4 && a->deq.len == 8 && a->deq.cap == 8);
77 ok1(strncmp("ijklefgh", a->v, a->deq.len) == 0);
82 ok1(a->v == save && a->deq.head == 0 && a->deq.tail == 9 && a->deq.len == 9 && a->deq.cap == 16);
83 ok1(strncmp("efghijklm", a->v + a->deq.head, a->deq.len) == 0);
86 for (i = 9, t = '!'; i <= 128; i++, t = (t == '~' ? '!' : t + 1))
90 ok1(a->v == save && a->deq.head == 0 && a->deq.tail == 129 && a->deq.len == 129 && a->deq.cap == 256);
92 for(j = 0; i > 52; i--, j++)
94 ok1(a->v == save && a->deq.head == j && a->deq.tail == 129 && a->deq.len == 52 && a->deq.cap == 256);
98 ok1(a->v == save && a->deq.head == 1 && a->deq.tail == 52 && a->deq.len == 51 && a->deq.cap == 128);
99 ok1(strncmp("fghijklmnopqrstuvwxyz{|}~!\"#$%&'()*+,-./0123456789:", a->v + a->deq.head, a->deq.len) == 0);
101 a->deq.shrink = DEQ_SHRINK_IF_EMPTY;
102 for(i = a->deq.len; i > 1; i--)
104 ok1(a->v == save && a->deq.head == 51 && a->deq.tail == 52 && a->deq.len == 1 && a->deq.cap == 128);
108 ok1(a->v == save && a->deq.head == 1 && a->deq.tail == 1 && a->deq.len == 0 && a->deq.cap == a->deq.min);
112 ok1(deq_unshift(a, 'a') == 1);
114 memset(a->v, 0, a->deq.cap - 1);
115 ok1(t = '~' && deq_pop(a, &t) == 1 && t == 'a');
116 ok1(a->v == save && a->deq.head == 3 && a->deq.tail == 3 && a->deq.len == 0 && a->deq.cap == 4);
124 ok1(strncmp("ACDB", a->v, 4) == 0);
125 ok1(a->v == save && a->deq.head == 2 && a->deq.tail == 2 && a->deq.len == 4 && a->deq.cap == 4);
126 ok1(t = '~' && deq_pop(a, &t) == 1 && t == 'C');
127 ok1(t = '~' && deq_shift(a, &t) == 1 && t == 'D');
128 ok1(t = '~' && deq_shift(a, &t) == 1 && t == 'B');
129 ok1(t = '~' && deq_pop(a, &t) == 1 && t == 'A');
131 ok1(deq_pop(a, &t) == 0);
132 ok1(deq_shift(a, &t) == 0);
137 return exit_status();