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();
17 static void test_node_sl_destroy();
19 static void test_list_dl_new();
20 static void test_node_dl_new();
21 static void test_list_dl_add_beg();
22 static void test_list_dl_add_end();
23 static void test_list_dl_add_before();
24 static void test_list_dl_add_after();
25 static void test_list_dl_remove();
26 static void test_list_dl_print();
27 static void test_list_dl_destroy();
28 static void test_node_dl_destroy();
30 static void test_list_count();
35 fprintf( stderr, "Running all tests for list.c\n" );
39 test_list_sl_add_beg();
40 test_list_sl_add_after();
41 test_list_sl_remove_beg();
42 test_list_sl_remove_after();
45 test_list_sl_destroy();
46 test_node_sl_destroy();
50 test_list_dl_add_beg();
51 test_list_dl_add_end();
52 test_list_dl_add_before();
53 test_list_dl_add_after();
54 test_list_dl_remove();
56 test_list_dl_destroy();
57 test_node_dl_destroy();
61 fprintf( stderr, "Done\n\n" );
67 /* >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> SINGLY LINKED LIST <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< */
70 void test_list_sl_new()
72 fprintf( stderr, " Testing list_sl_new ... " );
78 assert( list != NULL );
79 assert( list->first == NULL );
81 fprintf( stderr, "OK\n" );
85 void test_node_sl_new()
87 fprintf( stderr, " Testing node_sl_new ... " );
93 assert( node != NULL );
94 assert( node->next == NULL );
95 assert( node->val == NULL );
97 fprintf( stderr, "OK\n" );
101 void test_list_sl_add_beg()
103 fprintf( stderr, " Testing list_sl_add_beg ... " );
105 char *array[3] = { "test1", "test2", "test3" };
106 list_sl *list = NULL;
107 node_sl *node = NULL;
110 list = list_sl_new();
112 for ( i = 0; i < 3; i++ )
114 node = node_sl_new();
116 node->val = array[ i ];
118 list_sl_add_beg( &list, &node );
123 for ( node = list->first; node != NULL; node = node->next )
125 assert( strcmp( array[ i ], ( char * ) node->val ) == 0 );
130 fprintf( stderr, "OK\n" );
134 void test_list_sl_add_after()
136 fprintf( stderr, " Testing list_sl_add_after ... " );
138 char *array[3] = { "test1", "test2", "test3" };
139 list_sl *list = NULL;
140 node_sl *node = NULL;
141 node_sl *new_node = NULL;
144 list = list_sl_new();
145 new_node = node_sl_new();
147 new_node->val = array[ 0 ];
149 list_sl_add_beg( &list, &new_node );
153 for ( i = 1; i < 3; i++ )
155 new_node = node_sl_new();
157 new_node->val = array[ i ];
159 list_sl_add_after( &node, &new_node );
166 for ( node = list->first; node != NULL; node = node->next )
168 assert( strcmp( array[ i ], ( char * ) node->val ) == 0 );
173 fprintf( stderr, "OK\n" );
177 void test_list_sl_remove_beg()
179 fprintf( stderr, " Testing list_sl_remove_beg ... " );
181 char *array[3] = { "test1", "test2", "test3" };
182 list_sl *list = NULL;
183 node_sl *node = NULL;
184 node_sl *new_node = NULL;
187 list = list_sl_new();
188 new_node = node_sl_new();
190 new_node->val = array[ 0 ];
192 list_sl_add_beg( &list, &new_node );
196 for ( i = 1; i < 3; i++ )
198 new_node = node_sl_new();
200 new_node->val = array[ i ];
202 list_sl_add_after( &node, &new_node );
211 while ( node != NULL )
213 assert( strcmp( ( char * ) node->val, array[ i ] ) == 0 );
215 list_sl_remove_beg( &list );
222 fprintf( stderr, "OK\n" );
226 void test_list_sl_remove_after()
228 fprintf( stderr, " Testing list_sl_remove_after ... " );
230 char *array[3] = { "test1", "test2", "test3" };
231 list_sl *list = NULL;
232 node_sl *node = NULL;
233 node_sl *new_node = NULL;
236 list = list_sl_new();
237 new_node = node_sl_new();
239 new_node->val = array[ 0 ];
241 list_sl_add_beg( &list, &new_node );
245 for ( i = 1; i < 3; i++ )
247 new_node = node_sl_new();
249 new_node->val = array[ i ];
251 list_sl_add_after( &node, &new_node );
256 assert( strcmp( ( char * ) list->first->next->val, "test2" ) == 0 );
258 list_sl_remove_after( &list->first );
260 assert( strcmp( ( char * ) list->first->next->val, "test3" ) == 0 );
262 fprintf( stderr, "OK\n" );
266 void test_list_sl_print()
268 fprintf( stderr, " Testing list_sl_print ... " );
270 list_sl *list = NULL;
271 node_sl *node1 = NULL;
272 node_sl *node2 = NULL;
273 node_sl *node3 = NULL;
275 list = list_sl_new();
277 node1 = node_sl_new();
278 node2 = node_sl_new();
279 node3 = node_sl_new();
281 node1->val = "TEST1";
282 node2->val = "TEST2";
283 node3->val = "TEST3";
285 list_sl_add_beg( &list, &node1 );
286 list_sl_add_beg( &list, &node2 );
287 list_sl_add_beg( &list, &node3 );
289 // list_sl_print( list );
291 fprintf( stderr, "OK\n" );
295 void test_list_sl_sort()
297 fprintf( stderr, " Testing list_sl_sort ... " );
299 /* Sorting a char list */
301 char *array[3] = { "test1", "test2", "test3" };
302 list_sl *list = NULL;
303 node_sl *node = NULL;
306 list = list_sl_new();
308 for ( i = 0; i < 3; i++ )
310 node = node_sl_new();
312 node->val = array[ i ];
314 list_sl_add_beg( &list, &node );
317 list_sl_sort( &list, cmp_list_sl_char_asc );
318 list_sl_sort( &list, cmp_list_sl_char_desc );
320 // /* Sorting a int list */
322 // int int_array[ 5 ] = { 345, 23, 23, 1, 400 };
323 // list_sl *int_list = NULL;
324 // node_sl *int_node = NULL;
326 // int_list = list_sl_new();
328 // for ( i = 0; i < 5; i++ )
330 // printf( "int: %d\n", int_array[ i ] );
332 // int_node = node_sl_new();
334 // node->val = int_array[ i ];
337 fprintf( stderr, "OK\n" );
341 void test_list_sl_destroy()
343 fprintf( stderr, " Testing list_sl_destroy ... " );
345 list_sl *list = list_sl_new();
346 node_sl *node1 = node_sl_new();
347 node_sl *node2 = node_sl_new();
348 node_sl *node3 = node_sl_new();
350 node1->val = mem_get( 10 );
351 node2->val = mem_get( 10 );
352 node3->val = mem_get( 10 );
354 list_sl_add_beg( &list, &node1 );
355 list_sl_add_beg( &list, &node2 );
356 list_sl_add_beg( &list, &node3 );
358 list_sl_destroy( &list );
360 assert( list == NULL );
362 fprintf( stderr, "OK\n" );
366 void test_node_sl_destroy()
368 fprintf( stderr, " Testing node_sl_destroy ... " );
370 node_sl *node = NULL;
373 str = mem_get( 1000000000 );
375 node = node_sl_new();
379 node_sl_destroy( &node );
381 assert( node == NULL );
383 fprintf( stderr, "OK\n" );
387 /* >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> DOUBLY LINKED LIST <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< */
390 void test_list_dl_new()
392 fprintf( stderr, " Testing list_dl_new ... " );
394 list_dl *list = NULL;
396 list = list_dl_new();
398 assert( list->first == NULL );
399 assert( list->last == NULL );
401 fprintf( stderr, "OK\n" );
405 void test_node_dl_new()
407 fprintf( stderr, " Testing node_dl_new ... " );
409 node_dl *node = NULL;
411 node = node_dl_new();
413 assert( node->next == NULL );
414 assert( node->prev == NULL );
415 assert( node->val == NULL );
417 fprintf( stderr, "OK\n" );
421 void test_list_dl_add_beg()
423 fprintf( stderr, " Testing list_dl_add_beg ... " );
425 list_dl *list = list_dl_new();
426 node_dl *node1 = node_dl_new();
427 node_dl *node2 = node_dl_new();
428 node_dl *node3 = node_dl_new();
430 node1->val = "TEST1";
431 node2->val = "TEST2";
432 node3->val = "TEST3";
434 list_dl_add_beg( &list, &node1 );
436 assert( strcmp( list->first->val, "TEST1" ) == 0 );
438 list_dl_add_beg( &list, &node2 );
440 assert( strcmp( list->first->val, "TEST2" ) == 0 );
442 list_dl_add_beg( &list, &node3 );
444 assert( strcmp( list->first->val, "TEST3" ) == 0 );
446 fprintf( stderr, "OK\n" );
450 void test_list_dl_add_end()
452 fprintf( stderr, " Testing list_dl_add_end ... " );
454 list_dl *list = list_dl_new();
455 node_dl *node1 = node_dl_new();
456 node_dl *node2 = node_dl_new();
457 node_dl *node3 = node_dl_new();
459 node1->val = "TEST1";
460 node2->val = "TEST2";
461 node3->val = "TEST3";
463 list_dl_add_end( &list, &node1 );
465 assert( strcmp( list->last->val, "TEST1" ) == 0 );
467 list_dl_add_end( &list, &node2 );
469 assert( strcmp( list->last->val, "TEST2" ) == 0 );
471 list_dl_add_end( &list, &node3 );
473 assert( strcmp( list->last->val, "TEST3" ) == 0 );
475 fprintf( stderr, "OK\n" );
479 void test_list_dl_add_before()
481 fprintf( stderr, " Testing list_dl_add_before ... " );
483 list_dl *list = list_dl_new();
484 node_dl *node1 = node_dl_new();
485 node_dl *node2 = node_dl_new();
486 node_dl *node3 = node_dl_new();
488 node1->val = "TEST1";
489 node2->val = "TEST2";
490 node3->val = "TEST3";
492 list_dl_add_beg( &list, &node1 );
494 assert( strcmp( list->first->val, "TEST1" ) == 0 );
496 list_dl_add_before( &list, &node1, &node2 );
498 assert( strcmp( list->first->val, "TEST2" ) == 0 );
500 list_dl_add_before( &list, &node1, &node3 );
502 assert( strcmp( list->first->val, "TEST2" ) == 0 );
504 list_dl_add_before( &list, &node2, &node3 );
506 assert( strcmp( list->first->val, "TEST3" ) == 0 );
508 fprintf( stderr, "OK\n" );
512 void test_list_dl_add_after()
514 fprintf( stderr, " Testing list_dl_add_after ... " );
516 list_dl *list = list_dl_new();
517 node_dl *node1 = node_dl_new();
518 node_dl *node2 = node_dl_new();
519 node_dl *node3 = node_dl_new();
521 node1->val = "TEST1";
522 node2->val = "TEST2";
523 node3->val = "TEST3";
525 list_dl_add_beg( &list, &node1 );
527 assert( strcmp( list->first->val, "TEST1" ) == 0 );
529 list_dl_add_after( &list, &node1, &node2 );
531 assert( strcmp( list->last->val, "TEST2" ) == 0 );
533 list_dl_add_after( &list, &node1, &node3 );
535 assert( strcmp( list->last->val, "TEST2" ) == 0 );
537 list_dl_add_after( &list, &node2, &node3 );
539 assert( strcmp( list->last->val, "TEST3" ) == 0 );
541 fprintf( stderr, "OK\n" );
545 void test_list_dl_remove()
547 fprintf( stderr, " Testing list_dl_remove ... " );
549 list_dl *list = list_dl_new();
550 node_dl *node1 = node_dl_new();
551 node_dl *node2 = node_dl_new();
552 node_dl *node3 = node_dl_new();
554 node1->val = "TEST1";
555 node2->val = "TEST2";
556 node3->val = "TEST3";
558 list_dl_add_beg( &list, &node1 );
560 list_dl_add_after( &list, &node1, &node2 );
561 list_dl_add_after( &list, &node2, &node3 );
563 list_dl_remove( &list, &node3 );
564 assert( strcmp( list->last->val, "TEST2" ) == 0 );
566 list_dl_remove( &list, &node2 );
567 assert( strcmp( list->last->val, "TEST1" ) == 0 );
569 list_dl_remove( &list, &node1 );
571 assert( list->first == NULL );
572 assert( list->last == NULL );
574 fprintf( stderr, "OK\n" );
578 void test_list_dl_print()
580 fprintf( stderr, " Testing list_dl_print ... " );
582 list_dl *list = list_dl_new();
583 node_dl *node1 = node_dl_new();
584 node_dl *node2 = node_dl_new();
585 node_dl *node3 = node_dl_new();
587 node1->val = "TEST1";
588 node2->val = "TEST2";
589 node3->val = "TEST3";
591 list_dl_add_beg( &list, &node1 );
592 list_dl_add_beg( &list, &node2 );
593 list_dl_add_beg( &list, &node3 );
595 // list_dl_print( list );
597 fprintf( stderr, "OK\n" );
601 void test_list_dl_destroy()
603 fprintf( stderr, " Testing list_dl_destroy ... " );
605 list_dl *list = list_dl_new();
606 node_dl *node1 = node_dl_new();
607 node_dl *node2 = node_dl_new();
608 node_dl *node3 = node_dl_new();
610 node1->val = "TEST1";
611 node2->val = "TEST2";
612 node3->val = "TEST3";
614 list_dl_add_beg( &list, &node1 );
615 list_dl_add_beg( &list, &node2 );
616 list_dl_add_beg( &list, &node3 );
618 // list_dl_print( list );
620 list_dl_destroy( &list );
622 assert( list == NULL );
624 fprintf( stderr, "OK\n" );
628 void test_node_dl_destroy()
630 fprintf( stderr, " Testing node_dl_destroy ... " );
632 node_dl *node = NULL;
635 str = mem_get( 1000000000 );
637 node = node_dl_new();
641 node_dl_destroy( &node );
643 assert( node == NULL );
645 fprintf( stderr, "OK\n" );
649 /* >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> GENERIC LINKED LIST <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< */
652 void test_list_count()
654 fprintf( stderr, " Testing list_count ... " );
656 /* Singly linked list. */
658 char *array[3] = { "test1", "test2", "test3" };
659 list_sl *sllist = NULL;
660 node_sl *node = NULL;
661 node_sl *new_node = NULL;
664 sllist = list_sl_new();
665 new_node = node_sl_new();
667 new_node->val = array[ 0 ];
669 list_sl_add_beg( &sllist, &new_node );
673 for ( i = 1; i < 3; i++ )
675 new_node = node_sl_new();
677 new_node->val = array[ i ];
679 list_sl_add_after( &node, &new_node );
684 assert( list_count( sllist ) == 3 );
686 /* Doubly linked list. */
688 list_dl *dllist = list_dl_new();
689 node_dl *node1 = node_dl_new();
690 node_dl *node2 = node_dl_new();
691 node_dl *node3 = node_dl_new();
693 node1->val = "TEST1";
694 node2->val = "TEST2";
695 node3->val = "TEST3";
697 list_dl_add_beg( &dllist, &node1 );
698 list_dl_add_beg( &dllist, &node2 );
699 list_dl_add_beg( &dllist, &node3 );
701 assert( list_count( dllist ) == 3 );
703 fprintf( stderr, "OK\n" );
707 /* >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>><<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< */