test/list.c

00001 #include <string.h>
00002 #include <stdlib.h>
00003 #include <stdio.h>
00004 #include <sys/stat.h>
00005 #include <sys/time.h>
00006 #include <sys/types.h>
00007 #include <fcntl.h>
00008 #include <signal.h>
00009 #include <u/libu.h>
00010 
00011 int test_suite_list_register (u_test_t *t);
00012 
00013 static int test_list_iterator (u_test_case_t *tc);
00014 static int test_list_ins (u_test_case_t *tc);
00015 
00016 static int test_list_iterator (u_test_case_t *tc)
00017 {
00018     enum { ITERS = 300 };
00019     u_list_t *l = NULL;
00020     void *it;
00021     size_t j, c;
00022     intptr_t i, v, tot0, tot1;
00023 
00024     u_test_err_if (u_list_create(&l));
00025 
00026     u_test_err_ifm (u_list_count(l), "expecting no items!");
00027 
00028     for (tot0 = 0, i = 1; i < ITERS; ++i)
00029     {
00030         u_test_err_if (u_list_add(l, (void*)i));
00031         tot0 += i;
00032     }
00033 
00034     for (i = 1; i < ITERS; ++i)
00035     {
00036         u_test_err_if (u_list_insert(l, (void*)i, i));
00037         tot0 += i;
00038     }
00039 
00040     for (tot1 = 0, v = (intptr_t) u_list_first(l, &it); 
00041             v != 0;
00042             v = (intptr_t) u_list_next(l, &it))
00043     {
00044         tot1 += v;
00045     }
00046 
00047     u_test_err_if (tot0 != tot1);
00048 
00049     /* remove some items */
00050     c = u_list_count(l)/2;
00051     for (j = 0; j < c; ++j)
00052     {
00053         u_list_del_n(l, 0, (void*)&v);
00054         tot0 -= v;
00055     }
00056 
00057     for (tot1 = 0, v = (intptr_t) u_list_first(l, &it); 
00058             v != 0; 
00059             v = (intptr_t) u_list_next(l, &it))
00060     {
00061         tot1 += v;
00062     }
00063 
00064     u_test_err_if (tot0 != tot1);
00065 
00066     u_list_free(l);
00067 
00068     return U_TEST_SUCCESS;
00069 err:
00070     return U_TEST_FAILURE;
00071 }
00072 
00073 static int test_list_ins (u_test_case_t *tc)
00074 {
00075     enum { ITERS = 3 };
00076     u_list_t *l = NULL;
00077     uintptr_t i;
00078     void* prev;
00079 
00080     u_test_err_if (u_list_create(&l));
00081     u_test_err_if (u_list_add(l, (void*)1));
00082     u_test_err_if (u_list_add(l, (void*)2));
00083     u_test_err_if (u_list_add(l, (void*)99));
00084     u_test_err_if (u_list_add(l, (void*)2));
00085     u_test_err_if (u_list_add(l, (void*)4));
00086 
00087     u_test_err_if (u_list_insert(l, (void*)0, 0));
00088     u_test_err_if (u_list_insert(l, (void*)3, 3));
00089     u_test_err_if (u_list_del(l, (void*)99));
00090     u_test_err_if (u_list_del_n(l, 4, NULL));
00091 
00092     u_test_err_if (u_list_insert(l, (void*)99, 0));
00093     u_test_err_if (u_list_insert(l, (void*)99, u_list_count(l)));
00094 
00095     u_test_err_if (u_list_del_n(l, 0, &prev));
00096     u_test_err_if ((uintptr_t) prev != 99);
00097 
00098     u_test_err_if (u_list_del_n(l, u_list_count(l)-1, &prev));
00099     u_test_err_if ((uintptr_t) prev != 99);
00100 
00101     for (i = 0; i < ITERS; ++i)
00102         u_test_err_if (u_list_insert(l, (void*)99, 2));
00103     for (i = 0; i < ITERS; ++i)
00104         u_test_err_if (u_list_del(l, (void*)99));
00105 
00106     for (i = 0; i < ITERS; ++i)
00107         u_test_err_if (u_list_insert(l, (void*)99, 2));
00108 
00109     for (i = 0; i < ITERS; ++i)
00110     {
00111         u_test_err_if  (u_list_del_n(l, 2, &prev));
00112         u_test_err_if  ((uintptr_t) prev != 99);
00113     }
00114 
00115     for (i = 0; i < (uintptr_t) u_list_count(l); ++i)
00116         u_test_err_if  (i != (uintptr_t) u_list_get_n(l, i));
00117 
00118     u_list_free(l);
00119 
00120     return U_TEST_SUCCESS;
00121 err:
00122     if (l)
00123         u_list_free(l);
00124 
00125     return U_TEST_FAILURE;
00126 }
00127 
00128 int test_suite_list_register (u_test_t *t)
00129 {
00130     u_test_suite_t *ts = NULL;
00131 
00132     con_err_if (u_test_suite_new("Lists", &ts));
00133 
00134     con_err_if (u_test_case_register("Insertion", test_list_ins, ts));
00135     con_err_if (u_test_case_register("Iteration", test_list_iterator, ts));
00136 
00137     return u_test_suite_add(ts, t);
00138 err:
00139     u_test_suite_free(ts);
00140     return ~0;
00141 }

←Products
© 2005-2012 - KoanLogic S.r.l. - All rights reserved