# Copyright (C) 2002 by Kevin L. Mitchell # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Library General Public # License as published by the Free Software Foundation; either # version 2 of the License, or (at your option) any later version. # # This library is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # Library General Public License for more details. # # You should have received a copy of the GNU Library General Public # License along with this library; if not, write to the Free # Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, # MA 02111-1307, USA # # @(#)$Id: test-harness.dat,v 1.1 2003-03-07 02:36:11 klmitch Exp $ program t_ll_init t_ll_init \ "Test linked list head initializations" test ll_static_magic t_ll_init PASS \ "Test static initialization: magic number" test ll_static_count t_ll_init PASS \ "Test static initialization: count" test ll_static_first t_ll_init PASS \ "Test static initialization: pointer to first" test ll_static_last t_ll_init PASS \ "Test static initialization: pointer to last" test ll_init_nohead t_ll_init PASS \ "Test that ll_init() handles no arguments properly" test ll_dynamic t_ll_init PASS \ "Test that ll_init() with proper arguments returns success" test ll_dynamic_magic t_ll_init PASS \ "Test dynamic initialization: magic number" test ll_dynamic_count t_ll_init PASS \ "Test dynamic initialization: count" test ll_dynamic_first t_ll_init PASS \ "Test dynamic initialization: pointer to first" test ll_dynamic_last t_ll_init PASS \ "Test dynamic initialization: pointer to last" program t_le_init t_le_init \ "Test linked list element initializations" test le_static_magic t_le_init PASS \ "Test static initialization: magic number" test le_static_next t_le_init PASS \ "Test static initialization: pointer to next" test le_static_prev t_le_init PASS \ "Test static initialization: pointer to previous" test le_static_object t_le_init PASS \ "Test static initialization: pointer to object" test le_static_head t_le_init PASS \ "Test static initialization: pointer to head" test le_static_flags t_le_init PASS \ "Test static initialization: flags" test le_init_nothing t_le_init PASS \ "Test that le_init() handles no arguments properly" test le_init_objectonly t_le_init PASS \ "Test that le_init() handles object argument only properly" test le_init_elemonly t_le_init PASS \ "Test that le_init() handles element argument only properly" test le_dynamic t_le_init PASS \ "Test that le_init() with proper arguments returns success" test le_dynamic_magic t_le_init PASS \ "Test dynamic initialization: magic number" test le_dynamic_next t_le_init PASS \ "Test dynamic initialization: pointer to next" test le_dynamic_prev t_le_init PASS \ "Test dynamic initialization: pointer to previous" test le_dynamic_object t_le_init PASS \ "Test dynamic initialization: pointer to object" test le_dynamic_head t_le_init PASS \ "Test dynamic initialization: pointer to head" test le_dynamic_flags t_le_init PASS \ "Test dynamic initialization: flags" program t_ll_add t_ll_add \ "Test linked list element insertion" test ll_add_noargs t_ll_add PASS \ "Test ll_add() with no valid arguments" test ll_add_badlist t_ll_add PASS \ "Test ll_add() with bad list" test ll_add_badnew t_ll_add PASS \ "Test ll_add() with bad new element" test ll_add_badelem t_ll_add PASS \ "Test ll_add() with bad original element" test ll_add_before_noelem t_ll_add PASS \ "Test ll_add() with LINK_LOC_BEFORE with no original element" test ll_add_after_noelem t_ll_add PASS \ "Test ll_add() with LINK_LOC_AFTER with no original element" test ll_add_l0e0 t_ll_add PASS \ "Test ll_add() successful addition (1)" test list_l0e0_count t_ll_add PASS \ "Test list head element count correct after insert (1)" test list_l0e0_first t_ll_add PASS \ "Test list head first element pointers correct after insert (1)" test list_l0e0_last t_ll_add PASS \ "Test list head last element pointers correct after insert (1)" test elem_l0e0_next t_ll_add PASS \ "Test element next pointers correct after insert (1/0)" test elem_l0e0_prev t_ll_add PASS \ "Test element prev pointers correct after insert (1/0)" test elem_l0e0_head t_ll_add PASS \ "Test element head pointers correct after insert (1/0)" test ll_add_l1e0 t_ll_add PASS \ "Test ll_add() correctly rejects insertions of busy items" test ll_add_l1e1 t_ll_add PASS \ "Test ll_add() successful addition (2)" test list_l1e1_count t_ll_add PASS \ "Test list head element count correct after insert (2)" test list_l1e1_first t_ll_add PASS \ "Test list head first element pointers correct after insert (2)" test list_l1e1_last t_ll_add PASS \ "Test list head last element pointers correct after insert (2)" test elem_l1e1_next t_ll_add PASS \ "Test element next pointers correct after insert (2/1)" test elem_l1e1_prev t_ll_add PASS \ "Test element prev pointers correct after insert (2/1)" test elem_l1e1_head t_ll_add PASS \ "Test element head pointers correct after insert (2/1)" test ll_add_l0e2a1 t_ll_add PASS \ "Test ll_add correctly rejects insertions of cross-list items" test ll_add_l0e2a3 t_ll_add PASS \ "Test ll_add correctly rejects insertions after no-list items" test ll_add_l0e2t t_ll_add PASS \ "Test ll_add() successful addition to tail (3)" test list_l0e0e2_count t_ll_add PASS \ "Test list head element count correct after insert (3)" test list_l0e0e2_first t_ll_add PASS \ "Test list head first element pointers correct after insert (3)" test list_l0e0e2_last t_ll_add PASS \ "Test list head last element pointers correct after insert (3)" test elem_l0e0e2_0_next t_ll_add PASS \ "Test element next pointers correct after insert (3/0)" test elem_l0e0e2_0_prev t_ll_add PASS \ "Test element prev pointers correct after insert (3/0)" test elem_l0e0e2_0_head t_ll_add PASS \ "Test element head pointers correct after insert (3/0)" test elem_l0e0e2_2_next t_ll_add PASS \ "Test element next pointers correct after insert (3/2)" test elem_l0e0e2_2_prev t_ll_add PASS \ "Test element prev pointers correct after insert (3/2)" test elem_l0e0e2_2_head t_ll_add PASS \ "Test element head pointers correct after insert (3/2)" test ll_add_l1e3h t_ll_add PASS \ "Test ll_add() successful addition to head (4)" test list_l1e3e1_count t_ll_add PASS \ "Test list head element count correct after insert (4)" test list_l1e3e1_first t_ll_add PASS \ "Test list head first element pointers correct after insert (4)" test list_l1e3e1_last t_ll_add PASS \ "Test list head last element pointers correct after insert (4)" test elem_l1e3e1_1_next t_ll_add PASS \ "Test element next pointers correct after insert (4/1)" test elem_l1e3e1_1_prev t_ll_add PASS \ "Test element prev pointers correct after insert (4/1)" test elem_l1e3e1_1_head t_ll_add PASS \ "Test element head pointers correct after insert (4/1)" test elem_l1e3e1_3_next t_ll_add PASS \ "Test element next pointers correct after insert (4/3)" test elem_l1e3e1_3_prev t_ll_add PASS \ "Test element prev pointers correct after insert (4/3)" test elem_l1e3e1_3_head t_ll_add PASS \ "Test element head pointers correct after insert (4/3)" test ll_add_l0e4b2 t_ll_add PASS \ "Test ll_add() successful addition before element (5)" test list_l0e0e4e2_count t_ll_add PASS \ "Test list head element count correct after insert (5)" test list_l0e0e4e2_first t_ll_add PASS \ "Test list head first element pointers correct after insert (5)" test list_l0e0e4e2_last t_ll_add PASS \ "Test list head last element pointers correct after insert (5)" test elem_l0e0e4e2_0_next t_ll_add PASS \ "Test element next pointers correct after insert (5/0)" test elem_l0e0e4e2_0_prev t_ll_add PASS \ "Test element prev pointers correct after insert (5/0)" test elem_l0e0e4e2_0_head t_ll_add PASS \ "Test element head pointers correct after insert (5/0)" test elem_l0e0e4e2_2_next t_ll_add PASS \ "Test element next pointers correct after insert (5/2)" test elem_l0e0e4e2_2_prev t_ll_add PASS \ "Test element prev pointers correct after insert (5/2)" test elem_l0e0e4e2_2_head t_ll_add PASS \ "Test element head pointers correct after insert (5/2)" test elem_l0e0e4e2_4_next t_ll_add PASS \ "Test element next pointers correct after insert (5/4)" test elem_l0e0e4e2_4_prev t_ll_add PASS \ "Test element prev pointers correct after insert (5/4)" test elem_l0e0e4e2_4_head t_ll_add PASS \ "Test element head pointers correct after insert (5/4)" test ll_add_l1e5a3 t_ll_add PASS \ "Test ll_add() successful addition before element (6)" test list_l1e3e5e1_count t_ll_add PASS \ "Test list head element count correct after insert (6)" test list_l1e3e5e1_first t_ll_add PASS \ "Test list head first element pointers correct after insert (6)" test list_l1e3e5e1_last t_ll_add PASS \ "Test list head last element pointers correct after insert (6)" test elem_l1e3e5e1_1_next t_ll_add PASS \ "Test element next pointers correct after insert (6/1)" test elem_l1e3e5e1_1_prev t_ll_add PASS \ "Test element prev pointers correct after insert (6/1)" test elem_l1e3e5e1_1_head t_ll_add PASS \ "Test element head pointers correct after insert (6/1)" test elem_l1e3e5e1_3_next t_ll_add PASS \ "Test element next pointers correct after insert (6/3)" test elem_l1e3e5e1_3_prev t_ll_add PASS \ "Test element prev pointers correct after insert (6/3)" test elem_l1e3e5e1_3_head t_ll_add PASS \ "Test element head pointers correct after insert (6/3)" test elem_l1e3e5e1_5_next t_ll_add PASS \ "Test element next pointers correct after insert (6/5)" test elem_l1e3e5e1_5_prev t_ll_add PASS \ "Test element prev pointers correct after insert (6/5)" test elem_l1e3e5e1_5_head t_ll_add PASS \ "Test element head pointers correct after insert (6/5)" program t_ll_move t_ll_move \ "Test linked list element reordering" t_ll_move: t_ll_add test ll_move_baseline_0_count t_ll_move PASS \ "Baseline list ordering: list 0 element count" test ll_move_baseline_0_first t_ll_move PASS \ "Baseline list ordering: list 0 first element" test ll_move_baseline_0_last t_ll_move PASS \ "Baseline list ordering: list 0 last element" test ll_move_baseline_0/0_next t_ll_move PASS \ "Baseline list ordering: list 0 element 0 next pointer" test ll_move_baseline_0/0_prev t_ll_move PASS \ "Baseline list ordering: list 0 element 0 previous pointer" test ll_move_baseline_0/0_head t_ll_move PASS \ "Baseline list ordering: list 0 element 0 head pointer" test ll_move_baseline_0/1_next t_ll_move PASS \ "Baseline list ordering: list 0 element 1 next pointer" test ll_move_baseline_0/1_prev t_ll_move PASS \ "Baseline list ordering: list 0 element 1 previous pointer" test ll_move_baseline_0/1_head t_ll_move PASS \ "Baseline list ordering: list 0 element 1 head pointer" test ll_move_baseline_0/2_next t_ll_move PASS \ "Baseline list ordering: list 0 element 2 next pointer" test ll_move_baseline_0/2_prev t_ll_move PASS \ "Baseline list ordering: list 0 element 2 previous pointer" test ll_move_baseline_0/2_head t_ll_move PASS \ "Baseline list ordering: list 0 element 2 head pointer" test ll_move_baseline_0/3_next t_ll_move PASS \ "Baseline list ordering: list 0 element 3 next pointer" test ll_move_baseline_0/3_prev t_ll_move PASS \ "Baseline list ordering: list 0 element 3 previous pointer" test ll_move_baseline_0/3_head t_ll_move PASS \ "Baseline list ordering: list 0 element 3 head pointer" test ll_move_baseline_0/4_next t_ll_move PASS \ "Baseline list ordering: list 0 element 4 next pointer" test ll_move_baseline_0/4_prev t_ll_move PASS \ "Baseline list ordering: list 0 element 4 previous pointer" test ll_move_baseline_0/4_head t_ll_move PASS \ "Baseline list ordering: list 0 element 4 head pointer" test ll_move_baseline_1_count t_ll_move PASS \ "Baseline list ordering: list 1 element count" test ll_move_baseline_1_first t_ll_move PASS \ "Baseline list ordering: list 1 first element" test ll_move_baseline_1_last t_ll_move PASS \ "Baseline list ordering: list 1 last element" test ll_move_baseline_1/5_next t_ll_move PASS \ "Baseline list ordering: list 1 element 5 next pointer" test ll_move_baseline_1/5_prev t_ll_move PASS \ "Baseline list ordering: list 1 element 5 previous pointer" test ll_move_baseline_1/5_head t_ll_move PASS \ "Baseline list ordering: list 1 element 5 head pointer" test ll_move_baseline_1/6_next t_ll_move PASS \ "Baseline list ordering: list 1 element 6 next pointer" test ll_move_baseline_1/6_prev t_ll_move PASS \ "Baseline list ordering: list 1 element 6 previous pointer" test ll_move_baseline_1/6_head t_ll_move PASS \ "Baseline list ordering: list 1 element 6 head pointer" test ll_move_baseline_1/7_next t_ll_move PASS \ "Baseline list ordering: list 1 element 7 next pointer" test ll_move_baseline_1/7_prev t_ll_move PASS \ "Baseline list ordering: list 1 element 7 previous pointer" test ll_move_baseline_1/7_head t_ll_move PASS \ "Baseline list ordering: list 1 element 7 head pointer" test ll_move_baseline_1/8_next t_ll_move PASS \ "Baseline list ordering: list 1 element 8 next pointer" test ll_move_baseline_1/8_prev t_ll_move PASS \ "Baseline list ordering: list 1 element 8 previous pointer" test ll_move_baseline_1/8_head t_ll_move PASS \ "Baseline list ordering: list 1 element 8 head pointer" test ll_move_baseline_1/9_next t_ll_move PASS \ "Baseline list ordering: list 1 element 9 next pointer" test ll_move_baseline_1/9_prev t_ll_move PASS \ "Baseline list ordering: list 1 element 9 previous pointer" test ll_move_baseline_1/9_head t_ll_move PASS \ "Baseline list ordering: list 1 element 9 head pointer" test ll_move_noargs t_ll_move PASS \ "Test ll_move() with no valid arguments" test ll_move_badlist t_ll_move PASS \ "Test ll_move() with bad list" test ll_move_badnew t_ll_move PASS \ "Test ll_move() with bad new element" test ll_move_badelem t_ll_move PASS \ "Test ll_move() with bad original element" test ll_move_before_noelem t_ll_move PASS \ "Test ll_move() with LINK_LOC_BEFORE with no original element" test ll_move_after_noelem t_ll_move PASS \ "Test ll_move() with LINK_LOC_AFTER with no original element" test ll_move_neweqelem t_ll_move PASS \ "Test ll_move() with new == elem is rejected" test ll_move_newunused t_ll_move PASS \ "Test ll_move() with unused new element" test ll_move_elemunused t_ll_move PASS \ "Test ll_move() with unused original element" test ll_move_newwronglist t_ll_move PASS \ "Test ll_move() with new element in wrong list" test ll_move_elemwronglist t_ll_move PASS \ "Test ll_move() with original element in wrong list" test ll_move_l0e4h t_ll_move PASS \ "Test ll_move() of tail object to head of list" test ll_move_l0e4h_0_count t_ll_move PASS \ "Tail to head: list 0 element count" test ll_move_l0e4h_0_first t_ll_move PASS \ "Tail to head: list 0 first element" test ll_move_l0e4h_0_last t_ll_move PASS \ "Tail to head: list 0 last element" test ll_move_l0e4h_0/0_next t_ll_move PASS \ "Tail to head: list 0 element 0 next pointer" test ll_move_l0e4h_0/0_prev t_ll_move PASS \ "Tail to head: list 0 element 0 previous pointer" test ll_move_l0e4h_0/0_head t_ll_move PASS \ "Tail to head: list 0 element 0 head pointer" test ll_move_l0e4h_0/1_next t_ll_move PASS \ "Tail to head: list 0 element 1 next pointer" test ll_move_l0e4h_0/1_prev t_ll_move PASS \ "Tail to head: list 0 element 1 previous pointer" test ll_move_l0e4h_0/1_head t_ll_move PASS \ "Tail to head: list 0 element 1 head pointer" test ll_move_l0e4h_0/2_next t_ll_move PASS \ "Tail to head: list 0 element 2 next pointer" test ll_move_l0e4h_0/2_prev t_ll_move PASS \ "Tail to head: list 0 element 2 previous pointer" test ll_move_l0e4h_0/2_head t_ll_move PASS \ "Tail to head: list 0 element 2 head pointer" test ll_move_l0e4h_0/3_next t_ll_move PASS \ "Tail to head: list 0 element 3 next pointer" test ll_move_l0e4h_0/3_prev t_ll_move PASS \ "Tail to head: list 0 element 3 previous pointer" test ll_move_l0e4h_0/3_head t_ll_move PASS \ "Tail to head: list 0 element 3 head pointer" test ll_move_l0e4h_0/4_next t_ll_move PASS \ "Tail to head: list 0 element 4 next pointer" test ll_move_l0e4h_0/4_prev t_ll_move PASS \ "Tail to head: list 0 element 4 previous pointer" test ll_move_l0e4h_0/4_head t_ll_move PASS \ "Tail to head: list 0 element 4 head pointer" test ll_move_l0e4t t_ll_move PASS \ "Test ll_move() of head object to tail of list" test ll_move_l0e4t_0_count t_ll_move PASS \ "Head to tail: list 0 element count" test ll_move_l0e4t_0_first t_ll_move PASS \ "Head to tail: list 0 first element" test ll_move_l0e4t_0_last t_ll_move PASS \ "Head to tail: list 0 last element" test ll_move_l0e4t_0/0_next t_ll_move PASS \ "Head to tail: list 0 element 0 next pointer" test ll_move_l0e4t_0/0_prev t_ll_move PASS \ "Head to tail: list 0 element 0 previous pointer" test ll_move_l0e4t_0/0_head t_ll_move PASS \ "Head to tail: list 0 element 0 head pointer" test ll_move_l0e4t_0/1_next t_ll_move PASS \ "Head to tail: list 0 element 1 next pointer" test ll_move_l0e4t_0/1_prev t_ll_move PASS \ "Head to tail: list 0 element 1 previous pointer" test ll_move_l0e4t_0/1_head t_ll_move PASS \ "Head to tail: list 0 element 1 head pointer" test ll_move_l0e4t_0/2_next t_ll_move PASS \ "Head to tail: list 0 element 2 next pointer" test ll_move_l0e4t_0/2_prev t_ll_move PASS \ "Head to tail: list 0 element 2 previous pointer" test ll_move_l0e4t_0/2_head t_ll_move PASS \ "Head to tail: list 0 element 2 head pointer" test ll_move_l0e4t_0/3_next t_ll_move PASS \ "Head to tail: list 0 element 3 next pointer" test ll_move_l0e4t_0/3_prev t_ll_move PASS \ "Head to tail: list 0 element 3 previous pointer" test ll_move_l0e4t_0/3_head t_ll_move PASS \ "Head to tail: list 0 element 3 head pointer" test ll_move_l0e4t_0/4_next t_ll_move PASS \ "Head to tail: list 0 element 4 next pointer" test ll_move_l0e4t_0/4_prev t_ll_move PASS \ "Head to tail: list 0 element 4 previous pointer" test ll_move_l0e4t_0/4_head t_ll_move PASS \ "Head to tail: list 0 element 4 head pointer" test ll_move_l0e4a0 t_ll_move PASS \ "Test ll_move() of tail object to after head of list" test ll_move_l0e4a0_0_count t_ll_move PASS \ "Tail to after head: list 0 element count" test ll_move_l0e4a0_0_first t_ll_move PASS \ "Tail to after head: list 0 first element" test ll_move_l0e4a0_0_last t_ll_move PASS \ "Tail to after head: list 0 last element" test ll_move_l0e4a0_0/0_next t_ll_move PASS \ "Tail to after head: list 0 element 0 next pointer" test ll_move_l0e4a0_0/0_prev t_ll_move PASS \ "Tail to after head: list 0 element 0 previous pointer" test ll_move_l0e4a0_0/0_head t_ll_move PASS \ "Tail to after head: list 0 element 0 head pointer" test ll_move_l0e4a0_0/1_next t_ll_move PASS \ "Tail to after head: list 0 element 1 next pointer" test ll_move_l0e4a0_0/1_prev t_ll_move PASS \ "Tail to after head: list 0 element 1 previous pointer" test ll_move_l0e4a0_0/1_head t_ll_move PASS \ "Tail to after head: list 0 element 1 head pointer" test ll_move_l0e4a0_0/2_next t_ll_move PASS \ "Tail to after head: list 0 element 2 next pointer" test ll_move_l0e4a0_0/2_prev t_ll_move PASS \ "Tail to after head: list 0 element 2 previous pointer" test ll_move_l0e4a0_0/2_head t_ll_move PASS \ "Tail to after head: list 0 element 2 head pointer" test ll_move_l0e4a0_0/3_next t_ll_move PASS \ "Tail to after head: list 0 element 3 next pointer" test ll_move_l0e4a0_0/3_prev t_ll_move PASS \ "Tail to after head: list 0 element 3 previous pointer" test ll_move_l0e4a0_0/3_head t_ll_move PASS \ "Tail to after head: list 0 element 3 head pointer" test ll_move_l0e4a0_0/4_next t_ll_move PASS \ "Tail to after head: list 0 element 4 next pointer" test ll_move_l0e4a0_0/4_prev t_ll_move PASS \ "Tail to after head: list 0 element 4 previous pointer" test ll_move_l0e4a0_0/4_head t_ll_move PASS \ "Tail to after head: list 0 element 4 head pointer" test ll_move_l0e0b3 t_ll_move PASS \ "Test ll_move() of head object to before tail of list" test ll_move_l0e0b3_0_count t_ll_move PASS \ "Head to before tail: list 0 element count" test ll_move_l0e0b3_0_first t_ll_move PASS \ "Head to before tail: list 0 first element" test ll_move_l0e0b3_0_last t_ll_move PASS \ "Head to before tail: list 0 last element" test ll_move_l0e0b3_0/0_next t_ll_move PASS \ "Head to before tail: list 0 element 0 next pointer" test ll_move_l0e0b3_0/0_prev t_ll_move PASS \ "Head to before tail: list 0 element 0 previous pointer" test ll_move_l0e0b3_0/0_head t_ll_move PASS \ "Head to before tail: list 0 element 0 head pointer" test ll_move_l0e0b3_0/1_next t_ll_move PASS \ "Head to before tail: list 0 element 1 next pointer" test ll_move_l0e0b3_0/1_prev t_ll_move PASS \ "Head to before tail: list 0 element 1 previous pointer" test ll_move_l0e0b3_0/1_head t_ll_move PASS \ "Head to before tail: list 0 element 1 head pointer" test ll_move_l0e0b3_0/2_next t_ll_move PASS \ "Head to before tail: list 0 element 2 next pointer" test ll_move_l0e0b3_0/2_prev t_ll_move PASS \ "Head to before tail: list 0 element 2 previous pointer" test ll_move_l0e0b3_0/2_head t_ll_move PASS \ "Head to before tail: list 0 element 2 head pointer" test ll_move_l0e0b3_0/3_next t_ll_move PASS \ "Head to before tail: list 0 element 3 next pointer" test ll_move_l0e0b3_0/3_prev t_ll_move PASS \ "Head to before tail: list 0 element 3 previous pointer" test ll_move_l0e0b3_0/3_head t_ll_move PASS \ "Head to before tail: list 0 element 3 head pointer" test ll_move_l0e0b3_0/4_next t_ll_move PASS \ "Head to before tail: list 0 element 4 next pointer" test ll_move_l0e0b3_0/4_prev t_ll_move PASS \ "Head to before tail: list 0 element 4 previous pointer" test ll_move_l0e0b3_0/4_head t_ll_move PASS \ "Head to before tail: list 0 element 4 head pointer" test ll_move_l0e4a1 t_ll_move PASS \ "Test swapping sequential objects with LINK_LOC_AFTER" test ll_move_l0e4a1_0_count t_ll_move PASS \ "Swap elements with LINK_LOC_AFTER: list 0 element count" test ll_move_l0e4a1_0_first t_ll_move PASS \ "Swap elements with LINK_LOC_AFTER: list 0 first element" test ll_move_l0e4a1_0_last t_ll_move PASS \ "Swap elements with LINK_LOC_AFTER: list 0 last element" test ll_move_l0e4a1_0/0_next t_ll_move PASS \ "Swap elements with LINK_LOC_AFTER: list 0 element 0 next pointer" test ll_move_l0e4a1_0/0_prev t_ll_move PASS \ "Swap elements with LINK_LOC_AFTER: list 0 element 0 previous pointer" test ll_move_l0e4a1_0/0_head t_ll_move PASS \ "Swap elements with LINK_LOC_AFTER: list 0 element 0 head pointer" test ll_move_l0e4a1_0/1_next t_ll_move PASS \ "Swap elements with LINK_LOC_AFTER: list 0 element 1 next pointer" test ll_move_l0e4a1_0/1_prev t_ll_move PASS \ "Swap elements with LINK_LOC_AFTER: list 0 element 1 previous pointer" test ll_move_l0e4a1_0/1_head t_ll_move PASS \ "Swap elements with LINK_LOC_AFTER: list 0 element 1 head pointer" test ll_move_l0e4a1_0/2_next t_ll_move PASS \ "Swap elements with LINK_LOC_AFTER: list 0 element 2 next pointer" test ll_move_l0e4a1_0/2_prev t_ll_move PASS \ "Swap elements with LINK_LOC_AFTER: list 0 element 2 previous pointer" test ll_move_l0e4a1_0/2_head t_ll_move PASS \ "Swap elements with LINK_LOC_AFTER: list 0 element 2 head pointer" test ll_move_l0e4a1_0/3_next t_ll_move PASS \ "Swap elements with LINK_LOC_AFTER: list 0 element 3 next pointer" test ll_move_l0e4a1_0/3_prev t_ll_move PASS \ "Swap elements with LINK_LOC_AFTER: list 0 element 3 previous pointer" test ll_move_l0e4a1_0/3_head t_ll_move PASS \ "Swap elements with LINK_LOC_AFTER: list 0 element 3 head pointer" test ll_move_l0e4a1_0/4_next t_ll_move PASS \ "Swap elements with LINK_LOC_AFTER: list 0 element 4 next pointer" test ll_move_l0e4a1_0/4_prev t_ll_move PASS \ "Swap elements with LINK_LOC_AFTER: list 0 element 4 previous pointer" test ll_move_l0e4a1_0/4_head t_ll_move PASS \ "Swap elements with LINK_LOC_AFTER: list 0 element 4 head pointer" test ll_move_l0e3b0 t_ll_move PASS \ "Test swapping sequential objects with LINK_LOC_BEFORE" test ll_move_l0e3b0_0_count t_ll_move PASS \ "Swap elements with LINK_LOC_BEFORE: list 0 element count" test ll_move_l0e3b0_0_first t_ll_move PASS \ "Swap elements with LINK_LOC_BEFORE: list 0 first element" test ll_move_l0e3b0_0_last t_ll_move PASS \ "Swap elements with LINK_LOC_BEFORE: list 0 last element" test ll_move_l0e3b0_0/0_next t_ll_move PASS \ "Swap elements with LINK_LOC_BEFORE: list 0 element 0 next pointer" test ll_move_l0e3b0_0/0_prev t_ll_move PASS \ "Swap elements with LINK_LOC_BEFORE: list 0 element 0 previous pointer" test ll_move_l0e3b0_0/0_head t_ll_move PASS \ "Swap elements with LINK_LOC_BEFORE: list 0 element 0 head pointer" test ll_move_l0e3b0_0/1_next t_ll_move PASS \ "Swap elements with LINK_LOC_BEFORE: list 0 element 1 next pointer" test ll_move_l0e3b0_0/1_prev t_ll_move PASS \ "Swap elements with LINK_LOC_BEFORE: list 0 element 1 previous pointer" test ll_move_l0e3b0_0/1_head t_ll_move PASS \ "Swap elements with LINK_LOC_BEFORE: list 0 element 1 head pointer" test ll_move_l0e3b0_0/2_next t_ll_move PASS \ "Swap elements with LINK_LOC_BEFORE: list 0 element 2 next pointer" test ll_move_l0e3b0_0/2_prev t_ll_move PASS \ "Swap elements with LINK_LOC_BEFORE: list 0 element 2 previous pointer" test ll_move_l0e3b0_0/2_head t_ll_move PASS \ "Swap elements with LINK_LOC_BEFORE: list 0 element 2 head pointer" test ll_move_l0e3b0_0/3_next t_ll_move PASS \ "Swap elements with LINK_LOC_BEFORE: list 0 element 3 next pointer" test ll_move_l0e3b0_0/3_prev t_ll_move PASS \ "Swap elements with LINK_LOC_BEFORE: list 0 element 3 previous pointer" test ll_move_l0e3b0_0/3_head t_ll_move PASS \ "Swap elements with LINK_LOC_BEFORE: list 0 element 3 head pointer" test ll_move_l0e3b0_0/4_next t_ll_move PASS \ "Swap elements with LINK_LOC_BEFORE: list 0 element 4 next pointer" test ll_move_l0e3b0_0/4_prev t_ll_move PASS \ "Swap elements with LINK_LOC_BEFORE: list 0 element 4 previous pointer" test ll_move_l0e3b0_0/4_head t_ll_move PASS \ "Swap elements with LINK_LOC_BEFORE: list 0 element 4 head pointer" test ll_move_l0e1h t_ll_move PASS \ "Test moving head element to head of list" test ll_move_l0e1h_0_count t_ll_move PASS \ "Head to head: list 0 element count" test ll_move_l0e1h_0_first t_ll_move PASS \ "Head to head: list 0 first element" test ll_move_l0e1h_0_last t_ll_move PASS \ "Head to head: list 0 last element" test ll_move_l0e1h_0/0_next t_ll_move PASS \ "Head to head: list 0 element 0 next pointer" test ll_move_l0e1h_0/0_prev t_ll_move PASS \ "Head to head: list 0 element 0 previous pointer" test ll_move_l0e1h_0/0_head t_ll_move PASS \ "Head to head: list 0 element 0 head pointer" test ll_move_l0e1h_0/1_next t_ll_move PASS \ "Head to head: list 0 element 1 next pointer" test ll_move_l0e1h_0/1_prev t_ll_move PASS \ "Head to head: list 0 element 1 previous pointer" test ll_move_l0e1h_0/1_head t_ll_move PASS \ "Head to head: list 0 element 1 head pointer" test ll_move_l0e1h_0/2_next t_ll_move PASS \ "Head to head: list 0 element 2 next pointer" test ll_move_l0e1h_0/2_prev t_ll_move PASS \ "Head to head: list 0 element 2 previous pointer" test ll_move_l0e1h_0/2_head t_ll_move PASS \ "Head to head: list 0 element 2 head pointer" test ll_move_l0e1h_0/3_next t_ll_move PASS \ "Head to head: list 0 element 3 next pointer" test ll_move_l0e1h_0/3_prev t_ll_move PASS \ "Head to head: list 0 element 3 previous pointer" test ll_move_l0e1h_0/3_head t_ll_move PASS \ "Head to head: list 0 element 3 head pointer" test ll_move_l0e1h_0/4_next t_ll_move PASS \ "Head to head: list 0 element 4 next pointer" test ll_move_l0e1h_0/4_prev t_ll_move PASS \ "Head to head: list 0 element 4 previous pointer" test ll_move_l0e1h_0/4_head t_ll_move PASS \ "Head to head: list 0 element 4 head pointer" test ll_move_l0e0t t_ll_move PASS \ "Test moving tail element to tail of list" test ll_move_l0e0t_0_count t_ll_move PASS \ "Tail to tail: list 0 element count" test ll_move_l0e0t_0_first t_ll_move PASS \ "Tail to tail: list 0 first element" test ll_move_l0e0t_0_last t_ll_move PASS \ "Tail to tail: list 0 last element" test ll_move_l0e0t_0/0_next t_ll_move PASS \ "Tail to tail: list 0 element 0 next pointer" test ll_move_l0e0t_0/0_prev t_ll_move PASS \ "Tail to tail: list 0 element 0 previous pointer" test ll_move_l0e0t_0/0_head t_ll_move PASS \ "Tail to tail: list 0 element 0 head pointer" test ll_move_l0e0t_0/1_next t_ll_move PASS \ "Tail to tail: list 0 element 1 next pointer" test ll_move_l0e0t_0/1_prev t_ll_move PASS \ "Tail to tail: list 0 element 1 previous pointer" test ll_move_l0e0t_0/1_head t_ll_move PASS \ "Tail to tail: list 0 element 1 head pointer" test ll_move_l0e0t_0/2_next t_ll_move PASS \ "Tail to tail: list 0 element 2 next pointer" test ll_move_l0e0t_0/2_prev t_ll_move PASS \ "Tail to tail: list 0 element 2 previous pointer" test ll_move_l0e0t_0/2_head t_ll_move PASS \ "Tail to tail: list 0 element 2 head pointer" test ll_move_l0e0t_0/3_next t_ll_move PASS \ "Tail to tail: list 0 element 3 next pointer" test ll_move_l0e0t_0/3_prev t_ll_move PASS \ "Tail to tail: list 0 element 3 previous pointer" test ll_move_l0e0t_0/3_head t_ll_move PASS \ "Tail to tail: list 0 element 3 head pointer" test ll_move_l0e0t_0/4_next t_ll_move PASS \ "Tail to tail: list 0 element 4 next pointer" test ll_move_l0e0t_0/4_prev t_ll_move PASS \ "Tail to tail: list 0 element 4 previous pointer" test ll_move_l0e0t_0/4_head t_ll_move PASS \ "Tail to tail: list 0 element 4 head pointer" program t_ll_remove t_ll_remove \ "Test linked list element removal" t_ll_remove: t_ll_add test ll_remove_baseline_0_count t_ll_remove PASS \ "Baseline list 0 element count" test ll_remove_baseline_0_first t_ll_remove PASS \ "Baseline list 0 first element" test ll_remove_baseline_0_last t_ll_remove PASS \ "Baseline list 0 last element" test ll_remove_baseline_1_count t_ll_remove PASS \ "Baseline list 1 element count" test ll_remove_baseline_1_first t_ll_remove PASS \ "Baseline list 1 first element" test ll_remove_baseline_1_last t_ll_remove PASS \ "Baseline list 1 last element" test ll_remove_noargs t_ll_remove PASS \ "Test ll_remove() with no valid arguments" test ll_remove_badlist t_ll_remove PASS \ "Test ll_remove() with bad list" test ll_remove_badelem t_ll_remove PASS \ "Test ll_remove() with bad element" test ll_remove_unused t_ll_remove PASS \ "Test ll_remove() with unused element" test ll_remove_wronglist t_ll_remove PASS \ "Test ll_remove() with wrong list" test ll_remove_l1e8 t_ll_remove PASS \ "Test removing an item from one-item list" test ll_remove_l1e8_1_count t_ll_remove PASS \ "Test removing an item from one-item list: element count" test ll_remove_l1e8_1_first t_ll_remove PASS \ "Test removing an item from one-item list: first element" test ll_remove_l1e8_1_last t_ll_remove PASS \ "Test removing an item from one-item list: last element" test ll_remove_l0e0 t_ll_remove PASS \ "Test removal of head" test ll_remove_l0e0_0_count t_ll_remove PASS \ "Test removal of head: element count" test ll_remove_l0e0_0_first t_ll_remove PASS \ "Test removal of head: first element" test ll_remove_l0e0_0_last t_ll_remove PASS \ "Test removal of head: last element" test ll_remove_l0e0_0/1_next t_ll_remove PASS \ "Test removal of head: upper neighbor next pointer" test ll_remove_l0e0_0/1_prev t_ll_remove PASS \ "Test removal of head: upper neighbor prev pointer" test ll_remove_l0e0_0/1_head t_ll_remove PASS \ "Test removal of head: upper neighbor head pointer" test ll_remove_l0e7 t_ll_remove PASS \ "Test removal of tail" test ll_remove_l0e7_0_count t_ll_remove PASS \ "Test removal of tail: element count" test ll_remove_l0e7_0_first t_ll_remove PASS \ "Test removal of tail: first element" test ll_remove_l0e7_0_last t_ll_remove PASS \ "Test removal of tail: last element" test ll_remove_l0e7_0/6_next t_ll_remove PASS \ "Test removal of tail: lower neighbor next pointer" test ll_remove_l0e7_0/6_prev t_ll_remove PASS \ "Test removal of tail: lower neighbor prev pointer" test ll_remove_l0e7_0/6_head t_ll_remove PASS \ "Test removal of tail: lower neighbor head pointer" test ll_remove_l0e3 t_ll_remove PASS \ "Test removal of middle" test ll_remove_l0e3_0_count t_ll_remove PASS \ "Test removal of middle: element count" test ll_remove_l0e3_0_first t_ll_remove PASS \ "Test removal of middle: first element" test ll_remove_l0e3_0_last t_ll_remove PASS \ "Test removal of middle: last element" test ll_remove_l0e3_0/2_next t_ll_remove PASS \ "Test removal of middle: lower neighbor next pointer" test ll_remove_l0e3_0/2_prev t_ll_remove PASS \ "Test removal of middle: lower neighbor prev pointer" test ll_remove_l0e3_0/2_head t_ll_remove PASS \ "Test removal of middle: lower neighbor head pointer" test ll_remove_l0e3_0/4_next t_ll_remove PASS \ "Test removal of middle: upper neighbor next pointer" test ll_remove_l0e3_0/4_prev t_ll_remove PASS \ "Test removal of middle: upper neighbor prev pointer" test ll_remove_l0e3_0/4_head t_ll_remove PASS \ "Test removal of middle: upper neighbor head pointer" program t_ll_find t_ll_find \ "Test linked list element lookup" t_ll_find: t_ll_add test ll_find_baseline_l0_count t_ll_find PASS \ "Baseline list 0 element count" test ll_find_baseline_l0_first t_ll_find PASS \ "Baseline list 0 first element" test ll_find_baseline_l0_last t_ll_find PASS \ "Baseline list 0 last element" test ll_find_baseline_l1_count t_ll_find PASS \ "Baseline list 1 element count" test ll_find_baseline_l1_first t_ll_find PASS \ "Baseline list 1 first element" test ll_find_baseline_l1_last t_ll_find PASS \ "Baseline list 1 last element" test ll_find_noargs t_ll_find PASS \ "Test ll_find() with no valid arguments" test ll_find_badlist t_ll_find PASS \ "Test ll_find() with bad list" test ll_find_badresult t_ll_find PASS \ "Test ll_find() with bad result" test ll_find_badcompare t_ll_find PASS \ "Test ll_find() with bad comparison function" test ll_find_badstart t_ll_find PASS \ "Test ll_find() with bad start element" test ll_find_badkey t_ll_find PASS \ "Test ll_find() with bad key pointer" test ll_find_wrongtable t_ll_find PASS \ "Test ll_find() with start element in wrong table" test ll_find_noentry t_ll_find PASS \ "Test ll_find() with non-existent entry" test ll_find_oneentry t_ll_find PASS \ "Search for element in one-element list" test ll_find_oneentry_result t_ll_find PASS \ "Search for element in one-element list: correct result" test ll_find_head t_ll_find PASS \ "Search for head element" test ll_find_head_result t_ll_find PASS \ "Search for head element: correct result" test ll_find_tail t_ll_find PASS \ "Search for tail element" test ll_find_tail_result t_ll_find PASS \ "Search for tail element: correct result" test ll_find_middle t_ll_find PASS \ "Search for middle element" test ll_find_middle_result t_ll_find PASS \ "Search for middle element: correct result" test ll_find_start t_ll_find PASS \ "Search for element given start" test ll_find_start_result t_ll_find PASS \ "Search for element given start: correct result" program t_ll_iter t_ll_iter \ "Test linked list element iteration" t_ll_iter: t_ll_add test ll_iter_baseline_count t_ll_iter PASS \ "Baseline list element count" test ll_iter_baseline_first t_ll_iter PASS \ "Baseline list first element" test ll_iter_baseline_last t_ll_iter PASS \ "Baseline list last element" test ll_iter_noargs t_ll_iter PASS \ "Test ll_iter() with no valid arguments" test ll_iter_badlist t_ll_iter PASS \ "Test ll_iter() with bad list" test ll_iter_badfunc t_ll_iter PASS \ "Test ll_iter() with bad iteration function" test ll_iter_funcreturn t_ll_iter PASS \ "Test that ll_iter() returns with return value of callback" test ll_iter_funchead_e0 t_ll_iter PASS \ "Test that list heads match on element 0" test ll_iter_funcelem_e0 t_ll_iter PASS \ "Test that elements match on element 0" test ll_iter_funchead_e1 t_ll_iter PASS \ "Test that list heads match on element 1" test ll_iter_funcelem_e1 t_ll_iter PASS \ "Test that elements match on element 1" test ll_iter_funchead_e2 t_ll_iter PASS \ "Test that list heads match on element 2" test ll_iter_funcelem_e2 t_ll_iter PASS \ "Test that elements match on element 2" test ll_iter_funchead_e3 t_ll_iter PASS \ "Test that list heads match on element 3" test ll_iter_funcelem_e3 t_ll_iter PASS \ "Test that elements match on element 3" test ll_iter_funchead_e4 t_ll_iter PASS \ "Test that list heads match on element 4" test ll_iter_funcelem_e4 t_ll_iter PASS \ "Test that elements match on element 4" test ll_iter_function t_ll_iter PASS \ "Test ll_iter() returns success" test ll_iter_func_count t_ll_iter PASS \ "Test ll_iter() covers all elements" program t_ll_flush t_ll_flush \ "Test linked list flushing" t_ll_flush: t_ll_add t_ll_remove test ll_flush_baseline_l0_count t_ll_flush PASS \ "Baseline list 0 element count" test ll_flush_baseline_l0_first t_ll_flush PASS \ "Baseline list 0 first element" test ll_flush_baseline_l0_last t_ll_flush PASS \ "Baseline list 0 last element" test ll_flush_baseline_l1_count t_ll_flush PASS \ "Baseline list 1 element count" test ll_flush_baseline_l1_first t_ll_flush PASS \ "Baseline list 1 first element" test ll_flush_baseline_l1_last t_ll_flush PASS \ "Baseline list 1 last element" test ll_flush_noargs t_ll_flush PASS \ "Test ll_flush() with no valid arguments" test ll_flush_badlist t_ll_flush PASS \ "Test ll_flush() with bad list" test ll_flush_nofunc t_ll_flush PASS \ "Test ll_flush() with no flush function" test ll_flush_nofunc_count t_ll_flush PASS \ "Test ll_flush() clears list: element count" test ll_flush_nofunc_first t_ll_flush PASS \ "Test ll_flush() clears list: first element" test ll_flush_nofunc_last t_ll_flush PASS \ "Test ll_flush() clears list: last element" test ll_flush_funcreturn t_ll_flush PASS \ "Test ll_flush() returns with flush function return value" test ll_flush_funcreturn_count t_ll_flush PASS \ "Test ll_flush() element removal: element count" test ll_flush_funcreturn_first t_ll_flush PASS \ "Test ll_flush() element removal: first element" test ll_flush_funcreturn_last t_ll_flush PASS \ "Test ll_flush() element removal: last element" test ll_flush_funchead_e0 t_ll_flush PASS \ "Test that list heads match on element 0" test ll_flush_funcelem_e0 t_ll_flush PASS \ "Test that elements match on element 0" test ll_flush_funchead_e1 t_ll_flush PASS \ "Test that list heads match on element 1" test ll_flush_funcelem_e1 t_ll_flush PASS \ "Test that elements match on element 1" test ll_flush_funchead_e2 t_ll_flush PASS \ "Test that list heads match on element 2" test ll_flush_funcelem_e2 t_ll_flush PASS \ "Test that elements match on element 2" test ll_flush_funchead_e3 t_ll_flush PASS \ "Test that list heads match on element 3" test ll_flush_funcelem_e3 t_ll_flush PASS \ "Test that elements match on element 3" test ll_flush_funchead_e4 t_ll_flush PASS \ "Test that list heads match on element 4" test ll_flush_funcelem_e4 t_ll_flush PASS \ "Test that elements match on element 4" test ll_flush_function t_ll_flush PASS \ "Test ll_flush returns success" test ll_flush_function_count t_ll_flush PASS \ "Test ll_flush() element removal: element count" test ll_flush_function_first t_ll_flush PASS \ "Test ll_flush() element removal: first element" test ll_flush_function_last t_ll_flush PASS \ "Test ll_flush() element removal: last element" test ll_flush_func_count t_ll_flush PASS \ "Test ll_flush() covers all elements" program t_ht_init t_ht_init \ "Test hash table initialization" t_ht_init: t_ll_init test ht_static_magic t_ht_init PASS \ "Test static initialization: magic number" test ht_static_flags t_ht_init PASS \ "Test static initialization: flags" test ht_static_modulus t_ht_init PASS \ "Test static initialization: modulus" test ht_static_count t_ht_init PASS \ "Test static initialization: count" test ht_static_rollover t_ht_init PASS \ "Test static initialization: rollover" test ht_static_rollunder t_ht_init PASS \ "Test static initialization: rollunder" test ht_static_func t_ht_init PASS \ "Test static initialization: hash function" test ht_static_comp t_ht_init PASS \ "Test static initialization: comparison function" test ht_static_rsize t_ht_init PASS \ "Test static initialization: resize callback" test ht_static_extra t_ht_init PASS \ "Test static initialization: extra data" test ht_static_table t_ht_init PASS \ "Test static initialization: table" test ht_init_noargs t_ht_init PASS \ "Test ht_init() with no valid arguments" test ht_init_notable t_ht_init PASS \ "Test ht_init() with no table" test ht_init_nofunc t_ht_init PASS \ "Test ht_init() with no hash function" test ht_init_nocomp t_ht_init PASS \ "Test ht_init() with no comparison function" test ht_dynamic_nomod t_ht_init PASS \ "Test dynamic initialization (no modulus)" test ht_dynamic_nomod_magic t_ht_init PASS \ "Test dynamic initialization (no modulus): magic number" test ht_dynamic_nomod_flags t_ht_init PASS \ "Test dynamic initialization (no modulus): flags" test ht_dynamic_nomod_modulus t_ht_init PASS \ "Test dynamic initialization (no modulus): modulus" test ht_dynamic_nomod_count t_ht_init PASS \ "Test dynamic initialization (no modulus): count" test ht_dynamic_nomod_rollover t_ht_init PASS \ "Test dynamic initialization (no modulus): rollover" test ht_dynamic_nomod_rollunder t_ht_init PASS \ "Test dynamic initialization (no modulus): rollunder" test ht_dynamic_nomod_func t_ht_init PASS \ "Test dynamic initialization (no modulus): hash function" test ht_dynamic_nomod_comp t_ht_init PASS \ "Test dynamic initialization (no modulus): comparison function" test ht_dynamic_nomod_rsize t_ht_init PASS \ "Test dynamic initialization (no modulus): resize callback" test ht_dynamic_nomod_extra t_ht_init PASS \ "Test dynamic initialization (no modulus): extra data" test ht_dynamic_nomod_table t_ht_init PASS \ "Test dynamic initialization (no modulus): table" test ht_dynamic_mod6 t_ht_init PASS \ "Test dynamic initialization (modulus 6, round 7)" test ht_dynamic_mod6_magic t_ht_init PASS \ "Test dynamic initialization (modulus 6, round 7): magic number" test ht_dynamic_mod6_flags t_ht_init PASS \ "Test dynamic initialization (modulus 6, round 7): flags" test ht_dynamic_mod6_modulus t_ht_init PASS \ "Test dynamic initialization (modulus 6, round 7): modulus" test ht_dynamic_mod6_count t_ht_init PASS \ "Test dynamic initialization (modulus 6, round 7): count" test ht_dynamic_mod6_rollover t_ht_init PASS \ "Test dynamic initialization (modulus 6, round 7): rollover" test ht_dynamic_mod6_rollunder t_ht_init PASS \ "Test dynamic initialization (modulus 6, round 7): rollunder" test ht_dynamic_mod6_func t_ht_init PASS \ "Test dynamic initialization (modulus 6, round 7): hash function" test ht_dynamic_mod6_comp t_ht_init PASS \ "Test dynamic initialization (modulus 6, round 7): comparison function" test ht_dynamic_mod6_rsize t_ht_init PASS \ "Test dynamic initialization (modulus 6, round 7): resize callback" test ht_dynamic_mod6_extra t_ht_init PASS \ "Test dynamic initialization (modulus 6, round 7): extra data" test ht_dynamic_mod6_table t_ht_init PASS \ "Test dynamic initialization (modulus 6, round 7): table" test ht_dynamic_mod6_bucket0 t_ht_init PASS \ "Test dynamic initialization (modulus 6, round 7): bucket 0" test ht_dynamic_mod6_bucket1 t_ht_init PASS \ "Test dynamic initialization (modulus 6, round 7): bucket 1" test ht_dynamic_mod6_bucket2 t_ht_init PASS \ "Test dynamic initialization (modulus 6, round 7): bucket 2" test ht_dynamic_mod6_bucket3 t_ht_init PASS \ "Test dynamic initialization (modulus 6, round 7): bucket 3" test ht_dynamic_mod6_bucket4 t_ht_init PASS \ "Test dynamic initialization (modulus 6, round 7): bucket 4" test ht_dynamic_mod6_bucket5 t_ht_init PASS \ "Test dynamic initialization (modulus 6, round 7): bucket 5" test ht_dynamic_mod6_bucket6 t_ht_init PASS \ "Test dynamic initialization (modulus 6, round 7): bucket 6" program t_he_init t_he_init \ "Test hash table entry initialization" t_he_init: t_le_init test he_static_magic t_he_init PASS \ "Test static initialization: magic number" test he_static_elem t_he_init PASS \ "Test static initialization: linked list element" test he_static_table t_he_init PASS \ "Test static initialization: hash table pointer" test he_static_hash t_he_init PASS \ "Test static initialization: hash value" test he_static_key t_he_init PASS \ "Test static initialization: hash key" test he_static_keylen t_he_init PASS \ "Test static initialization: hash key length" test he_static_value t_he_init PASS \ "Test static initialization: value" test he_init_noargs t_he_init PASS \ "Test he_init() with no valid arguments" test he_dynamic t_he_init PASS \ "Test dynamic initialization" test he_dynamic_magic t_he_init PASS \ "Test dynamic initialization: magic number" test he_dynamic_elem t_he_init PASS \ "Test dynamic initialization: linked list element" test he_dynamic_table t_he_init PASS \ "Test dynamic initialization: hash table pointer" test he_dynamic_hash t_he_init PASS \ "Test dynamic initialization: hash value" test he_dynamic_key t_he_init PASS \ "Test dynamic initialization: hash key" test he_dynamic_keylen t_he_init PASS \ "Test dynamic initialization: hash key length" test he_dynamic_value t_he_init PASS \ "Test dynamic initialization: value" # ht_add() and ht_find() are so intricately intertwined that they need # to be tested simultaneously. program t_ht_addfind t_ht_addfind \ "Test hash table entry add and find" t_ht_addfind: t_ht_init t_ll_add test ht_find_noargs t_ht_addfind PASS \ "Test ht_find() with no valid arguments" test ht_find_badtable t_ht_addfind PASS \ "Test ht_find() with bad table" test ht_find_badkey t_ht_addfind PASS \ "Test ht_find() with bad key" test ht_find_emptytable t_ht_addfind PASS \ "Test ht_find() on an empty table" test ht_add_noargs t_ht_addfind PASS \ "Test ht_add() with no valid arguments" test ht_add_badtable t_ht_addfind PASS \ "Test ht_add() with bad table" test ht_add_badentry t_ht_addfind PASS \ "Test ht_add() with bad entry" test ht_add_nokey t_ht_addfind PASS \ "Test ht_add() with bad key" test ht_add_frozen t_ht_addfind PASS \ "Test that ht_add() refuses to add entries to a frozen table" test ht_add_t1e5 t_ht_addfind PASS \ "Add element 5 to hash table 1" test ht_add_busy t_ht_addfind PASS \ "Test that ht_add() refuses to add busy entries to a table" test ht_find_t1e5 t_ht_addfind PASS \ "Test that ht_find() can find an element" test ht_find_t1e5_entry t_ht_addfind PASS \ "Test that ht_find() found the correct entry" test ht_find_t1e6 t_ht_addfind PASS \ "Test that ht_find() fails to find non-existent entry" test ht_add_duplicate t_ht_addfind PASS \ "Test that ht_add() refuses to add duplicate entries to a table" test ht_add_t0e0 t_ht_addfind PASS \ "Add element 0 to hash table 0" test ht_add_t0e1 t_ht_addfind PASS \ "Add element 1 to hash table 0" test ht_add_t0e2 t_ht_addfind PASS \ "Add element 2 to hash table 0" test ht_add_t0e3 t_ht_addfind PASS \ "Add element 3 to hash table 0" test ht_add_t0e4 t_ht_addfind PASS \ "Add element 4 to hash table 0" test ht_find_t0e2 t_ht_addfind PASS \ "Find element 2 in hash table 0" program t_ht_move t_ht_move \ "Test hash table entry rekey" t_ht_move: t_ht_init t_ht_addfind t_ll_remove t_ll_add test ht_move_noargs t_ht_move PASS \ "Test ht_move() with no valid arguments" test ht_move_badtable t_ht_move PASS \ "Test ht_move() with bad hash table" test ht_move_badentry t_ht_move PASS \ "Test ht_move() with bad hash entry" test ht_move_badkey t_ht_move PASS \ "Test ht_move() with bad database key" test ht_move_unused t_ht_move PASS \ "Test ht_move() excludes unused entries" test ht_move_wrongtable t_ht_move PASS \ "Test ht_move() excludes entries in the wrong hash table" test ht_move_frozen t_ht_move PASS \ "Test ht_move() excludes tables that are frozen" test ht_move_duplicate t_ht_move PASS \ "Test ht_move() excludes duplicate keys" test ht_move_t0e0k6 t_ht_move PASS \ "Test ht_move() successfully rekeys an entry" test ht_move_find_t0e0k0 t_ht_move PASS \ "Test that no entry is available under the old key" test ht_move_find_t0e0k6 t_ht_move PASS \ "Test that entry can be located under the new key" test ht_move_find_t0e0k6_entry t_ht_move PASS \ "Test that entry under new key is the expected entry" program t_ht_remove t_ht_remove \ "Test hash table entry removal" t_ht_remove: t_ht_init t_ht_addfind t_ll_remove test ht_remove_noargs t_ht_remove PASS \ "Test ht_remove() with no valid arguments" test ht_remove_badtable t_ht_remove PASS \ "Test ht_remove() with bad hash table" test ht_remove_badentry t_ht_remove PASS \ "Test ht_remove() with bad hash table entry" test ht_remove_unused t_ht_remove PASS \ "Test that ht_remove() excludes unused entries" test ht_remove_wrongtable t_ht_remove PASS \ "Test that ht_remove() excludes entries in the wrong hash table" test ht_remove_frozen t_ht_remove PASS \ "Test that ht_remove() excludes tables that are frozen" test ht_remove_t0e0 t_ht_remove PASS \ "Test that ht_remove() removes entry 0 from table 0" test ht_remove_find_t0e0 t_ht_remove PASS \ "Test that ht_remove() actually did remove the entry from the table" test ht_remove_t0e0_table t_ht_remove PASS \ "Test that ht_remove() resets the entry's hash table pointer" test ht_remove_t0e0_count t_ht_remove PASS \ "Test that ht_remove() updates table count" program t_ht_free t_ht_free \ "Test hash table bucket free" t_ht_free: t_ht_init t_ht_addfind test ht_free_noargs t_ht_free PASS \ "Test ht_free() with no valid arguments" test ht_free_badtable t_ht_free PASS \ "Test ht_free() with bad hash table" test ht_free_frozen t_ht_free PASS \ "Test that ht_free() excludes hash tables that are frozen" test ht_free_nonempty t_ht_free PASS \ "Test that ht_free() excludes hash tables that are not empty" test ht_free_t0 t_ht_free PASS \ "Free an empty table" test ht_free_t0_table t_ht_free PASS \ "Verify that bucket pointer was cleared" program t_ht_iter t_ht_iter \ "Test hash table entry iteration" t_ht_iter: t_ht_init t_ht_addfind test ht_iter_noargs t_ht_iter PASS \ "Test ht_iter() with no valid arguments" test ht_iter_badtable t_ht_iter PASS \ "Test ht_iter() with bad hash table" test ht_iter_baditer t_ht_iter PASS \ "Test ht_iter() with bad iteration function" test ht_iter_frozen t_ht_iter PASS \ "Test that ht_iter() excludes hash tables that are frozen" test ht_iter_funcreturn t_ht_iter PASS \ "Test that ht_iter() returns iteration function return value" test ht_iter_functab_e0 t_ht_iter PASS \ "Test that hash tables match while iterating over entry 0" test ht_iter_funcent_e0 t_ht_iter PASS \ "Test that hash table entries match while iterating over entry 0" test ht_iter_functab_e1 t_ht_iter PASS \ "Test that hash tables match while iterating over entry 1" test ht_iter_funcent_e1 t_ht_iter PASS \ "Test that hash table entries match while iterating over entry 1" test ht_iter_functab_e2 t_ht_iter PASS \ "Test that hash tables match while iterating over entry 2" test ht_iter_funcent_e2 t_ht_iter PASS \ "Test that hash table entries match while iterating over entry 2" test ht_iter_functab_e3 t_ht_iter PASS \ "Test that hash tables match while iterating over entry 3" test ht_iter_funcent_e3 t_ht_iter PASS \ "Test that hash table entries match while iterating over entry 3" test ht_iter_functab_e4 t_ht_iter PASS \ "Test that hash tables match while iterating over entry 4" test ht_iter_funcent_e4 t_ht_iter PASS \ "Test that hash table entries match while iterating over entry 4" test ht_iter_functab_e5 t_ht_iter PASS \ "Test that hash tables match while iterating over entry 5" test ht_iter_funcent_e5 t_ht_iter PASS \ "Test that hash table entries match while iterating over entry 5" test ht_iter_functab_e6 t_ht_iter PASS \ "Test that hash tables match while iterating over entry 6" test ht_iter_funcent_e6 t_ht_iter PASS \ "Test that hash table entries match while iterating over entry 6" test ht_iter_functab_e7 t_ht_iter PASS \ "Test that hash tables match while iterating over entry 7" test ht_iter_funcent_e7 t_ht_iter PASS \ "Test that hash table entries match while iterating over entry 7" test ht_iter_function t_ht_iter PASS \ "Test that ht_iter() iterates over hash table" test ht_iter_func_mask t_ht_iter PASS \ "Test that ht_iter() visited all entries in the hash table" program t_ht_flush t_ht_flush \ "Test hash table entry flush" t_ht_flush: t_ht_init t_ht_addfind t_ht_remove test ht_flush_noargs t_ht_flush PASS \ "Test ht_flush() with no valid arguments" test ht_flush_badtable t_ht_flush PASS \ "Test ht_flush() with bad hash table" test ht_flush_frozen t_ht_flush PASS \ "Test that ht_flush() excludes hash tables that are frozen" test ht_flush_nofunc t_ht_flush PASS \ "Test that ht_flush() with no flush function performs correctly" test ht_flush_nofunc_count t_ht_flush PASS \ "Test that ht_flush() removes all items from the table" test ht_flush_functab_e0 t_ht_flush PASS \ "Test that hash tables match while flushing entry 0" test ht_flush_funcent_e0 t_ht_flush PASS \ "Test that hash table entries match while flushing entry 0" test ht_flush_functab_e1 t_ht_flush PASS \ "Test that hash tables match while flushing entry 1" test ht_flush_funcent_e1 t_ht_flush PASS \ "Test that hash table entries match while flushing entry 1" test ht_flush_functab_e2 t_ht_flush PASS \ "Test that hash tables match while flushing entry 2" test ht_flush_funcent_e2 t_ht_flush PASS \ "Test that hash table entries match while flushing entry 2" test ht_flush_functab_e3 t_ht_flush PASS \ "Test that hash tables match while flushing entry 3" test ht_flush_funcent_e3 t_ht_flush PASS \ "Test that hash table entries match while flushing entry 3" test ht_flush_funcreturn t_ht_flush PASS \ "Test that ht_flush() returns flush function return value" test ht_flush_funcreturn_count t_ht_flush PASS \ "Test that ht_flush() removed appropriate entry" test ht_flush_function t_ht_flush PASS \ "Test that ht_flush() flushes tables with a flush function" test ht_flush_function_count t_ht_flush PASS \ "Test that ht_flush() removes all entries when called with function" test ht_flush_func_mask t_ht_flush PASS \ "Test that ht_flush() visited all entries in the hash table" program t_ht_resize t_ht_resize \ "Test hash table resizing" t_ht_resize: t_ht_init t_ht_addfind t_ht_iter t_ht_remove t_ll_init \ t_ll_remove t_ll_add test ht_resize_noargs t_ht_resize PASS \ "Test ht_resize() with no valid arguments" test ht_resize_badtable t_ht_resize PASS \ "Test ht_resize() with bad hash table" test ht_resize_frozen t_ht_resize PASS \ "Test that ht_resize() excludes hash tables that are frozen" test ht_resize_current t_ht_resize PASS \ "Test that ht_resize() to current count works" test ht_resize_current_mod t_ht_resize PASS \ "Test that ht_resize() to current count set proper modulus" test ht_resize_shrink t_ht_resize PASS \ "Test that ht_resize() to shrink works" test ht_resize_shrink_mod t_ht_resize PASS \ "Test that ht_resize() to shrink set proper modulus" test ht_resize_grow t_ht_resize PASS \ "Test that ht_resize() to grow works" test ht_resize_grow_mod t_ht_resize PASS \ "Test that ht_resize() to grow set proper modulus" test ht_resize_functab_e0 t_ht_resize PASS \ "Test that entry 0 has the proper hash table pointer" test ht_resize_funcent_e0 t_ht_resize PASS \ "Test that entry 0 is the correct entry" test ht_resize_functab_e1 t_ht_resize PASS \ "Test that entry 1 has the proper hash table pointer" test ht_resize_funcent_e1 t_ht_resize PASS \ "Test that entry 1 is the correct entry" test ht_resize_functab_e2 t_ht_resize PASS \ "Test that entry 2 has the proper hash table pointer" test ht_resize_funcent_e2 t_ht_resize PASS \ "Test that entry 2 is the correct entry" test ht_resize_functab_e3 t_ht_resize PASS \ "Test that entry 3 has the proper hash table pointer" test ht_resize_funcent_e3 t_ht_resize PASS \ "Test that entry 3 is the correct entry" test ht_resize_functab_e4 t_ht_resize PASS \ "Test that entry 4 has the proper hash table pointer" test ht_resize_funcent_e4 t_ht_resize PASS \ "Test that entry 4 is the correct entry" test ht_resize_functab_e5 t_ht_resize PASS \ "Test that entry 5 has the proper hash table pointer" test ht_resize_funcent_e5 t_ht_resize PASS \ "Test that entry 5 is the correct entry" test ht_resize_functab_e6 t_ht_resize PASS \ "Test that entry 6 has the proper hash table pointer" test ht_resize_funcent_e6 t_ht_resize PASS \ "Test that entry 6 is the correct entry" test ht_resize_functab_e7 t_ht_resize PASS \ "Test that entry 7 has the proper hash table pointer" test ht_resize_funcent_e7 t_ht_resize PASS \ "Test that entry 7 is the correct entry" test ht_resize_elemchk t_ht_resize PASS \ "Check that all entries are in the hash table by iteration" test ht_resize_funcmask t_ht_resize PASS \ "Verify that all entries were iterated over" test ht_remove_autoshrink t_ht_resize PASS \ "Test that ht_remove() performs autoshrink properly" test ht_remove_autoshrink_mod t_ht_resize PASS \ "Test that autoshrink set proper modulus" test ht_resize_callerr_mod t_ht_resize PASS \ "Test that table has not been resized prior to error callback" test ht_resize_callerr_newmod t_ht_resize PASS \ "Test that new modulus is correct in error callback" test ht_resize_callerr t_ht_resize PASS \ "Test that ht_resize() returns resize callback error" test ht_resize_callback_mod t_ht_resize PASS \ "Test that table has not been resized prior to resize callback" test ht_resize_callback_newmod t_ht_resize PASS \ "Test that new modulus is correct in error callback" test ht_resize_prep t_ht_resize PASS \ "Shrink table in preparation for autogrow test" test ht_resize_prep_mod t_ht_resize PASS \ "Verify that preparation set proper modulus" test ht_add_autogrow t_ht_resize PASS \ "Test that ht_add() performs autogrow properly" test ht_add_autogrow_mod t_ht_resize PASS \ "Test that autogrow set proper modulus" program t_st_init t_st_init \ "Test sparse matrix table initialization" t_st_init: t_ht_init test st_static_magic t_st_init PASS \ "Test static initialization: magic number" test st_static_htinit t_st_init PASS \ "Test static initialization: hash table init" test st_static_hflags t_st_init PASS \ "Test static initialization: flags" test st_static_hmodulus t_st_init PASS \ "Test static initialization: modulus" test st_static_hfunc t_st_init PASS \ "Test static initialization: hash function" test st_static_hcomp t_st_init PASS \ "Test static initialization: hash comparison function" test st_static_hrsize t_st_init PASS \ "Test static initialization: hash resize callback" test st_static_rsize t_st_init PASS \ "Test static initialization: resize callback" test st_static_hextra t_st_init PASS \ "Test static initialization: extra data" test st_init_noargs t_st_init PASS \ "Test st_init() with no valid arguments" test st_dynamic_nomod t_st_init PASS \ "Test dynamic initialization (no modulus)" test st_dynamic_nomod_magic t_st_init PASS \ "Test dynamic initialization (no modulus): magic number" test st_dynamic_nomod_htinit t_st_init PASS \ "Test dynamic initialization (no modulus): hash table init" test st_dynamic_nomod_hflags t_st_init PASS \ "Test dynamic initialization (no modulus): flags" test st_dynamic_nomod_hmodulus t_st_init PASS \ "Test dynamic initialization (no modulus): modulus" test st_dynamic_nomod_hfunc t_st_init PASS \ "Test dynamic initialization (no modulus): hash function" test st_dynamic_nomod_hcomp t_st_init PASS \ "Test dynamic initialization (no modulus): hash comparison function" test st_dynamic_nomod_hrsize t_st_init PASS \ "Test dynamic initialization (no modulus): hash resize callback" test st_dynamic_nomod_rsize t_st_init PASS \ "Test dynamic initialization (no modulus): resize callback" test st_dynamic_nomod_hextra t_st_init PASS \ "Test dynamic initialization (no modulus): extra data" test st_dynamic_mod6 t_st_init PASS \ "Test dynamic initialization (modulus 6, round 7)" test st_dynamic_mod6_magic t_st_init PASS \ "Test dynamic initialization (modulus 6, round 7): magic number" test st_dynamic_mod6_htinit t_st_init PASS \ "Test dynamic initialization (modulus 6, round 7): hash table init" test st_dynamic_mod6_hflags t_st_init PASS \ "Test dynamic initialization (modulus 6, round 7): flags" test st_dynamic_mod6_hmodulus t_st_init PASS \ "Test dynamic initialization (modulus 6, round 7): modulus" test st_dynamic_mod6_hfunc t_st_init PASS \ "Test dynamic initialization (modulus 6, round 7): hash function" test st_dynamic_mod6_hcomp t_st_init PASS \ "Test dynamic initialization (modulus 6, round 7): hash comparison function" test st_dynamic_mod6_hrsize t_st_init PASS \ "Test dynamic initialization (modulus 6, round 7): hash resize callback" test st_dynamic_mod6_rsize t_st_init PASS \ "Test dynamic initialization (modulus 6, round 7): resize callback" test st_dynamic_mod6_hextra t_st_init PASS \ "Test dynamic initialization (modulus 6, round 7): extra data"