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
16static guint32 array[SIZE];
17
18
19static gint
20sort (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 * gslist sort tests
32 */
33static void
34test_slist_sort (void)
35{
36  GSList *slist = NULL;
37  gint    i;
38
39  PRINT_MSG (("testing g_slist_sort()"));
40
41  for (i = 0; i < SIZE; i++) {
42    slist = g_slist_append (slist, GINT_TO_POINTER (array[i]));
43  }
44
45  slist = g_slist_sort (slist, sort);
46  for (i = 0; i < SIZE - 1; i++) {
47    gpointer p1, p2;
48
49    p1 = g_slist_nth_data (slist, i);
50    p2 = g_slist_nth_data (slist, i+1);
51
52    g_assert (GPOINTER_TO_INT (p1) <= GPOINTER_TO_INT (p2));
53    DEBUG_MSG (("slist_sort #%3.3d ---> %d", i, GPOINTER_TO_INT (p1)));
54  }
55}
56
57static void
58test_slist_sort_with_data (void)
59{
60  GSList *slist = NULL;
61  gint    i;
62
63  PRINT_MSG (("testing g_slist_sort_with_data()"));
64
65  for (i = 0; i < SIZE; i++) {
66    slist = g_slist_append (slist, GINT_TO_POINTER (array[i]));
67  }
68
69  slist = g_slist_sort_with_data (slist, (GCompareDataFunc)sort, NULL);
70  for (i = 0; i < SIZE - 1; i++) {
71    gpointer p1, p2;
72
73    p1 = g_slist_nth_data (slist, i);
74    p2 = g_slist_nth_data (slist, i+1);
75
76    g_assert (GPOINTER_TO_INT (p1) <= GPOINTER_TO_INT (p2));
77    DEBUG_MSG (("slist_sort_with_data #%3.3d ---> %d", i, GPOINTER_TO_INT (p1)));
78  }
79}
80
81static void
82test_slist_insert_sorted (void)
83{
84  GSList *slist = NULL;
85  gint    i;
86
87  PRINT_MSG (("testing g_slist_insert_sorted()"));
88
89  for (i = 0; i < SIZE; i++) {
90    slist = g_slist_insert_sorted (slist, GINT_TO_POINTER (array[i]), sort);
91  }
92
93  for (i = 0; i < SIZE - 1; i++) {
94    gpointer p1, p2;
95
96    p1 = g_slist_nth_data (slist, i);
97    p2 = g_slist_nth_data (slist, i+1);
98
99    g_assert (GPOINTER_TO_INT (p1) <= GPOINTER_TO_INT (p2));
100    DEBUG_MSG (("slist_insert_sorted #%3.3d ---> %d", i, GPOINTER_TO_INT (p1)));
101  }
102}
103
104static void
105test_slist_insert_sorted_with_data (void)
106{
107  GSList *slist = NULL;
108  gint    i;
109
110  PRINT_MSG (("testing g_slist_insert_sorted_with_data()"));
111
112  for (i = 0; i < SIZE; i++) {
113    slist = g_slist_insert_sorted_with_data (slist,
114					   GINT_TO_POINTER (array[i]),
115					   (GCompareDataFunc)sort,
116					   NULL);
117  }
118
119  for (i = 0; i < SIZE - 1; i++) {
120    gpointer p1, p2;
121
122    p1 = g_slist_nth_data (slist, i);
123    p2 = g_slist_nth_data (slist, i+1);
124
125    g_assert (GPOINTER_TO_INT (p1) <= GPOINTER_TO_INT (p2));
126    DEBUG_MSG (("slist_insert_sorted_with_data #%3.3d ---> %d", i, GPOINTER_TO_INT (p1)));
127  }
128}
129
130static void
131test_slist_reverse (void)
132{
133  GSList *slist = NULL;
134  GSList *st;
135  gint    nums[10] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
136  gint    i;
137
138  PRINT_MSG (("testing g_slist_reverse()"));
139
140  for (i = 0; i < 10; i++) {
141    slist = g_slist_append (slist, &nums[i]);
142  }
143
144  slist = g_slist_reverse (slist);
145
146  for (i = 0; i < 10; i++) {
147    st = g_slist_nth (slist, i);
148    g_assert (*((gint*) st->data) == (9 - i));
149  }
150
151  g_slist_free (slist);
152}
153
154static void
155test_slist_nth (void)
156{
157  GSList *slist = NULL;
158  GSList *st;
159  gint    nums[10] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
160  gint    i;
161
162  PRINT_MSG (("testing g_slist_nth()"));
163
164  for (i = 0; i < 10; i++) {
165    slist = g_slist_append (slist, &nums[i]);
166  }
167
168  for (i = 0; i < 10; i++) {
169    st = g_slist_nth (slist, i);
170    g_assert (*((gint*) st->data) == i);
171  }
172
173  g_slist_free (slist);
174}
175
176int
177main (int argc, char *argv[])
178{
179  gint i;
180
181  DEBUG_MSG (("debugging messages turned on"));
182
183  DEBUG_MSG (("creating %d random numbers", SIZE));
184
185  /* Create an array of random numbers. */
186  for (i = 0; i < SIZE; i++) {
187    array[i] = g_random_int_range (NUMBER_MIN, NUMBER_MAX);
188    DEBUG_MSG (("number #%3.3d ---> %d", i, array[i]));
189  }
190
191  /* Start tests. */
192  test_slist_sort ();
193  test_slist_sort_with_data ();
194
195  test_slist_insert_sorted ();
196  test_slist_insert_sorted_with_data ();
197
198  test_slist_reverse ();
199  test_slist_nth ();
200
201  PRINT_MSG (("testing finished"));
202
203  return 0;
204}
205