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
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 }