d15d2e0a0cb8af19a124b211fcfbf33e5e88ebed
[ircu2.10.12-pk.git] / libs / dbprim / tests / test-harness.dat
1 # Copyright (C) 2002 by Kevin L. Mitchell <klmitch@mit.edu>
2 #
3 # This library is free software; you can redistribute it and/or
4 # modify it under the terms of the GNU Library General Public
5 # License as published by the Free Software Foundation; either
6 # version 2 of the License, or (at your option) any later version.
7 #
8 # This library is distributed in the hope that it will be useful,
9 # but WITHOUT ANY WARRANTY; without even the implied warranty of
10 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
11 # Library General Public License for more details.
12 #
13 # You should have received a copy of the GNU Library General Public
14 # License along with this library; if not, write to the Free
15 # Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
16 # MA 02111-1307, USA
17 #
18 # @(#)$Id: test-harness.dat,v 1.1 2003-03-07 02:36:11 klmitch Exp $
19
20 program t_ll_init t_ll_init \
21         "Test linked list head initializations"
22
23 test ll_static_magic            t_ll_init       PASS    \
24         "Test static initialization: magic number"
25 test ll_static_count            t_ll_init       PASS    \
26         "Test static initialization: count"
27 test ll_static_first            t_ll_init       PASS    \
28         "Test static initialization: pointer to first"
29 test ll_static_last             t_ll_init       PASS    \
30         "Test static initialization: pointer to last"
31 test ll_init_nohead             t_ll_init       PASS    \
32         "Test that ll_init() handles no arguments properly"
33 test ll_dynamic                 t_ll_init       PASS    \
34         "Test that ll_init() with proper arguments returns success"
35 test ll_dynamic_magic           t_ll_init       PASS    \
36         "Test dynamic initialization: magic number"
37 test ll_dynamic_count           t_ll_init       PASS    \
38         "Test dynamic initialization: count"
39 test ll_dynamic_first           t_ll_init       PASS    \
40         "Test dynamic initialization: pointer to first"
41 test ll_dynamic_last            t_ll_init       PASS    \
42         "Test dynamic initialization: pointer to last"
43
44 program t_le_init t_le_init \
45         "Test linked list element initializations"
46
47 test le_static_magic            t_le_init       PASS    \
48         "Test static initialization: magic number"
49 test le_static_next             t_le_init       PASS    \
50         "Test static initialization: pointer to next"
51 test le_static_prev             t_le_init       PASS    \
52         "Test static initialization: pointer to previous"
53 test le_static_object           t_le_init       PASS    \
54         "Test static initialization: pointer to object"
55 test le_static_head             t_le_init       PASS    \
56         "Test static initialization: pointer to head"
57 test le_static_flags            t_le_init       PASS    \
58         "Test static initialization: flags"
59 test le_init_nothing            t_le_init       PASS    \
60         "Test that le_init() handles no arguments properly"
61 test le_init_objectonly         t_le_init       PASS    \
62         "Test that le_init() handles object argument only properly"
63 test le_init_elemonly           t_le_init       PASS    \
64         "Test that le_init() handles element argument only properly"
65 test le_dynamic                 t_le_init       PASS    \
66         "Test that le_init() with proper arguments returns success"
67 test le_dynamic_magic           t_le_init       PASS    \
68         "Test dynamic initialization: magic number"
69 test le_dynamic_next            t_le_init       PASS    \
70         "Test dynamic initialization: pointer to next"
71 test le_dynamic_prev            t_le_init       PASS    \
72         "Test dynamic initialization: pointer to previous"
73 test le_dynamic_object          t_le_init       PASS    \
74         "Test dynamic initialization: pointer to object"
75 test le_dynamic_head            t_le_init       PASS    \
76         "Test dynamic initialization: pointer to head"
77 test le_dynamic_flags           t_le_init       PASS    \
78         "Test dynamic initialization: flags"
79
80 program t_ll_add t_ll_add \
81         "Test linked list element insertion"
82
83 test ll_add_noargs              t_ll_add        PASS    \
84         "Test ll_add() with no valid arguments"
85 test ll_add_badlist             t_ll_add        PASS    \
86         "Test ll_add() with bad list"
87 test ll_add_badnew              t_ll_add        PASS    \
88         "Test ll_add() with bad new element"
89 test ll_add_badelem             t_ll_add        PASS    \
90         "Test ll_add() with bad original element"
91 test ll_add_before_noelem       t_ll_add        PASS    \
92         "Test ll_add() with LINK_LOC_BEFORE with no original element"
93 test ll_add_after_noelem        t_ll_add        PASS    \
94         "Test ll_add() with LINK_LOC_AFTER with no original element"
95
96 test ll_add_l0e0                t_ll_add        PASS    \
97         "Test ll_add() successful addition (1)"
98
99 test list_l0e0_count            t_ll_add        PASS    \
100         "Test list head element count correct after insert (1)"
101 test list_l0e0_first            t_ll_add        PASS    \
102         "Test list head first element pointers correct after insert (1)"
103 test list_l0e0_last             t_ll_add        PASS    \
104         "Test list head last element pointers correct after insert (1)"
105
106 test elem_l0e0_next             t_ll_add        PASS    \
107         "Test element next pointers correct after insert (1/0)"
108 test elem_l0e0_prev             t_ll_add        PASS    \
109         "Test element prev pointers correct after insert (1/0)"
110 test elem_l0e0_head             t_ll_add        PASS    \
111         "Test element head pointers correct after insert (1/0)"
112
113 test ll_add_l1e0                t_ll_add        PASS    \
114         "Test ll_add() correctly rejects insertions of busy items"
115
116 test ll_add_l1e1                t_ll_add        PASS    \
117         "Test ll_add() successful addition (2)"
118
119 test list_l1e1_count            t_ll_add        PASS    \
120         "Test list head element count correct after insert (2)"
121 test list_l1e1_first            t_ll_add        PASS    \
122         "Test list head first element pointers correct after insert (2)"
123 test list_l1e1_last             t_ll_add        PASS    \
124         "Test list head last element pointers correct after insert (2)"
125
126 test elem_l1e1_next             t_ll_add        PASS    \
127         "Test element next pointers correct after insert (2/1)"
128 test elem_l1e1_prev             t_ll_add        PASS    \
129         "Test element prev pointers correct after insert (2/1)"
130 test elem_l1e1_head             t_ll_add        PASS    \
131         "Test element head pointers correct after insert (2/1)"
132
133 test ll_add_l0e2a1              t_ll_add        PASS    \
134         "Test ll_add correctly rejects insertions of cross-list items"
135 test ll_add_l0e2a3              t_ll_add        PASS    \
136         "Test ll_add correctly rejects insertions after no-list items"
137
138
139 test ll_add_l0e2t               t_ll_add        PASS    \
140         "Test ll_add() successful addition to tail (3)"
141
142 test list_l0e0e2_count          t_ll_add        PASS    \
143         "Test list head element count correct after insert (3)"
144 test list_l0e0e2_first          t_ll_add        PASS    \
145         "Test list head first element pointers correct after insert (3)"
146 test list_l0e0e2_last           t_ll_add        PASS    \
147         "Test list head last element pointers correct after insert (3)"
148
149 test elem_l0e0e2_0_next         t_ll_add        PASS    \
150         "Test element next pointers correct after insert (3/0)"
151 test elem_l0e0e2_0_prev         t_ll_add        PASS    \
152         "Test element prev pointers correct after insert (3/0)"
153 test elem_l0e0e2_0_head         t_ll_add        PASS    \
154         "Test element head pointers correct after insert (3/0)"
155
156 test elem_l0e0e2_2_next         t_ll_add        PASS    \
157         "Test element next pointers correct after insert (3/2)"
158 test elem_l0e0e2_2_prev         t_ll_add        PASS    \
159         "Test element prev pointers correct after insert (3/2)"
160 test elem_l0e0e2_2_head         t_ll_add        PASS    \
161         "Test element head pointers correct after insert (3/2)"
162
163 test ll_add_l1e3h               t_ll_add        PASS    \
164         "Test ll_add() successful addition to head (4)"
165
166 test list_l1e3e1_count          t_ll_add        PASS    \
167         "Test list head element count correct after insert (4)"
168 test list_l1e3e1_first          t_ll_add        PASS    \
169         "Test list head first element pointers correct after insert (4)"
170 test list_l1e3e1_last           t_ll_add        PASS    \
171         "Test list head last element pointers correct after insert (4)"
172
173 test elem_l1e3e1_1_next         t_ll_add        PASS    \
174         "Test element next pointers correct after insert (4/1)"
175 test elem_l1e3e1_1_prev         t_ll_add        PASS    \
176         "Test element prev pointers correct after insert (4/1)"
177 test elem_l1e3e1_1_head         t_ll_add        PASS    \
178         "Test element head pointers correct after insert (4/1)"
179
180 test elem_l1e3e1_3_next         t_ll_add        PASS    \
181         "Test element next pointers correct after insert (4/3)"
182 test elem_l1e3e1_3_prev         t_ll_add        PASS    \
183         "Test element prev pointers correct after insert (4/3)"
184 test elem_l1e3e1_3_head         t_ll_add        PASS    \
185         "Test element head pointers correct after insert (4/3)"
186
187 test ll_add_l0e4b2              t_ll_add        PASS    \
188         "Test ll_add() successful addition before element (5)"
189
190 test list_l0e0e4e2_count        t_ll_add        PASS    \
191         "Test list head element count correct after insert (5)"
192 test list_l0e0e4e2_first        t_ll_add        PASS    \
193         "Test list head first element pointers correct after insert (5)"
194 test list_l0e0e4e2_last         t_ll_add        PASS    \
195         "Test list head last element pointers correct after insert (5)"
196
197 test elem_l0e0e4e2_0_next       t_ll_add        PASS    \
198         "Test element next pointers correct after insert (5/0)"
199 test elem_l0e0e4e2_0_prev       t_ll_add        PASS    \
200         "Test element prev pointers correct after insert (5/0)"
201 test elem_l0e0e4e2_0_head       t_ll_add        PASS    \
202         "Test element head pointers correct after insert (5/0)"
203
204 test elem_l0e0e4e2_2_next       t_ll_add        PASS    \
205         "Test element next pointers correct after insert (5/2)"
206 test elem_l0e0e4e2_2_prev       t_ll_add        PASS    \
207         "Test element prev pointers correct after insert (5/2)"
208 test elem_l0e0e4e2_2_head       t_ll_add        PASS    \
209         "Test element head pointers correct after insert (5/2)"
210
211 test elem_l0e0e4e2_4_next       t_ll_add        PASS    \
212         "Test element next pointers correct after insert (5/4)"
213 test elem_l0e0e4e2_4_prev       t_ll_add        PASS    \
214         "Test element prev pointers correct after insert (5/4)"
215 test elem_l0e0e4e2_4_head       t_ll_add        PASS    \
216         "Test element head pointers correct after insert (5/4)"
217
218 test ll_add_l1e5a3              t_ll_add        PASS    \
219         "Test ll_add() successful addition before element (6)"
220
221 test list_l1e3e5e1_count        t_ll_add        PASS    \
222         "Test list head element count correct after insert (6)"
223 test list_l1e3e5e1_first        t_ll_add        PASS    \
224         "Test list head first element pointers correct after insert (6)"
225 test list_l1e3e5e1_last         t_ll_add        PASS    \
226         "Test list head last element pointers correct after insert (6)"
227
228 test elem_l1e3e5e1_1_next       t_ll_add        PASS    \
229         "Test element next pointers correct after insert (6/1)"
230 test elem_l1e3e5e1_1_prev       t_ll_add        PASS    \
231         "Test element prev pointers correct after insert (6/1)"
232 test elem_l1e3e5e1_1_head       t_ll_add        PASS    \
233         "Test element head pointers correct after insert (6/1)"
234
235 test elem_l1e3e5e1_3_next       t_ll_add        PASS    \
236         "Test element next pointers correct after insert (6/3)"
237 test elem_l1e3e5e1_3_prev       t_ll_add        PASS    \
238         "Test element prev pointers correct after insert (6/3)"
239 test elem_l1e3e5e1_3_head       t_ll_add        PASS    \
240         "Test element head pointers correct after insert (6/3)"
241
242 test elem_l1e3e5e1_5_next       t_ll_add        PASS    \
243         "Test element next pointers correct after insert (6/5)"
244 test elem_l1e3e5e1_5_prev       t_ll_add        PASS    \
245         "Test element prev pointers correct after insert (6/5)"
246 test elem_l1e3e5e1_5_head       t_ll_add        PASS    \
247         "Test element head pointers correct after insert (6/5)"
248
249 program t_ll_move t_ll_move \
250         "Test linked list element reordering"
251 t_ll_move: t_ll_add
252
253 test ll_move_baseline_0_count   t_ll_move       PASS    \
254         "Baseline list ordering: list 0 element count"
255 test ll_move_baseline_0_first   t_ll_move       PASS    \
256         "Baseline list ordering: list 0 first element"
257 test ll_move_baseline_0_last    t_ll_move       PASS    \
258         "Baseline list ordering: list 0 last element"
259 test ll_move_baseline_0/0_next  t_ll_move       PASS    \
260         "Baseline list ordering: list 0 element 0 next pointer"
261 test ll_move_baseline_0/0_prev  t_ll_move       PASS    \
262         "Baseline list ordering: list 0 element 0 previous pointer"
263 test ll_move_baseline_0/0_head  t_ll_move       PASS    \
264         "Baseline list ordering: list 0 element 0 head pointer"
265 test ll_move_baseline_0/1_next  t_ll_move       PASS    \
266         "Baseline list ordering: list 0 element 1 next pointer"
267 test ll_move_baseline_0/1_prev  t_ll_move       PASS    \
268         "Baseline list ordering: list 0 element 1 previous pointer"
269 test ll_move_baseline_0/1_head  t_ll_move       PASS    \
270         "Baseline list ordering: list 0 element 1 head pointer"
271 test ll_move_baseline_0/2_next  t_ll_move       PASS    \
272         "Baseline list ordering: list 0 element 2 next pointer"
273 test ll_move_baseline_0/2_prev  t_ll_move       PASS    \
274         "Baseline list ordering: list 0 element 2 previous pointer"
275 test ll_move_baseline_0/2_head  t_ll_move       PASS    \
276         "Baseline list ordering: list 0 element 2 head pointer"
277 test ll_move_baseline_0/3_next  t_ll_move       PASS    \
278         "Baseline list ordering: list 0 element 3 next pointer"
279 test ll_move_baseline_0/3_prev  t_ll_move       PASS    \
280         "Baseline list ordering: list 0 element 3 previous pointer"
281 test ll_move_baseline_0/3_head  t_ll_move       PASS    \
282         "Baseline list ordering: list 0 element 3 head pointer"
283 test ll_move_baseline_0/4_next  t_ll_move       PASS    \
284         "Baseline list ordering: list 0 element 4 next pointer"
285 test ll_move_baseline_0/4_prev  t_ll_move       PASS    \
286         "Baseline list ordering: list 0 element 4 previous pointer"
287 test ll_move_baseline_0/4_head  t_ll_move       PASS    \
288         "Baseline list ordering: list 0 element 4 head pointer"
289
290 test ll_move_baseline_1_count   t_ll_move       PASS    \
291         "Baseline list ordering: list 1 element count"
292 test ll_move_baseline_1_first   t_ll_move       PASS    \
293         "Baseline list ordering: list 1 first element"
294 test ll_move_baseline_1_last    t_ll_move       PASS    \
295         "Baseline list ordering: list 1 last element"
296 test ll_move_baseline_1/5_next  t_ll_move       PASS    \
297         "Baseline list ordering: list 1 element 5 next pointer"
298 test ll_move_baseline_1/5_prev  t_ll_move       PASS    \
299         "Baseline list ordering: list 1 element 5 previous pointer"
300 test ll_move_baseline_1/5_head  t_ll_move       PASS    \
301         "Baseline list ordering: list 1 element 5 head pointer"
302 test ll_move_baseline_1/6_next  t_ll_move       PASS    \
303         "Baseline list ordering: list 1 element 6 next pointer"
304 test ll_move_baseline_1/6_prev  t_ll_move       PASS    \
305         "Baseline list ordering: list 1 element 6 previous pointer"
306 test ll_move_baseline_1/6_head  t_ll_move       PASS    \
307         "Baseline list ordering: list 1 element 6 head pointer"
308 test ll_move_baseline_1/7_next  t_ll_move       PASS    \
309         "Baseline list ordering: list 1 element 7 next pointer"
310 test ll_move_baseline_1/7_prev  t_ll_move       PASS    \
311         "Baseline list ordering: list 1 element 7 previous pointer"
312 test ll_move_baseline_1/7_head  t_ll_move       PASS    \
313         "Baseline list ordering: list 1 element 7 head pointer"
314 test ll_move_baseline_1/8_next  t_ll_move       PASS    \
315         "Baseline list ordering: list 1 element 8 next pointer"
316 test ll_move_baseline_1/8_prev  t_ll_move       PASS    \
317         "Baseline list ordering: list 1 element 8 previous pointer"
318 test ll_move_baseline_1/8_head  t_ll_move       PASS    \
319         "Baseline list ordering: list 1 element 8 head pointer"
320 test ll_move_baseline_1/9_next  t_ll_move       PASS    \
321         "Baseline list ordering: list 1 element 9 next pointer"
322 test ll_move_baseline_1/9_prev  t_ll_move       PASS    \
323         "Baseline list ordering: list 1 element 9 previous pointer"
324 test ll_move_baseline_1/9_head  t_ll_move       PASS    \
325         "Baseline list ordering: list 1 element 9 head pointer"
326
327 test ll_move_noargs             t_ll_move       PASS    \
328         "Test ll_move() with no valid arguments"
329 test ll_move_badlist            t_ll_move       PASS    \
330         "Test ll_move() with bad list"
331 test ll_move_badnew             t_ll_move       PASS    \
332         "Test ll_move() with bad new element"
333 test ll_move_badelem            t_ll_move       PASS    \
334         "Test ll_move() with bad original element"
335 test ll_move_before_noelem      t_ll_move       PASS    \
336         "Test ll_move() with LINK_LOC_BEFORE with no original element"
337 test ll_move_after_noelem       t_ll_move       PASS    \
338         "Test ll_move() with LINK_LOC_AFTER with no original element"
339
340 test ll_move_neweqelem          t_ll_move       PASS    \
341         "Test ll_move() with new == elem is rejected"
342
343 test ll_move_newunused          t_ll_move       PASS    \
344         "Test ll_move() with unused new element"
345 test ll_move_elemunused         t_ll_move       PASS    \
346         "Test ll_move() with unused original element"
347
348 test ll_move_newwronglist       t_ll_move       PASS    \
349         "Test ll_move() with new element in wrong list"
350 test ll_move_elemwronglist      t_ll_move       PASS    \
351         "Test ll_move() with original element in wrong list"
352
353 test ll_move_l0e4h              t_ll_move       PASS    \
354         "Test ll_move() of tail object to head of list"
355
356 test ll_move_l0e4h_0_count      t_ll_move       PASS    \
357         "Tail to head: list 0 element count"
358 test ll_move_l0e4h_0_first      t_ll_move       PASS    \
359         "Tail to head: list 0 first element"
360 test ll_move_l0e4h_0_last       t_ll_move       PASS    \
361         "Tail to head: list 0 last element"
362 test ll_move_l0e4h_0/0_next     t_ll_move       PASS    \
363         "Tail to head: list 0 element 0 next pointer"
364 test ll_move_l0e4h_0/0_prev     t_ll_move       PASS    \
365         "Tail to head: list 0 element 0 previous pointer"
366 test ll_move_l0e4h_0/0_head     t_ll_move       PASS    \
367         "Tail to head: list 0 element 0 head pointer"
368 test ll_move_l0e4h_0/1_next     t_ll_move       PASS    \
369         "Tail to head: list 0 element 1 next pointer"
370 test ll_move_l0e4h_0/1_prev     t_ll_move       PASS    \
371         "Tail to head: list 0 element 1 previous pointer"
372 test ll_move_l0e4h_0/1_head     t_ll_move       PASS    \
373         "Tail to head: list 0 element 1 head pointer"
374 test ll_move_l0e4h_0/2_next     t_ll_move       PASS    \
375         "Tail to head: list 0 element 2 next pointer"
376 test ll_move_l0e4h_0/2_prev     t_ll_move       PASS    \
377         "Tail to head: list 0 element 2 previous pointer"
378 test ll_move_l0e4h_0/2_head     t_ll_move       PASS    \
379         "Tail to head: list 0 element 2 head pointer"
380 test ll_move_l0e4h_0/3_next     t_ll_move       PASS    \
381         "Tail to head: list 0 element 3 next pointer"
382 test ll_move_l0e4h_0/3_prev     t_ll_move       PASS    \
383         "Tail to head: list 0 element 3 previous pointer"
384 test ll_move_l0e4h_0/3_head     t_ll_move       PASS    \
385         "Tail to head: list 0 element 3 head pointer"
386 test ll_move_l0e4h_0/4_next     t_ll_move       PASS    \
387         "Tail to head: list 0 element 4 next pointer"
388 test ll_move_l0e4h_0/4_prev     t_ll_move       PASS    \
389         "Tail to head: list 0 element 4 previous pointer"
390 test ll_move_l0e4h_0/4_head     t_ll_move       PASS    \
391         "Tail to head: list 0 element 4 head pointer"
392
393 test ll_move_l0e4t              t_ll_move       PASS    \
394         "Test ll_move() of head object to tail of list"
395
396 test ll_move_l0e4t_0_count      t_ll_move       PASS    \
397         "Head to tail: list 0 element count"
398 test ll_move_l0e4t_0_first      t_ll_move       PASS    \
399         "Head to tail: list 0 first element"
400 test ll_move_l0e4t_0_last       t_ll_move       PASS    \
401         "Head to tail: list 0 last element"
402 test ll_move_l0e4t_0/0_next     t_ll_move       PASS    \
403         "Head to tail: list 0 element 0 next pointer"
404 test ll_move_l0e4t_0/0_prev     t_ll_move       PASS    \
405         "Head to tail: list 0 element 0 previous pointer"
406 test ll_move_l0e4t_0/0_head     t_ll_move       PASS    \
407         "Head to tail: list 0 element 0 head pointer"
408 test ll_move_l0e4t_0/1_next     t_ll_move       PASS    \
409         "Head to tail: list 0 element 1 next pointer"
410 test ll_move_l0e4t_0/1_prev     t_ll_move       PASS    \
411         "Head to tail: list 0 element 1 previous pointer"
412 test ll_move_l0e4t_0/1_head     t_ll_move       PASS    \
413         "Head to tail: list 0 element 1 head pointer"
414 test ll_move_l0e4t_0/2_next     t_ll_move       PASS    \
415         "Head to tail: list 0 element 2 next pointer"
416 test ll_move_l0e4t_0/2_prev     t_ll_move       PASS    \
417         "Head to tail: list 0 element 2 previous pointer"
418 test ll_move_l0e4t_0/2_head     t_ll_move       PASS    \
419         "Head to tail: list 0 element 2 head pointer"
420 test ll_move_l0e4t_0/3_next     t_ll_move       PASS    \
421         "Head to tail: list 0 element 3 next pointer"
422 test ll_move_l0e4t_0/3_prev     t_ll_move       PASS    \
423         "Head to tail: list 0 element 3 previous pointer"
424 test ll_move_l0e4t_0/3_head     t_ll_move       PASS    \
425         "Head to tail: list 0 element 3 head pointer"
426 test ll_move_l0e4t_0/4_next     t_ll_move       PASS    \
427         "Head to tail: list 0 element 4 next pointer"
428 test ll_move_l0e4t_0/4_prev     t_ll_move       PASS    \
429         "Head to tail: list 0 element 4 previous pointer"
430 test ll_move_l0e4t_0/4_head     t_ll_move       PASS    \
431         "Head to tail: list 0 element 4 head pointer"
432
433 test ll_move_l0e4a0             t_ll_move       PASS    \
434         "Test ll_move() of tail object to after head of list"
435
436 test ll_move_l0e4a0_0_count     t_ll_move       PASS    \
437         "Tail to after head: list 0 element count"
438 test ll_move_l0e4a0_0_first     t_ll_move       PASS    \
439         "Tail to after head: list 0 first element"
440 test ll_move_l0e4a0_0_last      t_ll_move       PASS    \
441         "Tail to after head: list 0 last element"
442 test ll_move_l0e4a0_0/0_next    t_ll_move       PASS    \
443         "Tail to after head: list 0 element 0 next pointer"
444 test ll_move_l0e4a0_0/0_prev    t_ll_move       PASS    \
445         "Tail to after head: list 0 element 0 previous pointer"
446 test ll_move_l0e4a0_0/0_head    t_ll_move       PASS    \
447         "Tail to after head: list 0 element 0 head pointer"
448 test ll_move_l0e4a0_0/1_next    t_ll_move       PASS    \
449         "Tail to after head: list 0 element 1 next pointer"
450 test ll_move_l0e4a0_0/1_prev    t_ll_move       PASS    \
451         "Tail to after head: list 0 element 1 previous pointer"
452 test ll_move_l0e4a0_0/1_head    t_ll_move       PASS    \
453         "Tail to after head: list 0 element 1 head pointer"
454 test ll_move_l0e4a0_0/2_next    t_ll_move       PASS    \
455         "Tail to after head: list 0 element 2 next pointer"
456 test ll_move_l0e4a0_0/2_prev    t_ll_move       PASS    \
457         "Tail to after head: list 0 element 2 previous pointer"
458 test ll_move_l0e4a0_0/2_head    t_ll_move       PASS    \
459         "Tail to after head: list 0 element 2 head pointer"
460 test ll_move_l0e4a0_0/3_next    t_ll_move       PASS    \
461         "Tail to after head: list 0 element 3 next pointer"
462 test ll_move_l0e4a0_0/3_prev    t_ll_move       PASS    \
463         "Tail to after head: list 0 element 3 previous pointer"
464 test ll_move_l0e4a0_0/3_head    t_ll_move       PASS    \
465         "Tail to after head: list 0 element 3 head pointer"
466 test ll_move_l0e4a0_0/4_next    t_ll_move       PASS    \
467         "Tail to after head: list 0 element 4 next pointer"
468 test ll_move_l0e4a0_0/4_prev    t_ll_move       PASS    \
469         "Tail to after head: list 0 element 4 previous pointer"
470 test ll_move_l0e4a0_0/4_head    t_ll_move       PASS    \
471         "Tail to after head: list 0 element 4 head pointer"
472
473 test ll_move_l0e0b3             t_ll_move       PASS    \
474         "Test ll_move() of head object to before tail of list"
475
476 test ll_move_l0e0b3_0_count     t_ll_move       PASS    \
477         "Head to before tail: list 0 element count"
478 test ll_move_l0e0b3_0_first     t_ll_move       PASS    \
479         "Head to before tail: list 0 first element"
480 test ll_move_l0e0b3_0_last      t_ll_move       PASS    \
481         "Head to before tail: list 0 last element"
482 test ll_move_l0e0b3_0/0_next    t_ll_move       PASS    \
483         "Head to before tail: list 0 element 0 next pointer"
484 test ll_move_l0e0b3_0/0_prev    t_ll_move       PASS    \
485         "Head to before tail: list 0 element 0 previous pointer"
486 test ll_move_l0e0b3_0/0_head    t_ll_move       PASS    \
487         "Head to before tail: list 0 element 0 head pointer"
488 test ll_move_l0e0b3_0/1_next    t_ll_move       PASS    \
489         "Head to before tail: list 0 element 1 next pointer"
490 test ll_move_l0e0b3_0/1_prev    t_ll_move       PASS    \
491         "Head to before tail: list 0 element 1 previous pointer"
492 test ll_move_l0e0b3_0/1_head    t_ll_move       PASS    \
493         "Head to before tail: list 0 element 1 head pointer"
494 test ll_move_l0e0b3_0/2_next    t_ll_move       PASS    \
495         "Head to before tail: list 0 element 2 next pointer"
496 test ll_move_l0e0b3_0/2_prev    t_ll_move       PASS    \
497         "Head to before tail: list 0 element 2 previous pointer"
498 test ll_move_l0e0b3_0/2_head    t_ll_move       PASS    \
499         "Head to before tail: list 0 element 2 head pointer"
500 test ll_move_l0e0b3_0/3_next    t_ll_move       PASS    \
501         "Head to before tail: list 0 element 3 next pointer"
502 test ll_move_l0e0b3_0/3_prev    t_ll_move       PASS    \
503         "Head to before tail: list 0 element 3 previous pointer"
504 test ll_move_l0e0b3_0/3_head    t_ll_move       PASS    \
505         "Head to before tail: list 0 element 3 head pointer"
506 test ll_move_l0e0b3_0/4_next    t_ll_move       PASS    \
507         "Head to before tail: list 0 element 4 next pointer"
508 test ll_move_l0e0b3_0/4_prev    t_ll_move       PASS    \
509         "Head to before tail: list 0 element 4 previous pointer"
510 test ll_move_l0e0b3_0/4_head    t_ll_move       PASS    \
511         "Head to before tail: list 0 element 4 head pointer"
512
513 test ll_move_l0e4a1             t_ll_move       PASS    \
514         "Test swapping sequential objects with LINK_LOC_AFTER"
515
516 test ll_move_l0e4a1_0_count     t_ll_move       PASS    \
517         "Swap elements with LINK_LOC_AFTER: list 0 element count"
518 test ll_move_l0e4a1_0_first     t_ll_move       PASS    \
519         "Swap elements with LINK_LOC_AFTER: list 0 first element"
520 test ll_move_l0e4a1_0_last      t_ll_move       PASS    \
521         "Swap elements with LINK_LOC_AFTER: list 0 last element"
522 test ll_move_l0e4a1_0/0_next    t_ll_move       PASS    \
523         "Swap elements with LINK_LOC_AFTER: list 0 element 0 next pointer"
524 test ll_move_l0e4a1_0/0_prev    t_ll_move       PASS    \
525         "Swap elements with LINK_LOC_AFTER: list 0 element 0 previous pointer"
526 test ll_move_l0e4a1_0/0_head    t_ll_move       PASS    \
527         "Swap elements with LINK_LOC_AFTER: list 0 element 0 head pointer"
528 test ll_move_l0e4a1_0/1_next    t_ll_move       PASS    \
529         "Swap elements with LINK_LOC_AFTER: list 0 element 1 next pointer"
530 test ll_move_l0e4a1_0/1_prev    t_ll_move       PASS    \
531         "Swap elements with LINK_LOC_AFTER: list 0 element 1 previous pointer"
532 test ll_move_l0e4a1_0/1_head    t_ll_move       PASS    \
533         "Swap elements with LINK_LOC_AFTER: list 0 element 1 head pointer"
534 test ll_move_l0e4a1_0/2_next    t_ll_move       PASS    \
535         "Swap elements with LINK_LOC_AFTER: list 0 element 2 next pointer"
536 test ll_move_l0e4a1_0/2_prev    t_ll_move       PASS    \
537         "Swap elements with LINK_LOC_AFTER: list 0 element 2 previous pointer"
538 test ll_move_l0e4a1_0/2_head    t_ll_move       PASS    \
539         "Swap elements with LINK_LOC_AFTER: list 0 element 2 head pointer"
540 test ll_move_l0e4a1_0/3_next    t_ll_move       PASS    \
541         "Swap elements with LINK_LOC_AFTER: list 0 element 3 next pointer"
542 test ll_move_l0e4a1_0/3_prev    t_ll_move       PASS    \
543         "Swap elements with LINK_LOC_AFTER: list 0 element 3 previous pointer"
544 test ll_move_l0e4a1_0/3_head    t_ll_move       PASS    \
545         "Swap elements with LINK_LOC_AFTER: list 0 element 3 head pointer"
546 test ll_move_l0e4a1_0/4_next    t_ll_move       PASS    \
547         "Swap elements with LINK_LOC_AFTER: list 0 element 4 next pointer"
548 test ll_move_l0e4a1_0/4_prev    t_ll_move       PASS    \
549         "Swap elements with LINK_LOC_AFTER: list 0 element 4 previous pointer"
550 test ll_move_l0e4a1_0/4_head    t_ll_move       PASS    \
551         "Swap elements with LINK_LOC_AFTER: list 0 element 4 head pointer"
552
553 test ll_move_l0e3b0             t_ll_move       PASS    \
554         "Test swapping sequential objects with LINK_LOC_BEFORE"
555
556 test ll_move_l0e3b0_0_count     t_ll_move       PASS    \
557         "Swap elements with LINK_LOC_BEFORE: list 0 element count"
558 test ll_move_l0e3b0_0_first     t_ll_move       PASS    \
559         "Swap elements with LINK_LOC_BEFORE: list 0 first element"
560 test ll_move_l0e3b0_0_last      t_ll_move       PASS    \
561         "Swap elements with LINK_LOC_BEFORE: list 0 last element"
562 test ll_move_l0e3b0_0/0_next    t_ll_move       PASS    \
563         "Swap elements with LINK_LOC_BEFORE: list 0 element 0 next pointer"
564 test ll_move_l0e3b0_0/0_prev    t_ll_move       PASS    \
565         "Swap elements with LINK_LOC_BEFORE: list 0 element 0 previous pointer"
566 test ll_move_l0e3b0_0/0_head    t_ll_move       PASS    \
567         "Swap elements with LINK_LOC_BEFORE: list 0 element 0 head pointer"
568 test ll_move_l0e3b0_0/1_next    t_ll_move       PASS    \
569         "Swap elements with LINK_LOC_BEFORE: list 0 element 1 next pointer"
570 test ll_move_l0e3b0_0/1_prev    t_ll_move       PASS    \
571         "Swap elements with LINK_LOC_BEFORE: list 0 element 1 previous pointer"
572 test ll_move_l0e3b0_0/1_head    t_ll_move       PASS    \
573         "Swap elements with LINK_LOC_BEFORE: list 0 element 1 head pointer"
574 test ll_move_l0e3b0_0/2_next    t_ll_move       PASS    \
575         "Swap elements with LINK_LOC_BEFORE: list 0 element 2 next pointer"
576 test ll_move_l0e3b0_0/2_prev    t_ll_move       PASS    \
577         "Swap elements with LINK_LOC_BEFORE: list 0 element 2 previous pointer"
578 test ll_move_l0e3b0_0/2_head    t_ll_move       PASS    \
579         "Swap elements with LINK_LOC_BEFORE: list 0 element 2 head pointer"
580 test ll_move_l0e3b0_0/3_next    t_ll_move       PASS    \
581         "Swap elements with LINK_LOC_BEFORE: list 0 element 3 next pointer"
582 test ll_move_l0e3b0_0/3_prev    t_ll_move       PASS    \
583         "Swap elements with LINK_LOC_BEFORE: list 0 element 3 previous pointer"
584 test ll_move_l0e3b0_0/3_head    t_ll_move       PASS    \
585         "Swap elements with LINK_LOC_BEFORE: list 0 element 3 head pointer"
586 test ll_move_l0e3b0_0/4_next    t_ll_move       PASS    \
587         "Swap elements with LINK_LOC_BEFORE: list 0 element 4 next pointer"
588 test ll_move_l0e3b0_0/4_prev    t_ll_move       PASS    \
589         "Swap elements with LINK_LOC_BEFORE: list 0 element 4 previous pointer"
590 test ll_move_l0e3b0_0/4_head    t_ll_move       PASS    \
591         "Swap elements with LINK_LOC_BEFORE: list 0 element 4 head pointer"
592
593 test ll_move_l0e1h              t_ll_move       PASS    \
594         "Test moving head element to head of list"
595
596 test ll_move_l0e1h_0_count      t_ll_move       PASS    \
597         "Head to head: list 0 element count"
598 test ll_move_l0e1h_0_first      t_ll_move       PASS    \
599         "Head to head: list 0 first element"
600 test ll_move_l0e1h_0_last       t_ll_move       PASS    \
601         "Head to head: list 0 last element"
602 test ll_move_l0e1h_0/0_next     t_ll_move       PASS    \
603         "Head to head: list 0 element 0 next pointer"
604 test ll_move_l0e1h_0/0_prev     t_ll_move       PASS    \
605         "Head to head: list 0 element 0 previous pointer"
606 test ll_move_l0e1h_0/0_head     t_ll_move       PASS    \
607         "Head to head: list 0 element 0 head pointer"
608 test ll_move_l0e1h_0/1_next     t_ll_move       PASS    \
609         "Head to head: list 0 element 1 next pointer"
610 test ll_move_l0e1h_0/1_prev     t_ll_move       PASS    \
611         "Head to head: list 0 element 1 previous pointer"
612 test ll_move_l0e1h_0/1_head     t_ll_move       PASS    \
613         "Head to head: list 0 element 1 head pointer"
614 test ll_move_l0e1h_0/2_next     t_ll_move       PASS    \
615         "Head to head: list 0 element 2 next pointer"
616 test ll_move_l0e1h_0/2_prev     t_ll_move       PASS    \
617         "Head to head: list 0 element 2 previous pointer"
618 test ll_move_l0e1h_0/2_head     t_ll_move       PASS    \
619         "Head to head: list 0 element 2 head pointer"
620 test ll_move_l0e1h_0/3_next     t_ll_move       PASS    \
621         "Head to head: list 0 element 3 next pointer"
622 test ll_move_l0e1h_0/3_prev     t_ll_move       PASS    \
623         "Head to head: list 0 element 3 previous pointer"
624 test ll_move_l0e1h_0/3_head     t_ll_move       PASS    \
625         "Head to head: list 0 element 3 head pointer"
626 test ll_move_l0e1h_0/4_next     t_ll_move       PASS    \
627         "Head to head: list 0 element 4 next pointer"
628 test ll_move_l0e1h_0/4_prev     t_ll_move       PASS    \
629         "Head to head: list 0 element 4 previous pointer"
630 test ll_move_l0e1h_0/4_head     t_ll_move       PASS    \
631         "Head to head: list 0 element 4 head pointer"
632
633 test ll_move_l0e0t              t_ll_move       PASS    \
634         "Test moving tail element to tail of list"
635
636 test ll_move_l0e0t_0_count      t_ll_move       PASS    \
637         "Tail to tail: list 0 element count"
638 test ll_move_l0e0t_0_first      t_ll_move       PASS    \
639         "Tail to tail: list 0 first element"
640 test ll_move_l0e0t_0_last       t_ll_move       PASS    \
641         "Tail to tail: list 0 last element"
642 test ll_move_l0e0t_0/0_next     t_ll_move       PASS    \
643         "Tail to tail: list 0 element 0 next pointer"
644 test ll_move_l0e0t_0/0_prev     t_ll_move       PASS    \
645         "Tail to tail: list 0 element 0 previous pointer"
646 test ll_move_l0e0t_0/0_head     t_ll_move       PASS    \
647         "Tail to tail: list 0 element 0 head pointer"
648 test ll_move_l0e0t_0/1_next     t_ll_move       PASS    \
649         "Tail to tail: list 0 element 1 next pointer"
650 test ll_move_l0e0t_0/1_prev     t_ll_move       PASS    \
651         "Tail to tail: list 0 element 1 previous pointer"
652 test ll_move_l0e0t_0/1_head     t_ll_move       PASS    \
653         "Tail to tail: list 0 element 1 head pointer"
654 test ll_move_l0e0t_0/2_next     t_ll_move       PASS    \
655         "Tail to tail: list 0 element 2 next pointer"
656 test ll_move_l0e0t_0/2_prev     t_ll_move       PASS    \
657         "Tail to tail: list 0 element 2 previous pointer"
658 test ll_move_l0e0t_0/2_head     t_ll_move       PASS    \
659         "Tail to tail: list 0 element 2 head pointer"
660 test ll_move_l0e0t_0/3_next     t_ll_move       PASS    \
661         "Tail to tail: list 0 element 3 next pointer"
662 test ll_move_l0e0t_0/3_prev     t_ll_move       PASS    \
663         "Tail to tail: list 0 element 3 previous pointer"
664 test ll_move_l0e0t_0/3_head     t_ll_move       PASS    \
665         "Tail to tail: list 0 element 3 head pointer"
666 test ll_move_l0e0t_0/4_next     t_ll_move       PASS    \
667         "Tail to tail: list 0 element 4 next pointer"
668 test ll_move_l0e0t_0/4_prev     t_ll_move       PASS    \
669         "Tail to tail: list 0 element 4 previous pointer"
670 test ll_move_l0e0t_0/4_head     t_ll_move       PASS    \
671         "Tail to tail: list 0 element 4 head pointer"
672
673 program t_ll_remove t_ll_remove \
674         "Test linked list element removal"
675 t_ll_remove: t_ll_add
676
677 test ll_remove_baseline_0_count t_ll_remove     PASS    \
678         "Baseline list 0 element count"
679 test ll_remove_baseline_0_first t_ll_remove     PASS    \
680         "Baseline list 0 first element"
681 test ll_remove_baseline_0_last  t_ll_remove     PASS    \
682         "Baseline list 0 last element"
683
684 test ll_remove_baseline_1_count t_ll_remove     PASS    \
685         "Baseline list 1 element count"
686 test ll_remove_baseline_1_first t_ll_remove     PASS    \
687         "Baseline list 1 first element"
688 test ll_remove_baseline_1_last  t_ll_remove     PASS    \
689         "Baseline list 1 last element"
690
691 test ll_remove_noargs           t_ll_remove     PASS    \
692         "Test ll_remove() with no valid arguments"
693 test ll_remove_badlist          t_ll_remove     PASS    \
694         "Test ll_remove() with bad list"
695 test ll_remove_badelem          t_ll_remove     PASS    \
696         "Test ll_remove() with bad element"
697
698 test ll_remove_unused           t_ll_remove     PASS    \
699         "Test ll_remove() with unused element"
700
701 test ll_remove_wronglist        t_ll_remove     PASS    \
702         "Test ll_remove() with wrong list"
703
704 test ll_remove_l1e8             t_ll_remove     PASS    \
705         "Test removing an item from one-item list"
706 test ll_remove_l1e8_1_count     t_ll_remove     PASS    \
707         "Test removing an item from one-item list: element count"
708 test ll_remove_l1e8_1_first     t_ll_remove     PASS    \
709         "Test removing an item from one-item list: first element"
710 test ll_remove_l1e8_1_last      t_ll_remove     PASS    \
711         "Test removing an item from one-item list: last element"
712
713 test ll_remove_l0e0             t_ll_remove     PASS    \
714         "Test removal of head"
715 test ll_remove_l0e0_0_count     t_ll_remove     PASS    \
716         "Test removal of head: element count"
717 test ll_remove_l0e0_0_first     t_ll_remove     PASS    \
718         "Test removal of head: first element"
719 test ll_remove_l0e0_0_last      t_ll_remove     PASS    \
720         "Test removal of head: last element"
721 test ll_remove_l0e0_0/1_next    t_ll_remove     PASS    \
722         "Test removal of head: upper neighbor next pointer"
723 test ll_remove_l0e0_0/1_prev    t_ll_remove     PASS    \
724         "Test removal of head: upper neighbor prev pointer"
725 test ll_remove_l0e0_0/1_head    t_ll_remove     PASS    \
726         "Test removal of head: upper neighbor head pointer"
727
728 test ll_remove_l0e7             t_ll_remove     PASS    \
729         "Test removal of tail"
730 test ll_remove_l0e7_0_count     t_ll_remove     PASS    \
731         "Test removal of tail: element count"
732 test ll_remove_l0e7_0_first     t_ll_remove     PASS    \
733         "Test removal of tail: first element"
734 test ll_remove_l0e7_0_last      t_ll_remove     PASS    \
735         "Test removal of tail: last element"
736 test ll_remove_l0e7_0/6_next    t_ll_remove     PASS    \
737         "Test removal of tail: lower neighbor next pointer"
738 test ll_remove_l0e7_0/6_prev    t_ll_remove     PASS    \
739         "Test removal of tail: lower neighbor prev pointer"
740 test ll_remove_l0e7_0/6_head    t_ll_remove     PASS    \
741         "Test removal of tail: lower neighbor head pointer"
742
743 test ll_remove_l0e3             t_ll_remove     PASS    \
744         "Test removal of middle"
745 test ll_remove_l0e3_0_count     t_ll_remove     PASS    \
746         "Test removal of middle: element count"
747 test ll_remove_l0e3_0_first     t_ll_remove     PASS    \
748         "Test removal of middle: first element"
749 test ll_remove_l0e3_0_last      t_ll_remove     PASS    \
750         "Test removal of middle: last element"
751 test ll_remove_l0e3_0/2_next    t_ll_remove     PASS    \
752         "Test removal of middle: lower neighbor next pointer"
753 test ll_remove_l0e3_0/2_prev    t_ll_remove     PASS    \
754         "Test removal of middle: lower neighbor prev pointer"
755 test ll_remove_l0e3_0/2_head    t_ll_remove     PASS    \
756         "Test removal of middle: lower neighbor head pointer"
757 test ll_remove_l0e3_0/4_next    t_ll_remove     PASS    \
758         "Test removal of middle: upper neighbor next pointer"
759 test ll_remove_l0e3_0/4_prev    t_ll_remove     PASS    \
760         "Test removal of middle: upper neighbor prev pointer"
761 test ll_remove_l0e3_0/4_head    t_ll_remove     PASS    \
762         "Test removal of middle: upper neighbor head pointer"
763
764 program t_ll_find t_ll_find \
765         "Test linked list element lookup"
766 t_ll_find: t_ll_add
767
768 test ll_find_baseline_l0_count  t_ll_find       PASS    \
769         "Baseline list 0 element count"
770 test ll_find_baseline_l0_first  t_ll_find       PASS    \
771         "Baseline list 0 first element"
772 test ll_find_baseline_l0_last   t_ll_find       PASS    \
773         "Baseline list 0 last element"
774
775 test ll_find_baseline_l1_count  t_ll_find       PASS    \
776         "Baseline list 1 element count"
777 test ll_find_baseline_l1_first  t_ll_find       PASS    \
778         "Baseline list 1 first element"
779 test ll_find_baseline_l1_last   t_ll_find       PASS    \
780         "Baseline list 1 last element"
781
782 test ll_find_noargs             t_ll_find       PASS    \
783         "Test ll_find() with no valid arguments"
784 test ll_find_badlist            t_ll_find       PASS    \
785         "Test ll_find() with bad list"
786 test ll_find_badresult          t_ll_find       PASS    \
787         "Test ll_find() with bad result"
788 test ll_find_badcompare         t_ll_find       PASS    \
789         "Test ll_find() with bad comparison function"
790 test ll_find_badstart           t_ll_find       PASS    \
791         "Test ll_find() with bad start element"
792 test ll_find_badkey             t_ll_find       PASS    \
793         "Test ll_find() with bad key pointer"
794
795 test ll_find_wrongtable         t_ll_find       PASS    \
796         "Test ll_find() with start element in wrong table"
797
798 test ll_find_noentry            t_ll_find       PASS    \
799         "Test ll_find() with non-existent entry"
800
801 test ll_find_oneentry           t_ll_find       PASS    \
802         "Search for element in one-element list"
803 test ll_find_oneentry_result    t_ll_find       PASS    \
804         "Search for element in one-element list: correct result"
805
806 test ll_find_head               t_ll_find       PASS    \
807         "Search for head element"
808 test ll_find_head_result        t_ll_find       PASS    \
809         "Search for head element: correct result"
810
811 test ll_find_tail               t_ll_find       PASS    \
812         "Search for tail element"
813 test ll_find_tail_result        t_ll_find       PASS    \
814         "Search for tail element: correct result"
815
816 test ll_find_middle             t_ll_find       PASS    \
817         "Search for middle element"
818 test ll_find_middle_result      t_ll_find       PASS    \
819         "Search for middle element: correct result"
820
821 test ll_find_start              t_ll_find       PASS    \
822         "Search for element given start"
823 test ll_find_start_result       t_ll_find       PASS    \
824         "Search for element given start: correct result"
825
826 program t_ll_iter t_ll_iter \
827         "Test linked list element iteration"
828 t_ll_iter: t_ll_add
829
830 test ll_iter_baseline_count     t_ll_iter       PASS    \
831         "Baseline list element count"
832 test ll_iter_baseline_first     t_ll_iter       PASS    \
833         "Baseline list first element"
834 test ll_iter_baseline_last      t_ll_iter       PASS    \
835         "Baseline list last element"
836
837 test ll_iter_noargs             t_ll_iter       PASS    \
838         "Test ll_iter() with no valid arguments"
839 test ll_iter_badlist            t_ll_iter       PASS    \
840         "Test ll_iter() with bad list"
841 test ll_iter_badfunc            t_ll_iter       PASS    \
842         "Test ll_iter() with bad iteration function"
843
844 test ll_iter_funcreturn         t_ll_iter       PASS    \
845         "Test that ll_iter() returns with return value of callback"
846
847 test ll_iter_funchead_e0        t_ll_iter       PASS    \
848         "Test that list heads match on element 0"
849 test ll_iter_funcelem_e0        t_ll_iter       PASS    \
850         "Test that elements match on element 0"
851 test ll_iter_funchead_e1        t_ll_iter       PASS    \
852         "Test that list heads match on element 1"
853 test ll_iter_funcelem_e1        t_ll_iter       PASS    \
854         "Test that elements match on element 1"
855 test ll_iter_funchead_e2        t_ll_iter       PASS    \
856         "Test that list heads match on element 2"
857 test ll_iter_funcelem_e2        t_ll_iter       PASS    \
858         "Test that elements match on element 2"
859 test ll_iter_funchead_e3        t_ll_iter       PASS    \
860         "Test that list heads match on element 3"
861 test ll_iter_funcelem_e3        t_ll_iter       PASS    \
862         "Test that elements match on element 3"
863 test ll_iter_funchead_e4        t_ll_iter       PASS    \
864         "Test that list heads match on element 4"
865 test ll_iter_funcelem_e4        t_ll_iter       PASS    \
866         "Test that elements match on element 4"
867
868 test ll_iter_function           t_ll_iter       PASS    \
869         "Test ll_iter() returns success"
870
871 test ll_iter_func_count         t_ll_iter       PASS    \
872         "Test ll_iter() covers all elements"
873
874 program t_ll_flush t_ll_flush \
875         "Test linked list flushing"
876 t_ll_flush: t_ll_add t_ll_remove
877
878 test ll_flush_baseline_l0_count t_ll_flush      PASS    \
879         "Baseline list 0 element count"
880 test ll_flush_baseline_l0_first t_ll_flush      PASS    \
881         "Baseline list 0 first element"
882 test ll_flush_baseline_l0_last  t_ll_flush      PASS    \
883         "Baseline list 0 last element"
884
885 test ll_flush_baseline_l1_count t_ll_flush      PASS    \
886         "Baseline list 1 element count"
887 test ll_flush_baseline_l1_first t_ll_flush      PASS    \
888         "Baseline list 1 first element"
889 test ll_flush_baseline_l1_last  t_ll_flush      PASS    \
890         "Baseline list 1 last element"
891
892 test ll_flush_noargs            t_ll_flush      PASS    \
893         "Test ll_flush() with no valid arguments"
894 test ll_flush_badlist           t_ll_flush      PASS    \
895         "Test ll_flush() with bad list"
896
897 test ll_flush_nofunc            t_ll_flush      PASS    \
898         "Test ll_flush() with no flush function"
899 test ll_flush_nofunc_count      t_ll_flush      PASS    \
900         "Test ll_flush() clears list: element count"
901 test ll_flush_nofunc_first      t_ll_flush      PASS    \
902         "Test ll_flush() clears list: first element"
903 test ll_flush_nofunc_last       t_ll_flush      PASS    \
904         "Test ll_flush() clears list: last element"
905
906 test ll_flush_funcreturn        t_ll_flush      PASS    \
907         "Test ll_flush() returns with flush function return value"
908 test ll_flush_funcreturn_count  t_ll_flush      PASS    \
909         "Test ll_flush() element removal: element count"
910 test ll_flush_funcreturn_first  t_ll_flush      PASS    \
911         "Test ll_flush() element removal: first element"
912 test ll_flush_funcreturn_last   t_ll_flush      PASS    \
913         "Test ll_flush() element removal: last element"
914
915 test ll_flush_funchead_e0       t_ll_flush      PASS    \
916         "Test that list heads match on element 0"
917 test ll_flush_funcelem_e0       t_ll_flush      PASS    \
918         "Test that elements match on element 0"
919 test ll_flush_funchead_e1       t_ll_flush      PASS    \
920         "Test that list heads match on element 1"
921 test ll_flush_funcelem_e1       t_ll_flush      PASS    \
922         "Test that elements match on element 1"
923 test ll_flush_funchead_e2       t_ll_flush      PASS    \
924         "Test that list heads match on element 2"
925 test ll_flush_funcelem_e2       t_ll_flush      PASS    \
926         "Test that elements match on element 2"
927 test ll_flush_funchead_e3       t_ll_flush      PASS    \
928         "Test that list heads match on element 3"
929 test ll_flush_funcelem_e3       t_ll_flush      PASS    \
930         "Test that elements match on element 3"
931 test ll_flush_funchead_e4       t_ll_flush      PASS    \
932         "Test that list heads match on element 4"
933 test ll_flush_funcelem_e4       t_ll_flush      PASS    \
934         "Test that elements match on element 4"
935
936 test ll_flush_function          t_ll_flush      PASS    \
937         "Test ll_flush returns success"
938
939 test ll_flush_function_count    t_ll_flush      PASS    \
940         "Test ll_flush() element removal: element count"
941 test ll_flush_function_first    t_ll_flush      PASS    \
942         "Test ll_flush() element removal: first element"
943 test ll_flush_function_last     t_ll_flush      PASS    \
944         "Test ll_flush() element removal: last element"
945
946 test ll_flush_func_count        t_ll_flush      PASS    \
947         "Test ll_flush() covers all elements"
948
949
950 program t_ht_init t_ht_init \
951         "Test hash table initialization"
952 t_ht_init: t_ll_init
953
954 test ht_static_magic            t_ht_init       PASS    \
955         "Test static initialization: magic number"
956 test ht_static_flags            t_ht_init       PASS    \
957         "Test static initialization: flags"
958 test ht_static_modulus          t_ht_init       PASS    \
959         "Test static initialization: modulus"
960 test ht_static_count            t_ht_init       PASS    \
961         "Test static initialization: count"
962 test ht_static_rollover         t_ht_init       PASS    \
963         "Test static initialization: rollover"
964 test ht_static_rollunder        t_ht_init       PASS    \
965         "Test static initialization: rollunder"
966 test ht_static_func             t_ht_init       PASS    \
967         "Test static initialization: hash function"
968 test ht_static_comp             t_ht_init       PASS    \
969         "Test static initialization: comparison function"
970 test ht_static_rsize            t_ht_init       PASS    \
971         "Test static initialization: resize callback"
972 test ht_static_extra            t_ht_init       PASS    \
973         "Test static initialization: extra data"
974 test ht_static_table            t_ht_init       PASS    \
975         "Test static initialization: table"
976
977 test ht_init_noargs             t_ht_init       PASS    \
978         "Test ht_init() with no valid arguments"
979 test ht_init_notable            t_ht_init       PASS    \
980         "Test ht_init() with no table"
981 test ht_init_nofunc             t_ht_init       PASS    \
982         "Test ht_init() with no hash function"
983 test ht_init_nocomp             t_ht_init       PASS    \
984         "Test ht_init() with no comparison function"
985
986 test ht_dynamic_nomod           t_ht_init       PASS    \
987         "Test dynamic initialization (no modulus)"
988 test ht_dynamic_nomod_magic     t_ht_init       PASS    \
989         "Test dynamic initialization (no modulus): magic number"
990 test ht_dynamic_nomod_flags     t_ht_init       PASS    \
991         "Test dynamic initialization (no modulus): flags"
992 test ht_dynamic_nomod_modulus   t_ht_init       PASS    \
993         "Test dynamic initialization (no modulus): modulus"
994 test ht_dynamic_nomod_count     t_ht_init       PASS    \
995         "Test dynamic initialization (no modulus): count"
996 test ht_dynamic_nomod_rollover  t_ht_init       PASS    \
997         "Test dynamic initialization (no modulus): rollover"
998 test ht_dynamic_nomod_rollunder t_ht_init       PASS    \
999         "Test dynamic initialization (no modulus): rollunder"
1000 test ht_dynamic_nomod_func      t_ht_init       PASS    \
1001         "Test dynamic initialization (no modulus): hash function"
1002 test ht_dynamic_nomod_comp      t_ht_init       PASS    \
1003         "Test dynamic initialization (no modulus): comparison function"
1004 test ht_dynamic_nomod_rsize     t_ht_init       PASS    \
1005         "Test dynamic initialization (no modulus): resize callback"
1006 test ht_dynamic_nomod_extra     t_ht_init       PASS    \
1007         "Test dynamic initialization (no modulus): extra data"
1008 test ht_dynamic_nomod_table     t_ht_init       PASS    \
1009         "Test dynamic initialization (no modulus): table"
1010
1011 test ht_dynamic_mod6            t_ht_init       PASS    \
1012         "Test dynamic initialization (modulus 6, round 7)"
1013 test ht_dynamic_mod6_magic      t_ht_init       PASS    \
1014         "Test dynamic initialization (modulus 6, round 7): magic number"
1015 test ht_dynamic_mod6_flags      t_ht_init       PASS    \
1016         "Test dynamic initialization (modulus 6, round 7): flags"
1017 test ht_dynamic_mod6_modulus    t_ht_init       PASS    \
1018         "Test dynamic initialization (modulus 6, round 7): modulus"
1019 test ht_dynamic_mod6_count      t_ht_init       PASS    \
1020         "Test dynamic initialization (modulus 6, round 7): count"
1021 test ht_dynamic_mod6_rollover   t_ht_init       PASS    \
1022         "Test dynamic initialization (modulus 6, round 7): rollover"
1023 test ht_dynamic_mod6_rollunder  t_ht_init       PASS    \
1024         "Test dynamic initialization (modulus 6, round 7): rollunder"
1025 test ht_dynamic_mod6_func       t_ht_init       PASS    \
1026         "Test dynamic initialization (modulus 6, round 7): hash function"
1027 test ht_dynamic_mod6_comp       t_ht_init       PASS    \
1028         "Test dynamic initialization (modulus 6, round 7): comparison function"
1029 test ht_dynamic_mod6_rsize      t_ht_init       PASS    \
1030         "Test dynamic initialization (modulus 6, round 7): resize callback"
1031 test ht_dynamic_mod6_extra      t_ht_init       PASS    \
1032         "Test dynamic initialization (modulus 6, round 7): extra data"
1033 test ht_dynamic_mod6_table      t_ht_init       PASS    \
1034         "Test dynamic initialization (modulus 6, round 7): table"
1035 test ht_dynamic_mod6_bucket0    t_ht_init       PASS    \
1036         "Test dynamic initialization (modulus 6, round 7): bucket 0"
1037 test ht_dynamic_mod6_bucket1    t_ht_init       PASS    \
1038         "Test dynamic initialization (modulus 6, round 7): bucket 1"
1039 test ht_dynamic_mod6_bucket2    t_ht_init       PASS    \
1040         "Test dynamic initialization (modulus 6, round 7): bucket 2"
1041 test ht_dynamic_mod6_bucket3    t_ht_init       PASS    \
1042         "Test dynamic initialization (modulus 6, round 7): bucket 3"
1043 test ht_dynamic_mod6_bucket4    t_ht_init       PASS    \
1044         "Test dynamic initialization (modulus 6, round 7): bucket 4"
1045 test ht_dynamic_mod6_bucket5    t_ht_init       PASS    \
1046         "Test dynamic initialization (modulus 6, round 7): bucket 5"
1047 test ht_dynamic_mod6_bucket6    t_ht_init       PASS    \
1048         "Test dynamic initialization (modulus 6, round 7): bucket 6"
1049
1050 program t_he_init t_he_init \
1051         "Test hash table entry initialization"
1052 t_he_init: t_le_init
1053
1054 test he_static_magic            t_he_init       PASS    \
1055         "Test static initialization: magic number"
1056 test he_static_elem             t_he_init       PASS    \
1057         "Test static initialization: linked list element"
1058 test he_static_table            t_he_init       PASS    \
1059         "Test static initialization: hash table pointer"
1060 test he_static_hash             t_he_init       PASS    \
1061         "Test static initialization: hash value"
1062 test he_static_key              t_he_init       PASS    \
1063         "Test static initialization: hash key"
1064 test he_static_keylen           t_he_init       PASS    \
1065         "Test static initialization: hash key length"
1066 test he_static_value            t_he_init       PASS    \
1067         "Test static initialization: value"
1068
1069 test he_init_noargs             t_he_init       PASS    \
1070         "Test he_init() with no valid arguments"
1071
1072 test he_dynamic                 t_he_init       PASS    \
1073         "Test dynamic initialization"
1074 test he_dynamic_magic           t_he_init       PASS    \
1075         "Test dynamic initialization: magic number"
1076 test he_dynamic_elem            t_he_init       PASS    \
1077         "Test dynamic initialization: linked list element"
1078 test he_dynamic_table           t_he_init       PASS    \
1079         "Test dynamic initialization: hash table pointer"
1080 test he_dynamic_hash            t_he_init       PASS    \
1081         "Test dynamic initialization: hash value"
1082 test he_dynamic_key             t_he_init       PASS    \
1083         "Test dynamic initialization: hash key"
1084 test he_dynamic_keylen          t_he_init       PASS    \
1085         "Test dynamic initialization: hash key length"
1086 test he_dynamic_value           t_he_init       PASS    \
1087         "Test dynamic initialization: value"
1088
1089 # ht_add() and ht_find() are so intricately intertwined that they need
1090 # to be tested simultaneously.
1091 program t_ht_addfind t_ht_addfind \
1092         "Test hash table entry add and find"
1093 t_ht_addfind: t_ht_init t_ll_add
1094
1095 test ht_find_noargs             t_ht_addfind    PASS    \
1096         "Test ht_find() with no valid arguments"
1097 test ht_find_badtable           t_ht_addfind    PASS    \
1098         "Test ht_find() with bad table"
1099 test ht_find_badkey             t_ht_addfind    PASS    \
1100         "Test ht_find() with bad key"
1101
1102 test ht_find_emptytable         t_ht_addfind    PASS    \
1103         "Test ht_find() on an empty table"
1104
1105 test ht_add_noargs              t_ht_addfind    PASS    \
1106         "Test ht_add() with no valid arguments"
1107 test ht_add_badtable            t_ht_addfind    PASS    \
1108         "Test ht_add() with bad table"
1109 test ht_add_badentry            t_ht_addfind    PASS    \
1110         "Test ht_add() with bad entry"
1111 test ht_add_nokey               t_ht_addfind    PASS    \
1112         "Test ht_add() with bad key"
1113
1114 test ht_add_frozen              t_ht_addfind    PASS    \
1115         "Test that ht_add() refuses to add entries to a frozen table"
1116
1117 test ht_add_t1e5                t_ht_addfind    PASS    \
1118         "Add element 5 to hash table 1"
1119
1120 test ht_add_busy                t_ht_addfind    PASS    \
1121         "Test that ht_add() refuses to add busy entries to a table"
1122
1123 test ht_find_t1e5               t_ht_addfind    PASS    \
1124         "Test that ht_find() can find an element"
1125 test ht_find_t1e5_entry         t_ht_addfind    PASS    \
1126         "Test that ht_find() found the correct entry"
1127 test ht_find_t1e6               t_ht_addfind    PASS    \
1128         "Test that ht_find() fails to find non-existent entry"
1129
1130 test ht_add_duplicate           t_ht_addfind    PASS    \
1131         "Test that ht_add() refuses to add duplicate entries to a table"
1132
1133 test ht_add_t0e0                t_ht_addfind    PASS    \
1134         "Add element 0 to hash table 0"
1135 test ht_add_t0e1                t_ht_addfind    PASS    \
1136         "Add element 1 to hash table 0"
1137 test ht_add_t0e2                t_ht_addfind    PASS    \
1138         "Add element 2 to hash table 0"
1139 test ht_add_t0e3                t_ht_addfind    PASS    \
1140         "Add element 3 to hash table 0"
1141 test ht_add_t0e4                t_ht_addfind    PASS    \
1142         "Add element 4 to hash table 0"
1143
1144 test ht_find_t0e2               t_ht_addfind    PASS    \
1145         "Find element 2 in hash table 0"
1146
1147 program t_ht_move t_ht_move \
1148         "Test hash table entry rekey"
1149 t_ht_move: t_ht_init t_ht_addfind t_ll_remove t_ll_add
1150
1151 test ht_move_noargs             t_ht_move       PASS    \
1152         "Test ht_move() with no valid arguments"
1153 test ht_move_badtable           t_ht_move       PASS    \
1154         "Test ht_move() with bad hash table"
1155 test ht_move_badentry           t_ht_move       PASS    \
1156         "Test ht_move() with bad hash entry"
1157 test ht_move_badkey             t_ht_move       PASS    \
1158         "Test ht_move() with bad database key"
1159
1160 test ht_move_unused             t_ht_move       PASS    \
1161         "Test ht_move() excludes unused entries"
1162 test ht_move_wrongtable         t_ht_move       PASS    \
1163         "Test ht_move() excludes entries in the wrong hash table"
1164 test ht_move_frozen             t_ht_move       PASS    \
1165         "Test ht_move() excludes tables that are frozen"
1166 test ht_move_duplicate          t_ht_move       PASS    \
1167         "Test ht_move() excludes duplicate keys"
1168
1169 test ht_move_t0e0k6             t_ht_move       PASS    \
1170         "Test ht_move() successfully rekeys an entry"
1171
1172 test ht_move_find_t0e0k0        t_ht_move       PASS    \
1173         "Test that no entry is available under the old key"
1174 test ht_move_find_t0e0k6        t_ht_move       PASS    \
1175         "Test that entry can be located under the new key"
1176 test ht_move_find_t0e0k6_entry  t_ht_move       PASS    \
1177         "Test that entry under new key is the expected entry"
1178
1179 program t_ht_remove t_ht_remove \
1180         "Test hash table entry removal"
1181 t_ht_remove: t_ht_init t_ht_addfind t_ll_remove
1182
1183 test ht_remove_noargs           t_ht_remove     PASS    \
1184         "Test ht_remove() with no valid arguments"
1185 test ht_remove_badtable         t_ht_remove     PASS    \
1186         "Test ht_remove() with bad hash table"
1187 test ht_remove_badentry         t_ht_remove     PASS    \
1188         "Test ht_remove() with bad hash table entry"
1189
1190 test ht_remove_unused           t_ht_remove     PASS    \
1191         "Test that ht_remove() excludes unused entries"
1192 test ht_remove_wrongtable       t_ht_remove     PASS    \
1193         "Test that ht_remove() excludes entries in the wrong hash table"
1194 test ht_remove_frozen           t_ht_remove     PASS    \
1195         "Test that ht_remove() excludes tables that are frozen"
1196
1197 test ht_remove_t0e0             t_ht_remove     PASS    \
1198         "Test that ht_remove() removes entry 0 from table 0"
1199 test ht_remove_find_t0e0        t_ht_remove     PASS    \
1200         "Test that ht_remove() actually did remove the entry from the table"
1201 test ht_remove_t0e0_table       t_ht_remove     PASS    \
1202         "Test that ht_remove() resets the entry's hash table pointer"
1203 test ht_remove_t0e0_count       t_ht_remove     PASS    \
1204         "Test that ht_remove() updates table count"
1205
1206 program t_ht_free t_ht_free \
1207         "Test hash table bucket free"
1208 t_ht_free: t_ht_init t_ht_addfind
1209
1210 test ht_free_noargs             t_ht_free       PASS    \
1211         "Test ht_free() with no valid arguments"
1212 test ht_free_badtable           t_ht_free       PASS    \
1213         "Test ht_free() with bad hash table"
1214
1215 test ht_free_frozen             t_ht_free       PASS    \
1216         "Test that ht_free() excludes hash tables that are frozen"
1217 test ht_free_nonempty           t_ht_free       PASS    \
1218         "Test that ht_free() excludes hash tables that are not empty"
1219
1220 test ht_free_t0                 t_ht_free       PASS    \
1221         "Free an empty table"
1222 test ht_free_t0_table           t_ht_free       PASS    \
1223         "Verify that bucket pointer was cleared"
1224
1225 program t_ht_iter t_ht_iter \
1226         "Test hash table entry iteration"
1227 t_ht_iter: t_ht_init t_ht_addfind
1228
1229 test ht_iter_noargs             t_ht_iter       PASS    \
1230         "Test ht_iter() with no valid arguments"
1231 test ht_iter_badtable           t_ht_iter       PASS    \
1232         "Test ht_iter() with bad hash table"
1233 test ht_iter_baditer            t_ht_iter       PASS    \
1234         "Test ht_iter() with bad iteration function"
1235
1236 test ht_iter_frozen             t_ht_iter       PASS    \
1237         "Test that ht_iter() excludes hash tables that are frozen"
1238
1239 test ht_iter_funcreturn         t_ht_iter       PASS    \
1240         "Test that ht_iter() returns iteration function return value"
1241
1242 test ht_iter_functab_e0         t_ht_iter       PASS    \
1243         "Test that hash tables match while iterating over entry 0"
1244 test ht_iter_funcent_e0         t_ht_iter       PASS    \
1245         "Test that hash table entries match while iterating over entry 0"
1246 test ht_iter_functab_e1         t_ht_iter       PASS    \
1247         "Test that hash tables match while iterating over entry 1"
1248 test ht_iter_funcent_e1         t_ht_iter       PASS    \
1249         "Test that hash table entries match while iterating over entry 1"
1250 test ht_iter_functab_e2         t_ht_iter       PASS    \
1251         "Test that hash tables match while iterating over entry 2"
1252 test ht_iter_funcent_e2         t_ht_iter       PASS    \
1253         "Test that hash table entries match while iterating over entry 2"
1254 test ht_iter_functab_e3         t_ht_iter       PASS    \
1255         "Test that hash tables match while iterating over entry 3"
1256 test ht_iter_funcent_e3         t_ht_iter       PASS    \
1257         "Test that hash table entries match while iterating over entry 3"
1258 test ht_iter_functab_e4         t_ht_iter       PASS    \
1259         "Test that hash tables match while iterating over entry 4"
1260 test ht_iter_funcent_e4         t_ht_iter       PASS    \
1261         "Test that hash table entries match while iterating over entry 4"
1262 test ht_iter_functab_e5         t_ht_iter       PASS    \
1263         "Test that hash tables match while iterating over entry 5"
1264 test ht_iter_funcent_e5         t_ht_iter       PASS    \
1265         "Test that hash table entries match while iterating over entry 5"
1266 test ht_iter_functab_e6         t_ht_iter       PASS    \
1267         "Test that hash tables match while iterating over entry 6"
1268 test ht_iter_funcent_e6         t_ht_iter       PASS    \
1269         "Test that hash table entries match while iterating over entry 6"
1270 test ht_iter_functab_e7         t_ht_iter       PASS    \
1271         "Test that hash tables match while iterating over entry 7"
1272 test ht_iter_funcent_e7         t_ht_iter       PASS    \
1273         "Test that hash table entries match while iterating over entry 7"
1274
1275 test ht_iter_function           t_ht_iter       PASS    \
1276         "Test that ht_iter() iterates over hash table"
1277 test ht_iter_func_mask          t_ht_iter       PASS    \
1278         "Test that ht_iter() visited all entries in the hash table"
1279
1280 program t_ht_flush t_ht_flush \
1281         "Test hash table entry flush"
1282 t_ht_flush: t_ht_init t_ht_addfind t_ht_remove
1283
1284 test ht_flush_noargs            t_ht_flush      PASS    \
1285         "Test ht_flush() with no valid arguments"
1286 test ht_flush_badtable          t_ht_flush      PASS    \
1287         "Test ht_flush() with bad hash table"
1288
1289 test ht_flush_frozen            t_ht_flush      PASS    \
1290         "Test that ht_flush() excludes hash tables that are frozen"
1291
1292 test ht_flush_nofunc            t_ht_flush      PASS    \
1293         "Test that ht_flush() with no flush function performs correctly"
1294 test ht_flush_nofunc_count      t_ht_flush      PASS    \
1295         "Test that ht_flush() removes all items from the table"
1296
1297 test ht_flush_functab_e0        t_ht_flush      PASS    \
1298         "Test that hash tables match while flushing entry 0"
1299 test ht_flush_funcent_e0        t_ht_flush      PASS    \
1300         "Test that hash table entries match while flushing entry 0"
1301 test ht_flush_functab_e1        t_ht_flush      PASS    \
1302         "Test that hash tables match while flushing entry 1"
1303 test ht_flush_funcent_e1        t_ht_flush      PASS    \
1304         "Test that hash table entries match while flushing entry 1"
1305 test ht_flush_functab_e2        t_ht_flush      PASS    \
1306         "Test that hash tables match while flushing entry 2"
1307 test ht_flush_funcent_e2        t_ht_flush      PASS    \
1308         "Test that hash table entries match while flushing entry 2"
1309 test ht_flush_functab_e3        t_ht_flush      PASS    \
1310         "Test that hash tables match while flushing entry 3"
1311 test ht_flush_funcent_e3        t_ht_flush      PASS    \
1312         "Test that hash table entries match while flushing entry 3"
1313
1314 test ht_flush_funcreturn        t_ht_flush      PASS    \
1315         "Test that ht_flush() returns flush function return value"
1316 test ht_flush_funcreturn_count  t_ht_flush      PASS    \
1317         "Test that ht_flush() removed appropriate entry"
1318
1319 test ht_flush_function          t_ht_flush      PASS    \
1320         "Test that ht_flush() flushes tables with a flush function"
1321 test ht_flush_function_count    t_ht_flush      PASS    \
1322         "Test that ht_flush() removes all entries when called with function"
1323
1324 test ht_flush_func_mask         t_ht_flush      PASS    \
1325         "Test that ht_flush() visited all entries in the hash table"
1326
1327 program t_ht_resize t_ht_resize \
1328         "Test hash table resizing"
1329 t_ht_resize: t_ht_init t_ht_addfind t_ht_iter t_ht_remove t_ll_init \
1330              t_ll_remove t_ll_add
1331
1332 test ht_resize_noargs           t_ht_resize     PASS    \
1333         "Test ht_resize() with no valid arguments"
1334 test ht_resize_badtable         t_ht_resize     PASS    \
1335         "Test ht_resize() with bad hash table"
1336
1337 test ht_resize_frozen           t_ht_resize     PASS    \
1338         "Test that ht_resize() excludes hash tables that are frozen"
1339
1340 test ht_resize_current          t_ht_resize     PASS    \
1341         "Test that ht_resize() to current count works"
1342 test ht_resize_current_mod      t_ht_resize     PASS    \
1343         "Test that ht_resize() to current count set proper modulus"
1344
1345 test ht_resize_shrink           t_ht_resize     PASS    \
1346         "Test that ht_resize() to shrink works"
1347 test ht_resize_shrink_mod       t_ht_resize     PASS    \
1348         "Test that ht_resize() to shrink set proper modulus"
1349
1350 test ht_resize_grow             t_ht_resize     PASS    \
1351         "Test that ht_resize() to grow works"
1352 test ht_resize_grow_mod         t_ht_resize     PASS    \
1353         "Test that ht_resize() to grow set proper modulus"
1354
1355 test ht_resize_functab_e0       t_ht_resize     PASS    \
1356         "Test that entry 0 has the proper hash table pointer"
1357 test ht_resize_funcent_e0       t_ht_resize     PASS    \
1358         "Test that entry 0 is the correct entry"
1359 test ht_resize_functab_e1       t_ht_resize     PASS    \
1360         "Test that entry 1 has the proper hash table pointer"
1361 test ht_resize_funcent_e1       t_ht_resize     PASS    \
1362         "Test that entry 1 is the correct entry"
1363 test ht_resize_functab_e2       t_ht_resize     PASS    \
1364         "Test that entry 2 has the proper hash table pointer"
1365 test ht_resize_funcent_e2       t_ht_resize     PASS    \
1366         "Test that entry 2 is the correct entry"
1367 test ht_resize_functab_e3       t_ht_resize     PASS    \
1368         "Test that entry 3 has the proper hash table pointer"
1369 test ht_resize_funcent_e3       t_ht_resize     PASS    \
1370         "Test that entry 3 is the correct entry"
1371 test ht_resize_functab_e4       t_ht_resize     PASS    \
1372         "Test that entry 4 has the proper hash table pointer"
1373 test ht_resize_funcent_e4       t_ht_resize     PASS    \
1374         "Test that entry 4 is the correct entry"
1375 test ht_resize_functab_e5       t_ht_resize     PASS    \
1376         "Test that entry 5 has the proper hash table pointer"
1377 test ht_resize_funcent_e5       t_ht_resize     PASS    \
1378         "Test that entry 5 is the correct entry"
1379 test ht_resize_functab_e6       t_ht_resize     PASS    \
1380         "Test that entry 6 has the proper hash table pointer"
1381 test ht_resize_funcent_e6       t_ht_resize     PASS    \
1382         "Test that entry 6 is the correct entry"
1383 test ht_resize_functab_e7       t_ht_resize     PASS    \
1384         "Test that entry 7 has the proper hash table pointer"
1385 test ht_resize_funcent_e7       t_ht_resize     PASS    \
1386         "Test that entry 7 is the correct entry"
1387 test ht_resize_elemchk          t_ht_resize     PASS    \
1388         "Check that all entries are in the hash table by iteration"
1389 test ht_resize_funcmask         t_ht_resize     PASS    \
1390         "Verify that all entries were iterated over"
1391
1392 test ht_remove_autoshrink       t_ht_resize     PASS    \
1393         "Test that ht_remove() performs autoshrink properly"
1394 test ht_remove_autoshrink_mod   t_ht_resize     PASS    \
1395         "Test that autoshrink set proper modulus"
1396
1397 test ht_resize_callerr_mod      t_ht_resize     PASS    \
1398         "Test that table has not been resized prior to error callback"
1399 test ht_resize_callerr_newmod   t_ht_resize     PASS    \
1400         "Test that new modulus is correct in error callback"
1401 test ht_resize_callerr          t_ht_resize     PASS    \
1402         "Test that ht_resize() returns resize callback error"
1403
1404 test ht_resize_callback_mod     t_ht_resize     PASS    \
1405         "Test that table has not been resized prior to resize callback"
1406 test ht_resize_callback_newmod  t_ht_resize     PASS    \
1407         "Test that new modulus is correct in error callback"
1408
1409 test ht_resize_prep             t_ht_resize     PASS    \
1410         "Shrink table in preparation for autogrow test"
1411 test ht_resize_prep_mod         t_ht_resize     PASS    \
1412         "Verify that preparation set proper modulus"
1413
1414 test ht_add_autogrow            t_ht_resize     PASS    \
1415         "Test that ht_add() performs autogrow properly"
1416 test ht_add_autogrow_mod        t_ht_resize     PASS    \
1417         "Test that autogrow set proper modulus"
1418
1419
1420 program t_st_init t_st_init \
1421         "Test sparse matrix table initialization"
1422 t_st_init: t_ht_init
1423
1424 test st_static_magic            t_st_init       PASS    \
1425         "Test static initialization: magic number"
1426 test st_static_htinit           t_st_init       PASS    \
1427         "Test static initialization: hash table init"
1428 test st_static_hflags           t_st_init       PASS    \
1429         "Test static initialization: flags"
1430 test st_static_hmodulus         t_st_init       PASS    \
1431         "Test static initialization: modulus"
1432 test st_static_hfunc            t_st_init       PASS    \
1433         "Test static initialization: hash function"
1434 test st_static_hcomp            t_st_init       PASS    \
1435         "Test static initialization: hash comparison function"
1436 test st_static_hrsize           t_st_init       PASS    \
1437         "Test static initialization: hash resize callback"
1438 test st_static_rsize            t_st_init       PASS    \
1439         "Test static initialization: resize callback"
1440 test st_static_hextra           t_st_init       PASS    \
1441         "Test static initialization: extra data"
1442
1443 test st_init_noargs             t_st_init       PASS    \
1444         "Test st_init() with no valid arguments"
1445
1446 test st_dynamic_nomod           t_st_init       PASS    \
1447         "Test dynamic initialization (no modulus)"
1448 test st_dynamic_nomod_magic     t_st_init       PASS    \
1449         "Test dynamic initialization (no modulus): magic number"
1450 test st_dynamic_nomod_htinit    t_st_init       PASS    \
1451         "Test dynamic initialization (no modulus): hash table init"
1452 test st_dynamic_nomod_hflags    t_st_init       PASS    \
1453         "Test dynamic initialization (no modulus): flags"
1454 test st_dynamic_nomod_hmodulus  t_st_init       PASS    \
1455         "Test dynamic initialization (no modulus): modulus"
1456 test st_dynamic_nomod_hfunc     t_st_init       PASS    \
1457         "Test dynamic initialization (no modulus): hash function"
1458 test st_dynamic_nomod_hcomp     t_st_init       PASS    \
1459         "Test dynamic initialization (no modulus): hash comparison function"
1460 test st_dynamic_nomod_hrsize    t_st_init       PASS    \
1461         "Test dynamic initialization (no modulus): hash resize callback"
1462 test st_dynamic_nomod_rsize     t_st_init       PASS    \
1463         "Test dynamic initialization (no modulus): resize callback"
1464 test st_dynamic_nomod_hextra    t_st_init       PASS    \
1465         "Test dynamic initialization (no modulus): extra data"
1466
1467 test st_dynamic_mod6            t_st_init       PASS    \
1468         "Test dynamic initialization (modulus 6, round 7)"
1469 test st_dynamic_mod6_magic      t_st_init       PASS    \
1470         "Test dynamic initialization (modulus 6, round 7): magic number"
1471 test st_dynamic_mod6_htinit     t_st_init       PASS    \
1472         "Test dynamic initialization (modulus 6, round 7): hash table init"
1473 test st_dynamic_mod6_hflags     t_st_init       PASS    \
1474         "Test dynamic initialization (modulus 6, round 7): flags"
1475 test st_dynamic_mod6_hmodulus   t_st_init       PASS    \
1476         "Test dynamic initialization (modulus 6, round 7): modulus"
1477 test st_dynamic_mod6_hfunc      t_st_init       PASS    \
1478         "Test dynamic initialization (modulus 6, round 7): hash function"
1479 test st_dynamic_mod6_hcomp      t_st_init       PASS    \
1480         "Test dynamic initialization (modulus 6, round 7): hash comparison function"
1481 test st_dynamic_mod6_hrsize     t_st_init       PASS    \
1482         "Test dynamic initialization (modulus 6, round 7): hash resize callback"
1483 test st_dynamic_mod6_rsize      t_st_init       PASS    \
1484         "Test dynamic initialization (modulus 6, round 7): resize callback"
1485 test st_dynamic_mod6_hextra     t_st_init       PASS    \
1486         "Test dynamic initialization (modulus 6, round 7): extra data"