1 /* Martin Asser Hansen (mail@maasha.dk) Copyright (C) 2008 - All right reserved */
8 static void test_list_sl_new();
9 static void test_node_sl_new();
10 static void test_list_sl_add_beg();
11 static void test_list_sl_add_after();
12 static void test_list_sl_remove_beg();
13 static void test_list_sl_remove_after();
14 static void test_list_sl_print();
15 static void test_list_sl_sort();
16 static void test_list_sl_destroy();
18 static void test_list_dl_new();
19 static void test_node_dl_new();
20 static void test_list_dl_add_beg();
21 static void test_list_dl_add_end();
22 static void test_list_dl_add_before();
23 static void test_list_dl_add_after();
24 static void test_list_dl_remove();
25 static void test_list_dl_print();
26 static void test_list_dl_destroy();
28 static void test_list_count();
33 fprintf( stderr, "Running all tests for list.c\n" );
37 test_list_sl_add_beg();
38 test_list_sl_add_after();
39 test_list_sl_remove_beg();
40 test_list_sl_remove_after();
43 test_list_sl_destroy();
47 test_list_dl_add_beg();
48 test_list_dl_add_end();
49 test_list_dl_add_before();
50 test_list_dl_add_after();
51 test_list_dl_remove();
53 test_list_dl_destroy();
57 fprintf( stderr, "Done\n\n" );
63 /* >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> SINGLY LINKED LIST <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< */
66 void test_list_sl_new()
68 fprintf( stderr, " Testing list_sl_new ... " );
74 assert( list != NULL );
75 assert( list->first == NULL );
77 fprintf( stderr, "OK\n" );
81 void test_node_sl_new()
83 fprintf( stderr, " Testing node_sl_new ... " );
89 assert( node != NULL );
90 assert( node->next == NULL );
91 assert( node->val == NULL );
93 fprintf( stderr, "OK\n" );
97 void test_list_sl_add_beg()
99 fprintf( stderr, " Testing list_sl_add_beg ... " );
101 char *array[3] = { "test1", "test2", "test3" };
102 list_sl *list = NULL;
103 node_sl *node = NULL;
106 list = list_sl_new();
108 for ( i = 0; i < 3; i++ )
110 node = node_sl_new();
112 node->val = array[ i ];
114 list_sl_add_beg( &list, &node );
119 for ( node = list->first; node != NULL; node = node->next )
121 assert( strcmp( array[ i ], ( char * ) node->val ) == 0 );
126 fprintf( stderr, "OK\n" );
130 void test_list_sl_add_after()
132 fprintf( stderr, " Testing list_sl_add_after ... " );
134 char *array[3] = { "test1", "test2", "test3" };
135 list_sl *list = NULL;
136 node_sl *node = NULL;
137 node_sl *new_node = NULL;
140 list = list_sl_new();
141 new_node = node_sl_new();
143 new_node->val = array[ 0 ];
145 list_sl_add_beg( &list, &new_node );
149 for ( i = 1; i < 3; i++ )
151 new_node = node_sl_new();
153 new_node->val = array[ i ];
155 list_sl_add_after( &node, &new_node );
162 for ( node = list->first; node != NULL; node = node->next )
164 assert( strcmp( array[ i ], ( char * ) node->val ) == 0 );
169 fprintf( stderr, "OK\n" );
173 void test_list_sl_remove_beg()
175 fprintf( stderr, " Testing list_sl_remove_beg ... " );
177 char *array[3] = { "test1", "test2", "test3" };
178 list_sl *list = NULL;
179 node_sl *node = NULL;
180 node_sl *new_node = NULL;
183 list = list_sl_new();
184 new_node = node_sl_new();
186 new_node->val = array[ 0 ];
188 list_sl_add_beg( &list, &new_node );
192 for ( i = 1; i < 3; i++ )
194 new_node = node_sl_new();
196 new_node->val = array[ i ];
198 list_sl_add_after( &node, &new_node );
207 while ( node != NULL )
209 assert( strcmp( ( char * ) node->val, array[ i ] ) == 0 );
211 list_sl_remove_beg( &list );
218 fprintf( stderr, "OK\n" );
222 void test_list_sl_remove_after()
224 fprintf( stderr, " Testing list_sl_remove_after ... " );
226 char *array[3] = { "test1", "test2", "test3" };
227 list_sl *list = NULL;
228 node_sl *node = NULL;
229 node_sl *new_node = NULL;
232 list = list_sl_new();
233 new_node = node_sl_new();
235 new_node->val = array[ 0 ];
237 list_sl_add_beg( &list, &new_node );
241 for ( i = 1; i < 3; i++ )
243 new_node = node_sl_new();
245 new_node->val = array[ i ];
247 list_sl_add_after( &node, &new_node );
252 assert( strcmp( ( char * ) list->first->next->val, "test2" ) == 0 );
254 list_sl_remove_after( &list->first );
256 assert( strcmp( ( char * ) list->first->next->val, "test3" ) == 0 );
258 fprintf( stderr, "OK\n" );
262 void test_list_sl_print()
264 fprintf( stderr, " Testing list_sl_print ... " );
266 list_sl *list = NULL;
267 node_sl *node1 = NULL;
268 node_sl *node2 = NULL;
269 node_sl *node3 = NULL;
271 list = list_sl_new();
273 node1 = node_sl_new();
274 node2 = node_sl_new();
275 node3 = node_sl_new();
277 node1->val = "TEST1";
278 node2->val = "TEST2";
279 node3->val = "TEST3";
281 list_sl_add_beg( &list, &node1 );
282 list_sl_add_beg( &list, &node2 );
283 list_sl_add_beg( &list, &node3 );
285 // list_sl_print( list );
287 fprintf( stderr, "OK\n" );
291 void test_list_sl_sort()
293 fprintf( stderr, " Testing list_sl_sort ... " );
295 /* Sorting a char list */
297 char *array[3] = { "test1", "test2", "test3" };
298 list_sl *list = NULL;
299 node_sl *node = NULL;
302 list = list_sl_new();
304 for ( i = 0; i < 3; i++ )
306 node = node_sl_new();
308 node->val = array[ i ];
310 list_sl_add_beg( &list, &node );
313 list_sl_sort( &list, cmp_list_sl_char_asc );
314 list_sl_sort( &list, cmp_list_sl_char_desc );
316 // /* Sorting a int list */
318 // int int_array[ 5 ] = { 345, 23, 23, 1, 400 };
319 // list_sl *int_list = NULL;
320 // node_sl *int_node = NULL;
322 // int_list = list_sl_new();
324 // for ( i = 0; i < 5; i++ )
326 // printf( "int: %d\n", int_array[ i ] );
328 // int_node = node_sl_new();
330 // node->val = int_array[ i ];
333 fprintf( stderr, "OK\n" );
337 void test_list_sl_destroy()
339 fprintf( stderr, " Testing list_sl_destroy ... " );
341 char *array[3] = { "test1", "test2", "test3" };
342 list_sl *list = NULL;
343 node_sl *node = NULL;
346 list = list_sl_new();
348 for ( i = 0; i < 3; i++ )
350 node = node_sl_new();
352 node->val = array[ i ];
354 list_sl_add_beg( &list, &node );
357 list_sl_destroy( &list );
359 assert( list == NULL );
361 fprintf( stderr, "OK\n" );
365 /* >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> DOUBLY LINKED LIST <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< */
368 void test_list_dl_new()
370 fprintf( stderr, " Testing list_dl_new ... " );
372 list_dl *list = NULL;
374 list = list_dl_new();
376 assert( list->first == NULL );
377 assert( list->last == NULL );
379 fprintf( stderr, "OK\n" );
383 void test_node_dl_new()
385 fprintf( stderr, " Testing node_dl_new ... " );
387 node_dl *node = NULL;
389 node = node_dl_new();
391 assert( node->next == NULL );
392 assert( node->prev == NULL );
393 assert( node->val == NULL );
395 fprintf( stderr, "OK\n" );
399 void test_list_dl_add_beg()
401 fprintf( stderr, " Testing list_dl_add_beg ... " );
403 list_dl *list = list_dl_new();
404 node_dl *node1 = node_dl_new();
405 node_dl *node2 = node_dl_new();
406 node_dl *node3 = node_dl_new();
408 node1->val = "TEST1";
409 node2->val = "TEST2";
410 node3->val = "TEST3";
412 list_dl_add_beg( &list, &node1 );
414 assert( strcmp( list->first->val, "TEST1" ) == 0 );
416 list_dl_add_beg( &list, &node2 );
418 assert( strcmp( list->first->val, "TEST2" ) == 0 );
420 list_dl_add_beg( &list, &node3 );
422 assert( strcmp( list->first->val, "TEST3" ) == 0 );
424 fprintf( stderr, "OK\n" );
428 void test_list_dl_add_end()
430 fprintf( stderr, " Testing list_dl_add_end ... " );
432 list_dl *list = list_dl_new();
433 node_dl *node1 = node_dl_new();
434 node_dl *node2 = node_dl_new();
435 node_dl *node3 = node_dl_new();
437 node1->val = "TEST1";
438 node2->val = "TEST2";
439 node3->val = "TEST3";
441 list_dl_add_end( &list, &node1 );
443 assert( strcmp( list->last->val, "TEST1" ) == 0 );
445 list_dl_add_end( &list, &node2 );
447 assert( strcmp( list->last->val, "TEST2" ) == 0 );
449 list_dl_add_end( &list, &node3 );
451 assert( strcmp( list->last->val, "TEST3" ) == 0 );
453 fprintf( stderr, "OK\n" );
457 void test_list_dl_add_before()
459 fprintf( stderr, " Testing list_dl_add_before ... " );
461 list_dl *list = list_dl_new();
462 node_dl *node1 = node_dl_new();
463 node_dl *node2 = node_dl_new();
464 node_dl *node3 = node_dl_new();
466 node1->val = "TEST1";
467 node2->val = "TEST2";
468 node3->val = "TEST3";
470 list_dl_add_beg( &list, &node1 );
472 assert( strcmp( list->first->val, "TEST1" ) == 0 );
474 list_dl_add_before( &list, &node1, &node2 );
476 assert( strcmp( list->first->val, "TEST2" ) == 0 );
478 list_dl_add_before( &list, &node1, &node3 );
480 assert( strcmp( list->first->val, "TEST2" ) == 0 );
482 list_dl_add_before( &list, &node2, &node3 );
484 assert( strcmp( list->first->val, "TEST3" ) == 0 );
486 fprintf( stderr, "OK\n" );
490 void test_list_dl_add_after()
492 fprintf( stderr, " Testing list_dl_add_after ... " );
494 list_dl *list = list_dl_new();
495 node_dl *node1 = node_dl_new();
496 node_dl *node2 = node_dl_new();
497 node_dl *node3 = node_dl_new();
499 node1->val = "TEST1";
500 node2->val = "TEST2";
501 node3->val = "TEST3";
503 list_dl_add_beg( &list, &node1 );
505 assert( strcmp( list->first->val, "TEST1" ) == 0 );
507 list_dl_add_after( &list, &node1, &node2 );
509 assert( strcmp( list->last->val, "TEST2" ) == 0 );
511 list_dl_add_after( &list, &node1, &node3 );
513 assert( strcmp( list->last->val, "TEST2" ) == 0 );
515 list_dl_add_after( &list, &node2, &node3 );
517 assert( strcmp( list->last->val, "TEST3" ) == 0 );
519 fprintf( stderr, "OK\n" );
523 void test_list_dl_remove()
525 fprintf( stderr, " Testing list_dl_remove ... " );
527 list_dl *list = list_dl_new();
528 node_dl *node1 = node_dl_new();
529 node_dl *node2 = node_dl_new();
530 node_dl *node3 = node_dl_new();
532 node1->val = "TEST1";
533 node2->val = "TEST2";
534 node3->val = "TEST3";
536 list_dl_add_beg( &list, &node1 );
538 list_dl_add_after( &list, &node1, &node2 );
539 list_dl_add_after( &list, &node2, &node3 );
541 list_dl_remove( &list, &node3 );
542 assert( strcmp( list->last->val, "TEST2" ) == 0 );
544 list_dl_remove( &list, &node2 );
545 assert( strcmp( list->last->val, "TEST1" ) == 0 );
547 list_dl_remove( &list, &node1 );
549 assert( list->first == NULL );
550 assert( list->last == NULL );
552 fprintf( stderr, "OK\n" );
556 void test_list_dl_print()
558 fprintf( stderr, " Testing list_dl_print ... " );
560 list_dl *list = list_dl_new();
561 node_dl *node1 = node_dl_new();
562 node_dl *node2 = node_dl_new();
563 node_dl *node3 = node_dl_new();
565 node1->val = "TEST1";
566 node2->val = "TEST2";
567 node3->val = "TEST3";
569 list_dl_add_beg( &list, &node1 );
570 list_dl_add_beg( &list, &node2 );
571 list_dl_add_beg( &list, &node3 );
573 // list_dl_print( list );
575 fprintf( stderr, "OK\n" );
579 void test_list_dl_destroy()
581 fprintf( stderr, " Testing list_dl_destroy ... " );
583 list_dl *list = list_dl_new();
584 node_dl *node1 = node_dl_new();
585 node_dl *node2 = node_dl_new();
586 node_dl *node3 = node_dl_new();
588 node1->val = "TEST1";
589 node2->val = "TEST2";
590 node3->val = "TEST3";
592 list_dl_add_beg( &list, &node1 );
593 list_dl_add_beg( &list, &node2 );
594 list_dl_add_beg( &list, &node3 );
596 // list_dl_print( list );
598 list_dl_destroy( &list );
600 assert( list == NULL );
602 fprintf( stderr, "OK\n" );
606 /* >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> GENERIC LINKED LIST <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< */
609 void test_list_count()
611 fprintf( stderr, " Testing list_count ... " );
613 /* Singly linked list. */
615 char *array[3] = { "test1", "test2", "test3" };
616 list_sl *sllist = NULL;
617 node_sl *node = NULL;
618 node_sl *new_node = NULL;
621 sllist = list_sl_new();
622 new_node = node_sl_new();
624 new_node->val = array[ 0 ];
626 list_sl_add_beg( &sllist, &new_node );
630 for ( i = 1; i < 3; i++ )
632 new_node = node_sl_new();
634 new_node->val = array[ i ];
636 list_sl_add_after( &node, &new_node );
641 assert( list_count( sllist ) == 3 );
643 /* Doubly linked list. */
645 list_dl *dllist = list_dl_new();
646 node_dl *node1 = node_dl_new();
647 node_dl *node2 = node_dl_new();
648 node_dl *node3 = node_dl_new();
650 node1->val = "TEST1";
651 node2->val = "TEST2";
652 node3->val = "TEST3";
654 list_dl_add_beg( &dllist, &node1 );
655 list_dl_add_beg( &dllist, &node2 );
656 list_dl_add_beg( &dllist, &node3 );
658 assert( list_count( dllist ) == 3 );
660 fprintf( stderr, "OK\n" );
664 /* >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>><<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< */