• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 #undef G_DISABLE_ASSERT
2 #undef G_LOG_DOMAIN
3 
4 #include <glib.h>
5 
6 #define DEBUG_MSG(args)
7 /* #define DEBUG_MSG(args) g_printerr args ; g_printerr ("\n");  */
8 #define PRINT_MSG(args)
9 /* #define PRINT_MSG(args) g_print args ; g_print ("\n"); */
10 
11 #define SIZE       50
12 #define NUMBER_MIN 0000
13 #define NUMBER_MAX 9999
14 
15 
16 static guint32 array[SIZE];
17 
18 
19 static gint
sort(gconstpointer p1,gconstpointer p2)20 sort (gconstpointer p1, gconstpointer p2)
21 {
22   gint32 a, b;
23 
24   a = GPOINTER_TO_INT (p1);
25   b = GPOINTER_TO_INT (p2);
26 
27   return (a > b ? +1 : a == b ? 0 : -1);
28 }
29 
30 /*
31  * glist sort tests
32  */
33 static void
test_list_sort(void)34 test_list_sort (void)
35 {
36   GList *list = NULL;
37   gint   i;
38 
39   PRINT_MSG (("testing g_list_sort()"));
40 
41   for (i = 0; i < SIZE; i++) {
42     list = g_list_append (list, GINT_TO_POINTER (array[i]));
43   }
44 
45   list = g_list_sort (list, sort);
46   for (i = 0; i < SIZE - 1; i++) {
47     gpointer p1, p2;
48 
49     p1 = g_list_nth_data (list, i);
50     p2 = g_list_nth_data (list, i+1);
51 
52     g_assert (GPOINTER_TO_INT (p1) <= GPOINTER_TO_INT (p2));
53     DEBUG_MSG (("list_sort #%3.3d ---> %d", i, GPOINTER_TO_INT (p1)));
54   }
55 
56   g_list_free (list);
57 }
58 
59 static void
test_list_sort_with_data(void)60 test_list_sort_with_data (void)
61 {
62   GList *list = NULL;
63   gint   i;
64 
65   PRINT_MSG (("testing g_list_sort_with_data()"));
66 
67   for (i = 0; i < SIZE; i++) {
68     list = g_list_append (list, GINT_TO_POINTER (array[i]));
69   }
70 
71   list = g_list_sort_with_data (list, (GCompareDataFunc)sort, NULL);
72   for (i = 0; i < SIZE - 1; i++) {
73     gpointer p1, p2;
74 
75     p1 = g_list_nth_data (list, i);
76     p2 = g_list_nth_data (list, i+1);
77 
78     g_assert (GPOINTER_TO_INT (p1) <= GPOINTER_TO_INT (p2));
79     DEBUG_MSG (("list_sort_with_data #%3.3d ---> %d", i, GPOINTER_TO_INT (p1)));
80   }
81 
82   g_list_free (list);
83 }
84 
85 static void
test_list_insert_sorted(void)86 test_list_insert_sorted (void)
87 {
88   GList *list = NULL;
89   gint   i;
90 
91   PRINT_MSG (("testing g_list_insert_sorted()"));
92 
93   for (i = 0; i < SIZE; i++) {
94     list = g_list_insert_sorted (list, GINT_TO_POINTER (array[i]), sort);
95   }
96 
97   for (i = 0; i < SIZE - 1; i++) {
98     gpointer p1, p2;
99 
100     p1 = g_list_nth_data (list, i);
101     p2 = g_list_nth_data (list, i+1);
102 
103     g_assert (GPOINTER_TO_INT (p1) <= GPOINTER_TO_INT (p2));
104     DEBUG_MSG (("list_insert_sorted #%3.3d ---> %d", i, GPOINTER_TO_INT (p1)));
105   }
106 
107   g_list_free (list);
108 }
109 
110 static void
test_list_insert_sorted_with_data(void)111 test_list_insert_sorted_with_data (void)
112 {
113   GList *list = NULL;
114   gint   i;
115 
116   PRINT_MSG (("testing g_list_insert_sorted_with_data()"));
117 
118   for (i = 0; i < SIZE; i++) {
119     list = g_list_insert_sorted_with_data (list,
120 					   GINT_TO_POINTER (array[i]),
121 					   (GCompareDataFunc)sort,
122 					   NULL);
123   }
124 
125   for (i = 0; i < SIZE - 1; i++) {
126     gpointer p1, p2;
127 
128     p1 = g_list_nth_data (list, i);
129     p2 = g_list_nth_data (list, i+1);
130 
131     g_assert (GPOINTER_TO_INT (p1) <= GPOINTER_TO_INT (p2));
132     DEBUG_MSG (("list_insert_sorted_with_data #%3.3d ---> %d", i, GPOINTER_TO_INT (p1)));
133   }
134 
135   g_list_free (list);
136 }
137 
138 static void
test_list_reverse(void)139 test_list_reverse (void)
140 {
141   GList *list = NULL;
142   GList *st;
143   gint   nums[10] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
144   gint   i;
145 
146   PRINT_MSG (("testing g_list_reverse()"));
147 
148   for (i = 0; i < 10; i++) {
149     list = g_list_append (list, &nums[i]);
150   }
151 
152   list = g_list_reverse (list);
153 
154   for (i = 0; i < 10; i++) {
155     st = g_list_nth (list, i);
156     g_assert (*((gint*) st->data) == (9 - i));
157   }
158 
159   g_list_free (list);
160 }
161 
162 static void
test_list_nth(void)163 test_list_nth (void)
164 {
165   GList *list = NULL;
166   GList *st;
167   gint   nums[10] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
168   gint   i;
169 
170   PRINT_MSG (("testing g_list_nth()"));
171 
172   for (i = 0; i < 10; i++) {
173     list = g_list_append (list, &nums[i]);
174   }
175 
176   for (i = 0; i < 10; i++) {
177     st = g_list_nth (list, i);
178     g_assert (*((gint*) st->data) == i);
179   }
180 
181   g_list_free (list);
182 }
183 
184 int
main(int argc,char * argv[])185 main (int argc, char *argv[])
186 {
187   gint i;
188 
189   DEBUG_MSG (("debugging messages turned on"));
190 
191   DEBUG_MSG (("creating %d random numbers", SIZE));
192 
193   /* Create an array of random numbers. */
194   for (i = 0; i < SIZE; i++) {
195     array[i] = g_random_int_range (NUMBER_MIN, NUMBER_MAX);
196     DEBUG_MSG (("number #%3.3d ---> %d", i, array[i]));
197   }
198 
199   /* Start tests. */
200   test_list_sort ();
201   test_list_sort_with_data ();
202 
203   test_list_insert_sorted ();
204   test_list_insert_sorted_with_data ();
205 
206   test_list_reverse ();
207   test_list_nth ();
208 
209   PRINT_MSG (("testing finished"));
210 
211   return 0;
212 }
213