6 static void test_list_sl_new();
7 static void test_node_sl_new();
8 static void test_list_sl_add_beg();
9 static void test_list_sl_add_after();
10 static void test_list_sl_remove_beg();
11 static void test_list_sl_remove_after();
12 static void test_list_sl_print();
13 static void test_list_sl_sort();
14 static void test_list_sl_destroy();
16 static void test_list_dl_new();
17 static void test_node_dl_new();
18 static void test_list_dl_add_beg();
19 static void test_list_dl_add_end();
20 static void test_list_dl_add_before();
21 static void test_list_dl_add_after();
22 static void test_list_dl_remove();
23 static void test_list_dl_print();
24 static void test_list_dl_destroy();
26 static void test_list_count();
31 fprintf( stderr, "Running all tests for list.c\n" );
35 test_list_sl_add_beg();
36 test_list_sl_add_after();
37 test_list_sl_remove_beg();
38 test_list_sl_remove_after();
41 test_list_sl_destroy();
45 test_list_dl_add_beg();
46 test_list_dl_add_end();
47 test_list_dl_add_before();
48 test_list_dl_add_after();
49 test_list_dl_remove();
51 test_list_dl_destroy();
55 fprintf( stderr, "Done\n\n" );
61 /* >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> SINGLY LINKED LIST <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< */
64 void test_list_sl_new()
66 fprintf( stderr, " Testing list_sl_new ... " );
72 assert( list != NULL );
73 assert( list->first == NULL );
75 fprintf( stderr, "OK\n" );
79 void test_node_sl_new()
81 fprintf( stderr, " Testing node_sl_new ... " );
87 assert( node != NULL );
88 assert( node->next == NULL );
89 assert( node->val == NULL );
91 fprintf( stderr, "OK\n" );
95 void test_list_sl_add_beg()
97 fprintf( stderr, " Testing list_sl_add_beg ... " );
99 char *array[3] = { "test1", "test2", "test3" };
100 list_sl *list = NULL;
101 node_sl *node = NULL;
104 list = list_sl_new();
106 for ( i = 0; i < 3; i++ )
108 node = node_sl_new();
110 node->val = array[ i ];
112 list_sl_add_beg( &list, &node );
117 for ( node = list->first; node != NULL; node = node->next )
119 assert( strcmp( array[ i ], ( char * ) node->val ) == 0 );
124 fprintf( stderr, "OK\n" );
128 void test_list_sl_add_after()
130 fprintf( stderr, " Testing list_sl_add_after ... " );
132 char *array[3] = { "test1", "test2", "test3" };
133 list_sl *list = NULL;
134 node_sl *node = NULL;
135 node_sl *new_node = NULL;
138 list = list_sl_new();
139 new_node = node_sl_new();
141 new_node->val = array[ 0 ];
143 list_sl_add_beg( &list, &new_node );
147 for ( i = 1; i < 3; i++ )
149 new_node = node_sl_new();
151 new_node->val = array[ i ];
153 list_sl_add_after( &node, &new_node );
160 for ( node = list->first; node != NULL; node = node->next )
162 assert( strcmp( array[ i ], ( char * ) node->val ) == 0 );
167 fprintf( stderr, "OK\n" );
171 void test_list_sl_remove_beg()
173 fprintf( stderr, " Testing list_sl_remove_beg ... " );
175 char *array[3] = { "test1", "test2", "test3" };
176 list_sl *list = NULL;
177 node_sl *node = NULL;
178 node_sl *new_node = NULL;
181 list = list_sl_new();
182 new_node = node_sl_new();
184 new_node->val = array[ 0 ];
186 list_sl_add_beg( &list, &new_node );
190 for ( i = 1; i < 3; i++ )
192 new_node = node_sl_new();
194 new_node->val = array[ i ];
196 list_sl_add_after( &node, &new_node );
205 while ( node != NULL )
207 assert( strcmp( ( char * ) node->val, array[ i ] ) == 0 );
209 list_sl_remove_beg( &list );
216 fprintf( stderr, "OK\n" );
220 void test_list_sl_remove_after()
222 fprintf( stderr, " Testing list_sl_remove_after ... " );
224 char *array[3] = { "test1", "test2", "test3" };
225 list_sl *list = NULL;
226 node_sl *node = NULL;
227 node_sl *new_node = NULL;
230 list = list_sl_new();
231 new_node = node_sl_new();
233 new_node->val = array[ 0 ];
235 list_sl_add_beg( &list, &new_node );
239 for ( i = 1; i < 3; i++ )
241 new_node = node_sl_new();
243 new_node->val = array[ i ];
245 list_sl_add_after( &node, &new_node );
250 assert( strcmp( ( char * ) list->first->next->val, "test2" ) == 0 );
252 list_sl_remove_after( &list->first );
254 assert( strcmp( ( char * ) list->first->next->val, "test3" ) == 0 );
256 fprintf( stderr, "OK\n" );
260 void test_list_sl_print()
262 fprintf( stderr, " Testing list_sl_print ... " );
264 list_sl *list = NULL;
265 node_sl *node1 = NULL;
266 node_sl *node2 = NULL;
267 node_sl *node3 = NULL;
269 list = list_sl_new();
271 node1 = node_sl_new();
272 node2 = node_sl_new();
273 node3 = node_sl_new();
275 node1->val = "TEST1";
276 node2->val = "TEST2";
277 node3->val = "TEST3";
279 list_sl_add_beg( &list, &node1 );
280 list_sl_add_beg( &list, &node2 );
281 list_sl_add_beg( &list, &node3 );
283 // list_sl_print( list );
285 fprintf( stderr, "OK\n" );
289 void test_list_sl_sort()
291 fprintf( stderr, " Testing list_sl_sort ... " );
293 /* Sorting a char list */
295 char *array[3] = { "test1", "test2", "test3" };
296 list_sl *list = NULL;
297 node_sl *node = NULL;
300 list = list_sl_new();
302 for ( i = 0; i < 3; i++ )
304 node = node_sl_new();
306 node->val = array[ i ];
308 list_sl_add_beg( &list, &node );
311 list_sl_sort( &list, cmp_list_sl_char_asc );
312 list_sl_sort( &list, cmp_list_sl_char_desc );
314 // /* Sorting a int list */
316 // int int_array[ 5 ] = { 345, 23, 23, 1, 400 };
317 // list_sl *int_list = NULL;
318 // node_sl *int_node = NULL;
320 // int_list = list_sl_new();
322 // for ( i = 0; i < 5; i++ )
324 // printf( "int: %d\n", int_array[ i ] );
326 // int_node = node_sl_new();
328 // node->val = int_array[ i ];
331 fprintf( stderr, "OK\n" );
335 void test_list_sl_destroy()
337 fprintf( stderr, " Testing list_sl_destroy ... " );
339 char *array[3] = { "test1", "test2", "test3" };
340 list_sl *list = NULL;
341 node_sl *node = NULL;
344 list = list_sl_new();
346 for ( i = 0; i < 3; i++ )
348 node = node_sl_new();
350 node->val = array[ i ];
352 list_sl_add_beg( &list, &node );
355 list_sl_destroy( &list );
357 assert( list == NULL );
359 fprintf( stderr, "OK\n" );
363 /* >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> DOUBLY LINKED LIST <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< */
366 void test_list_dl_new()
368 fprintf( stderr, " Testing list_dl_new ... " );
370 list_dl *list = NULL;
372 list = list_dl_new();
374 assert( list->first == NULL );
375 assert( list->last == NULL );
377 fprintf( stderr, "OK\n" );
381 void test_node_dl_new()
383 fprintf( stderr, " Testing node_dl_new ... " );
385 node_dl *node = NULL;
387 node = node_dl_new();
389 assert( node->next == NULL );
390 assert( node->prev == NULL );
391 assert( node->val == NULL );
393 fprintf( stderr, "OK\n" );
397 void test_list_dl_add_beg()
399 fprintf( stderr, " Testing list_dl_add_beg ... " );
401 list_dl *list = list_dl_new();
402 node_dl *node1 = node_dl_new();
403 node_dl *node2 = node_dl_new();
404 node_dl *node3 = node_dl_new();
406 node1->val = "TEST1";
407 node2->val = "TEST2";
408 node3->val = "TEST3";
410 list_dl_add_beg( &list, &node1 );
412 assert( strcmp( list->first->val, "TEST1" ) == 0 );
414 list_dl_add_beg( &list, &node2 );
416 assert( strcmp( list->first->val, "TEST2" ) == 0 );
418 list_dl_add_beg( &list, &node3 );
420 assert( strcmp( list->first->val, "TEST3" ) == 0 );
422 fprintf( stderr, "OK\n" );
426 void test_list_dl_add_end()
428 fprintf( stderr, " Testing list_dl_add_end ... " );
430 list_dl *list = list_dl_new();
431 node_dl *node1 = node_dl_new();
432 node_dl *node2 = node_dl_new();
433 node_dl *node3 = node_dl_new();
435 node1->val = "TEST1";
436 node2->val = "TEST2";
437 node3->val = "TEST3";
439 list_dl_add_end( &list, &node1 );
441 assert( strcmp( list->last->val, "TEST1" ) == 0 );
443 list_dl_add_end( &list, &node2 );
445 assert( strcmp( list->last->val, "TEST2" ) == 0 );
447 list_dl_add_end( &list, &node3 );
449 assert( strcmp( list->last->val, "TEST3" ) == 0 );
451 fprintf( stderr, "OK\n" );
455 void test_list_dl_add_before()
457 fprintf( stderr, " Testing list_dl_add_before ... " );
459 list_dl *list = list_dl_new();
460 node_dl *node1 = node_dl_new();
461 node_dl *node2 = node_dl_new();
462 node_dl *node3 = node_dl_new();
464 node1->val = "TEST1";
465 node2->val = "TEST2";
466 node3->val = "TEST3";
468 list_dl_add_beg( &list, &node1 );
470 assert( strcmp( list->first->val, "TEST1" ) == 0 );
472 list_dl_add_before( &list, &node1, &node2 );
474 assert( strcmp( list->first->val, "TEST2" ) == 0 );
476 list_dl_add_before( &list, &node1, &node3 );
478 assert( strcmp( list->first->val, "TEST2" ) == 0 );
480 list_dl_add_before( &list, &node2, &node3 );
482 assert( strcmp( list->first->val, "TEST3" ) == 0 );
484 fprintf( stderr, "OK\n" );
488 void test_list_dl_add_after()
490 fprintf( stderr, " Testing list_dl_add_after ... " );
492 list_dl *list = list_dl_new();
493 node_dl *node1 = node_dl_new();
494 node_dl *node2 = node_dl_new();
495 node_dl *node3 = node_dl_new();
497 node1->val = "TEST1";
498 node2->val = "TEST2";
499 node3->val = "TEST3";
501 list_dl_add_beg( &list, &node1 );
503 assert( strcmp( list->first->val, "TEST1" ) == 0 );
505 list_dl_add_after( &list, &node1, &node2 );
507 assert( strcmp( list->last->val, "TEST2" ) == 0 );
509 list_dl_add_after( &list, &node1, &node3 );
511 assert( strcmp( list->last->val, "TEST2" ) == 0 );
513 list_dl_add_after( &list, &node2, &node3 );
515 assert( strcmp( list->last->val, "TEST3" ) == 0 );
517 fprintf( stderr, "OK\n" );
521 void test_list_dl_remove()
523 fprintf( stderr, " Testing list_dl_remove ... " );
525 list_dl *list = list_dl_new();
526 node_dl *node1 = node_dl_new();
527 node_dl *node2 = node_dl_new();
528 node_dl *node3 = node_dl_new();
530 node1->val = "TEST1";
531 node2->val = "TEST2";
532 node3->val = "TEST3";
534 list_dl_add_beg( &list, &node1 );
536 list_dl_add_after( &list, &node1, &node2 );
537 list_dl_add_after( &list, &node2, &node3 );
539 list_dl_remove( &list, &node3 );
540 assert( strcmp( list->last->val, "TEST2" ) == 0 );
542 list_dl_remove( &list, &node2 );
543 assert( strcmp( list->last->val, "TEST1" ) == 0 );
545 list_dl_remove( &list, &node1 );
547 assert( list->first == NULL );
548 assert( list->last == NULL );
550 fprintf( stderr, "OK\n" );
554 void test_list_dl_print()
556 fprintf( stderr, " Testing list_dl_print ... " );
558 list_dl *list = list_dl_new();
559 node_dl *node1 = node_dl_new();
560 node_dl *node2 = node_dl_new();
561 node_dl *node3 = node_dl_new();
563 node1->val = "TEST1";
564 node2->val = "TEST2";
565 node3->val = "TEST3";
567 list_dl_add_beg( &list, &node1 );
568 list_dl_add_beg( &list, &node2 );
569 list_dl_add_beg( &list, &node3 );
571 // list_dl_print( list );
573 fprintf( stderr, "OK\n" );
577 void test_list_dl_destroy()
579 fprintf( stderr, " Testing list_dl_destroy ... " );
581 list_dl *list = list_dl_new();
582 node_dl *node1 = node_dl_new();
583 node_dl *node2 = node_dl_new();
584 node_dl *node3 = node_dl_new();
586 node1->val = "TEST1";
587 node2->val = "TEST2";
588 node3->val = "TEST3";
590 list_dl_add_beg( &list, &node1 );
591 list_dl_add_beg( &list, &node2 );
592 list_dl_add_beg( &list, &node3 );
594 // list_dl_print( list );
596 list_dl_destroy( &list );
598 assert( list == NULL );
600 fprintf( stderr, "OK\n" );
604 /* >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> GENERIC LINKED LIST <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< */
607 void test_list_count()
609 fprintf( stderr, " Testing list_count ... " );
611 /* Singly linked list. */
613 char *array[3] = { "test1", "test2", "test3" };
614 list_sl *sllist = NULL;
615 node_sl *node = NULL;
616 node_sl *new_node = NULL;
619 sllist = list_sl_new();
620 new_node = node_sl_new();
622 new_node->val = array[ 0 ];
624 list_sl_add_beg( &sllist, &new_node );
628 for ( i = 1; i < 3; i++ )
630 new_node = node_sl_new();
632 new_node->val = array[ i ];
634 list_sl_add_after( &node, &new_node );
639 assert( list_count( sllist ) == 3 );
641 /* Doubly linked list. */
643 list_dl *dllist = list_dl_new();
644 node_dl *node1 = node_dl_new();
645 node_dl *node2 = node_dl_new();
646 node_dl *node3 = node_dl_new();
648 node1->val = "TEST1";
649 node2->val = "TEST2";
650 node3->val = "TEST3";
652 list_dl_add_beg( &dllist, &node1 );
653 list_dl_add_beg( &dllist, &node2 );
654 list_dl_add_beg( &dllist, &node3 );
656 assert( list_count( dllist ) == 3 );
658 fprintf( stderr, "OK\n" );
662 /* >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>><<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< */