13fa620d4dfeb3440526682b4970bc9147b6665c9Darin Adler#undef G_DISABLE_ASSERT
20b74f03e70ea7cab8c0f9d58108a446e3cb16d1eJeff Garzik#undef G_LOG_DOMAIN
30b74f03e70ea7cab8c0f9d58108a446e3cb16d1eJeff Garzik
4dde67f284da164ffe889ed0438f3d6457eda90f2Martyn James Russell#include <glib.h>
50b74f03e70ea7cab8c0f9d58108a446e3cb16d1eJeff Garzik
6dde67f284da164ffe889ed0438f3d6457eda90f2Martyn James Russell#define DEBUG_MSG(args)
7dde67f284da164ffe889ed0438f3d6457eda90f2Martyn James Russell/* #define DEBUG_MSG(args) g_printerr args ; g_printerr ("\n");  */
8dde67f284da164ffe889ed0438f3d6457eda90f2Martyn James Russell#define PRINT_MSG(args)
9dde67f284da164ffe889ed0438f3d6457eda90f2Martyn James Russell/* #define PRINT_MSG(args) g_print args ; g_print ("\n"); */
100b74f03e70ea7cab8c0f9d58108a446e3cb16d1eJeff Garzik
11dde67f284da164ffe889ed0438f3d6457eda90f2Martyn James Russell#define SIZE       50
12dde67f284da164ffe889ed0438f3d6457eda90f2Martyn James Russell#define NUMBER_MIN 0000
13dde67f284da164ffe889ed0438f3d6457eda90f2Martyn James Russell#define NUMBER_MAX 9999
140b74f03e70ea7cab8c0f9d58108a446e3cb16d1eJeff Garzik
150b74f03e70ea7cab8c0f9d58108a446e3cb16d1eJeff Garzik
16dde67f284da164ffe889ed0438f3d6457eda90f2Martyn James Russellstatic guint32 array[SIZE];
170b74f03e70ea7cab8c0f9d58108a446e3cb16d1eJeff Garzik
180b74f03e70ea7cab8c0f9d58108a446e3cb16d1eJeff Garzik
194b72e452335914b9a4682445a7bea4290fa2419eJeff Garzikstatic gint
20dde67f284da164ffe889ed0438f3d6457eda90f2Martyn James Russellsort (gconstpointer p1, gconstpointer p2)
210b74f03e70ea7cab8c0f9d58108a446e3cb16d1eJeff Garzik{
22dde67f284da164ffe889ed0438f3d6457eda90f2Martyn James Russell  gint32 a, b;
23dde67f284da164ffe889ed0438f3d6457eda90f2Martyn James Russell
24dde67f284da164ffe889ed0438f3d6457eda90f2Martyn James Russell  a = GPOINTER_TO_INT (p1);
25dde67f284da164ffe889ed0438f3d6457eda90f2Martyn James Russell  b = GPOINTER_TO_INT (p2);
26dde67f284da164ffe889ed0438f3d6457eda90f2Martyn James Russell
27dde67f284da164ffe889ed0438f3d6457eda90f2Martyn James Russell  return (a > b ? +1 : a == b ? 0 : -1);
280b74f03e70ea7cab8c0f9d58108a446e3cb16d1eJeff Garzik}
290b74f03e70ea7cab8c0f9d58108a446e3cb16d1eJeff Garzik
30dde67f284da164ffe889ed0438f3d6457eda90f2Martyn James Russell/*
31dde67f284da164ffe889ed0438f3d6457eda90f2Martyn James Russell * glist sort tests
32dde67f284da164ffe889ed0438f3d6457eda90f2Martyn James Russell */
33dde67f284da164ffe889ed0438f3d6457eda90f2Martyn James Russellstatic void
34dde67f284da164ffe889ed0438f3d6457eda90f2Martyn James Russelltest_list_sort (void)
350b74f03e70ea7cab8c0f9d58108a446e3cb16d1eJeff Garzik{
36dde67f284da164ffe889ed0438f3d6457eda90f2Martyn James Russell  GList *list = NULL;
37dde67f284da164ffe889ed0438f3d6457eda90f2Martyn James Russell  gint   i;
38dde67f284da164ffe889ed0438f3d6457eda90f2Martyn James Russell
39dde67f284da164ffe889ed0438f3d6457eda90f2Martyn James Russell  PRINT_MSG (("testing g_list_sort()"));
40dde67f284da164ffe889ed0438f3d6457eda90f2Martyn James Russell
41dde67f284da164ffe889ed0438f3d6457eda90f2Martyn James Russell  for (i = 0; i < SIZE; i++) {
42dde67f284da164ffe889ed0438f3d6457eda90f2Martyn James Russell    list = g_list_append (list, GINT_TO_POINTER (array[i]));
43dde67f284da164ffe889ed0438f3d6457eda90f2Martyn James Russell  }
44dde67f284da164ffe889ed0438f3d6457eda90f2Martyn James Russell
45dde67f284da164ffe889ed0438f3d6457eda90f2Martyn James Russell  list = g_list_sort (list, sort);
46dde67f284da164ffe889ed0438f3d6457eda90f2Martyn James Russell  for (i = 0; i < SIZE - 1; i++) {
47dde67f284da164ffe889ed0438f3d6457eda90f2Martyn James Russell    gpointer p1, p2;
48dde67f284da164ffe889ed0438f3d6457eda90f2Martyn James Russell
49dde67f284da164ffe889ed0438f3d6457eda90f2Martyn James Russell    p1 = g_list_nth_data (list, i);
50dde67f284da164ffe889ed0438f3d6457eda90f2Martyn James Russell    p2 = g_list_nth_data (list, i+1);
51dde67f284da164ffe889ed0438f3d6457eda90f2Martyn James Russell
52dde67f284da164ffe889ed0438f3d6457eda90f2Martyn James Russell    g_assert (GPOINTER_TO_INT (p1) <= GPOINTER_TO_INT (p2));
53dde67f284da164ffe889ed0438f3d6457eda90f2Martyn James Russell    DEBUG_MSG (("list_sort #%3.3d ---> %d", i, GPOINTER_TO_INT (p1)));
54dde67f284da164ffe889ed0438f3d6457eda90f2Martyn James Russell  }
55dde67f284da164ffe889ed0438f3d6457eda90f2Martyn James Russell
56dde67f284da164ffe889ed0438f3d6457eda90f2Martyn James Russell  g_list_free (list);
570b74f03e70ea7cab8c0f9d58108a446e3cb16d1eJeff Garzik}
580b74f03e70ea7cab8c0f9d58108a446e3cb16d1eJeff Garzik
59dde67f284da164ffe889ed0438f3d6457eda90f2Martyn James Russellstatic void
60dde67f284da164ffe889ed0438f3d6457eda90f2Martyn James Russelltest_list_sort_with_data (void)
610b74f03e70ea7cab8c0f9d58108a446e3cb16d1eJeff Garzik{
62dde67f284da164ffe889ed0438f3d6457eda90f2Martyn James Russell  GList *list = NULL;
63dde67f284da164ffe889ed0438f3d6457eda90f2Martyn James Russell  gint   i;
640b74f03e70ea7cab8c0f9d58108a446e3cb16d1eJeff Garzik
65dde67f284da164ffe889ed0438f3d6457eda90f2Martyn James Russell  PRINT_MSG (("testing g_list_sort_with_data()"));
66dde67f284da164ffe889ed0438f3d6457eda90f2Martyn James Russell
67dde67f284da164ffe889ed0438f3d6457eda90f2Martyn James Russell  for (i = 0; i < SIZE; i++) {
68dde67f284da164ffe889ed0438f3d6457eda90f2Martyn James Russell    list = g_list_append (list, GINT_TO_POINTER (array[i]));
69dde67f284da164ffe889ed0438f3d6457eda90f2Martyn James Russell  }
70dde67f284da164ffe889ed0438f3d6457eda90f2Martyn James Russell
71dde67f284da164ffe889ed0438f3d6457eda90f2Martyn James Russell  list = g_list_sort_with_data (list, (GCompareDataFunc)sort, NULL);
72dde67f284da164ffe889ed0438f3d6457eda90f2Martyn James Russell  for (i = 0; i < SIZE - 1; i++) {
73dde67f284da164ffe889ed0438f3d6457eda90f2Martyn James Russell    gpointer p1, p2;
74dde67f284da164ffe889ed0438f3d6457eda90f2Martyn James Russell
75dde67f284da164ffe889ed0438f3d6457eda90f2Martyn James Russell    p1 = g_list_nth_data (list, i);
76dde67f284da164ffe889ed0438f3d6457eda90f2Martyn James Russell    p2 = g_list_nth_data (list, i+1);
77dde67f284da164ffe889ed0438f3d6457eda90f2Martyn James Russell
78dde67f284da164ffe889ed0438f3d6457eda90f2Martyn James Russell    g_assert (GPOINTER_TO_INT (p1) <= GPOINTER_TO_INT (p2));
79dde67f284da164ffe889ed0438f3d6457eda90f2Martyn James Russell    DEBUG_MSG (("list_sort_with_data #%3.3d ---> %d", i, GPOINTER_TO_INT (p1)));
80dde67f284da164ffe889ed0438f3d6457eda90f2Martyn James Russell  }
81dde67f284da164ffe889ed0438f3d6457eda90f2Martyn James Russell
82dde67f284da164ffe889ed0438f3d6457eda90f2Martyn James Russell  g_list_free (list);
83dde67f284da164ffe889ed0438f3d6457eda90f2Martyn James Russell}
84dde67f284da164ffe889ed0438f3d6457eda90f2Martyn James Russell
85dde67f284da164ffe889ed0438f3d6457eda90f2Martyn James Russellstatic void
86dde67f284da164ffe889ed0438f3d6457eda90f2Martyn James Russelltest_list_insert_sorted (void)
87dde67f284da164ffe889ed0438f3d6457eda90f2Martyn James Russell{
88dde67f284da164ffe889ed0438f3d6457eda90f2Martyn James Russell  GList *list = NULL;
89dde67f284da164ffe889ed0438f3d6457eda90f2Martyn James Russell  gint   i;
900b74f03e70ea7cab8c0f9d58108a446e3cb16d1eJeff Garzik
91dde67f284da164ffe889ed0438f3d6457eda90f2Martyn James Russell  PRINT_MSG (("testing g_list_insert_sorted()"));
920b74f03e70ea7cab8c0f9d58108a446e3cb16d1eJeff Garzik
93dde67f284da164ffe889ed0438f3d6457eda90f2Martyn James Russell  for (i = 0; i < SIZE; i++) {
94dde67f284da164ffe889ed0438f3d6457eda90f2Martyn James Russell    list = g_list_insert_sorted (list, GINT_TO_POINTER (array[i]), sort);
95dde67f284da164ffe889ed0438f3d6457eda90f2Martyn James Russell  }
96dde67f284da164ffe889ed0438f3d6457eda90f2Martyn James Russell
97dde67f284da164ffe889ed0438f3d6457eda90f2Martyn James Russell  for (i = 0; i < SIZE - 1; i++) {
98dde67f284da164ffe889ed0438f3d6457eda90f2Martyn James Russell    gpointer p1, p2;
99dde67f284da164ffe889ed0438f3d6457eda90f2Martyn James Russell
100dde67f284da164ffe889ed0438f3d6457eda90f2Martyn James Russell    p1 = g_list_nth_data (list, i);
101dde67f284da164ffe889ed0438f3d6457eda90f2Martyn James Russell    p2 = g_list_nth_data (list, i+1);
102dde67f284da164ffe889ed0438f3d6457eda90f2Martyn James Russell
103dde67f284da164ffe889ed0438f3d6457eda90f2Martyn James Russell    g_assert (GPOINTER_TO_INT (p1) <= GPOINTER_TO_INT (p2));
104dde67f284da164ffe889ed0438f3d6457eda90f2Martyn James Russell    DEBUG_MSG (("list_insert_sorted #%3.3d ---> %d", i, GPOINTER_TO_INT (p1)));
105dde67f284da164ffe889ed0438f3d6457eda90f2Martyn James Russell  }
1060b74f03e70ea7cab8c0f9d58108a446e3cb16d1eJeff Garzik
1070b74f03e70ea7cab8c0f9d58108a446e3cb16d1eJeff Garzik  g_list_free (list);
108dde67f284da164ffe889ed0438f3d6457eda90f2Martyn James Russell}
109dde67f284da164ffe889ed0438f3d6457eda90f2Martyn James Russell
110dde67f284da164ffe889ed0438f3d6457eda90f2Martyn James Russellstatic void
111dde67f284da164ffe889ed0438f3d6457eda90f2Martyn James Russelltest_list_insert_sorted_with_data (void)
112dde67f284da164ffe889ed0438f3d6457eda90f2Martyn James Russell{
113dde67f284da164ffe889ed0438f3d6457eda90f2Martyn James Russell  GList *list = NULL;
114dde67f284da164ffe889ed0438f3d6457eda90f2Martyn James Russell  gint   i;
115dde67f284da164ffe889ed0438f3d6457eda90f2Martyn James Russell
116dde67f284da164ffe889ed0438f3d6457eda90f2Martyn James Russell  PRINT_MSG (("testing g_list_insert_sorted_with_data()"));
117dde67f284da164ffe889ed0438f3d6457eda90f2Martyn James Russell
118dde67f284da164ffe889ed0438f3d6457eda90f2Martyn James Russell  for (i = 0; i < SIZE; i++) {
119dde67f284da164ffe889ed0438f3d6457eda90f2Martyn James Russell    list = g_list_insert_sorted_with_data (list,
120dde67f284da164ffe889ed0438f3d6457eda90f2Martyn James Russell					   GINT_TO_POINTER (array[i]),
121dde67f284da164ffe889ed0438f3d6457eda90f2Martyn James Russell					   (GCompareDataFunc)sort,
122dde67f284da164ffe889ed0438f3d6457eda90f2Martyn James Russell					   NULL);
123dde67f284da164ffe889ed0438f3d6457eda90f2Martyn James Russell  }
1240b74f03e70ea7cab8c0f9d58108a446e3cb16d1eJeff Garzik
125dde67f284da164ffe889ed0438f3d6457eda90f2Martyn James Russell  for (i = 0; i < SIZE - 1; i++) {
126dde67f284da164ffe889ed0438f3d6457eda90f2Martyn James Russell    gpointer p1, p2;
1270b74f03e70ea7cab8c0f9d58108a446e3cb16d1eJeff Garzik
128dde67f284da164ffe889ed0438f3d6457eda90f2Martyn James Russell    p1 = g_list_nth_data (list, i);
129dde67f284da164ffe889ed0438f3d6457eda90f2Martyn James Russell    p2 = g_list_nth_data (list, i+1);
1300b74f03e70ea7cab8c0f9d58108a446e3cb16d1eJeff Garzik
131dde67f284da164ffe889ed0438f3d6457eda90f2Martyn James Russell    g_assert (GPOINTER_TO_INT (p1) <= GPOINTER_TO_INT (p2));
132dde67f284da164ffe889ed0438f3d6457eda90f2Martyn James Russell    DEBUG_MSG (("list_insert_sorted_with_data #%3.3d ---> %d", i, GPOINTER_TO_INT (p1)));
133dde67f284da164ffe889ed0438f3d6457eda90f2Martyn James Russell  }
1340b74f03e70ea7cab8c0f9d58108a446e3cb16d1eJeff Garzik
1350b74f03e70ea7cab8c0f9d58108a446e3cb16d1eJeff Garzik  g_list_free (list);
136dde67f284da164ffe889ed0438f3d6457eda90f2Martyn James Russell}
1370b74f03e70ea7cab8c0f9d58108a446e3cb16d1eJeff Garzik
138dde67f284da164ffe889ed0438f3d6457eda90f2Martyn James Russellstatic void
139dde67f284da164ffe889ed0438f3d6457eda90f2Martyn James Russelltest_list_reverse (void)
140dde67f284da164ffe889ed0438f3d6457eda90f2Martyn James Russell{
141dde67f284da164ffe889ed0438f3d6457eda90f2Martyn James Russell  GList *list = NULL;
142dde67f284da164ffe889ed0438f3d6457eda90f2Martyn James Russell  GList *st;
143dde67f284da164ffe889ed0438f3d6457eda90f2Martyn James Russell  gint   nums[10] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
144dde67f284da164ffe889ed0438f3d6457eda90f2Martyn James Russell  gint   i;
1450b74f03e70ea7cab8c0f9d58108a446e3cb16d1eJeff Garzik
146dde67f284da164ffe889ed0438f3d6457eda90f2Martyn James Russell  PRINT_MSG (("testing g_list_reverse()"));
1470b74f03e70ea7cab8c0f9d58108a446e3cb16d1eJeff Garzik
148dde67f284da164ffe889ed0438f3d6457eda90f2Martyn James Russell  for (i = 0; i < 10; i++) {
149dde67f284da164ffe889ed0438f3d6457eda90f2Martyn James Russell    list = g_list_append (list, &nums[i]);
150dde67f284da164ffe889ed0438f3d6457eda90f2Martyn James Russell  }
151dde67f284da164ffe889ed0438f3d6457eda90f2Martyn James Russell
152dde67f284da164ffe889ed0438f3d6457eda90f2Martyn James Russell  list = g_list_reverse (list);
153dde67f284da164ffe889ed0438f3d6457eda90f2Martyn James Russell
154dde67f284da164ffe889ed0438f3d6457eda90f2Martyn James Russell  for (i = 0; i < 10; i++) {
155dde67f284da164ffe889ed0438f3d6457eda90f2Martyn James Russell    st = g_list_nth (list, i);
156dde67f284da164ffe889ed0438f3d6457eda90f2Martyn James Russell    g_assert (*((gint*) st->data) == (9 - i));
157dde67f284da164ffe889ed0438f3d6457eda90f2Martyn James Russell  }
1580b74f03e70ea7cab8c0f9d58108a446e3cb16d1eJeff Garzik
1590b74f03e70ea7cab8c0f9d58108a446e3cb16d1eJeff Garzik  g_list_free (list);
160dde67f284da164ffe889ed0438f3d6457eda90f2Martyn James Russell}
1610b74f03e70ea7cab8c0f9d58108a446e3cb16d1eJeff Garzik
162dde67f284da164ffe889ed0438f3d6457eda90f2Martyn James Russellstatic void
163dde67f284da164ffe889ed0438f3d6457eda90f2Martyn James Russelltest_list_nth (void)
164dde67f284da164ffe889ed0438f3d6457eda90f2Martyn James Russell{
165dde67f284da164ffe889ed0438f3d6457eda90f2Martyn James Russell  GList *list = NULL;
166dde67f284da164ffe889ed0438f3d6457eda90f2Martyn James Russell  GList *st;
167dde67f284da164ffe889ed0438f3d6457eda90f2Martyn James Russell  gint   nums[10] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
168dde67f284da164ffe889ed0438f3d6457eda90f2Martyn James Russell  gint   i;
1690b74f03e70ea7cab8c0f9d58108a446e3cb16d1eJeff Garzik
170dde67f284da164ffe889ed0438f3d6457eda90f2Martyn James Russell  PRINT_MSG (("testing g_list_nth()"));
1710b74f03e70ea7cab8c0f9d58108a446e3cb16d1eJeff Garzik
172dde67f284da164ffe889ed0438f3d6457eda90f2Martyn James Russell  for (i = 0; i < 10; i++) {
173dde67f284da164ffe889ed0438f3d6457eda90f2Martyn James Russell    list = g_list_append (list, &nums[i]);
174dde67f284da164ffe889ed0438f3d6457eda90f2Martyn James Russell  }
1750b74f03e70ea7cab8c0f9d58108a446e3cb16d1eJeff Garzik
176dde67f284da164ffe889ed0438f3d6457eda90f2Martyn James Russell  for (i = 0; i < 10; i++) {
177dde67f284da164ffe889ed0438f3d6457eda90f2Martyn James Russell    st = g_list_nth (list, i);
178dde67f284da164ffe889ed0438f3d6457eda90f2Martyn James Russell    g_assert (*((gint*) st->data) == i);
179dde67f284da164ffe889ed0438f3d6457eda90f2Martyn James Russell  }
1800b74f03e70ea7cab8c0f9d58108a446e3cb16d1eJeff Garzik
1810b74f03e70ea7cab8c0f9d58108a446e3cb16d1eJeff Garzik  g_list_free (list);
182dde67f284da164ffe889ed0438f3d6457eda90f2Martyn James Russell}
183dde67f284da164ffe889ed0438f3d6457eda90f2Martyn James Russell
184dde67f284da164ffe889ed0438f3d6457eda90f2Martyn James Russellint
185dde67f284da164ffe889ed0438f3d6457eda90f2Martyn James Russellmain (int argc, char *argv[])
186dde67f284da164ffe889ed0438f3d6457eda90f2Martyn James Russell{
187dde67f284da164ffe889ed0438f3d6457eda90f2Martyn James Russell  gint i;
188dde67f284da164ffe889ed0438f3d6457eda90f2Martyn James Russell
189dde67f284da164ffe889ed0438f3d6457eda90f2Martyn James Russell  DEBUG_MSG (("debugging messages turned on"));
190dde67f284da164ffe889ed0438f3d6457eda90f2Martyn James Russell
191dde67f284da164ffe889ed0438f3d6457eda90f2Martyn James Russell  DEBUG_MSG (("creating %d random numbers", SIZE));
192dde67f284da164ffe889ed0438f3d6457eda90f2Martyn James Russell
193dde67f284da164ffe889ed0438f3d6457eda90f2Martyn James Russell  /* Create an array of random numbers. */
194dde67f284da164ffe889ed0438f3d6457eda90f2Martyn James Russell  for (i = 0; i < SIZE; i++) {
195dde67f284da164ffe889ed0438f3d6457eda90f2Martyn James Russell    array[i] = g_random_int_range (NUMBER_MIN, NUMBER_MAX);
196dde67f284da164ffe889ed0438f3d6457eda90f2Martyn James Russell    DEBUG_MSG (("number #%3.3d ---> %d", i, array[i]));
197dde67f284da164ffe889ed0438f3d6457eda90f2Martyn James Russell  }
198dde67f284da164ffe889ed0438f3d6457eda90f2Martyn James Russell
199dde67f284da164ffe889ed0438f3d6457eda90f2Martyn James Russell  /* Start tests. */
200dde67f284da164ffe889ed0438f3d6457eda90f2Martyn James Russell  test_list_sort ();
201dde67f284da164ffe889ed0438f3d6457eda90f2Martyn James Russell  test_list_sort_with_data ();
202dde67f284da164ffe889ed0438f3d6457eda90f2Martyn James Russell
203dde67f284da164ffe889ed0438f3d6457eda90f2Martyn James Russell  test_list_insert_sorted ();
204dde67f284da164ffe889ed0438f3d6457eda90f2Martyn James Russell  test_list_insert_sorted_with_data ();
205dde67f284da164ffe889ed0438f3d6457eda90f2Martyn James Russell
206dde67f284da164ffe889ed0438f3d6457eda90f2Martyn James Russell  test_list_reverse ();
207dde67f284da164ffe889ed0438f3d6457eda90f2Martyn James Russell  test_list_nth ();
208dde67f284da164ffe889ed0438f3d6457eda90f2Martyn James Russell
209dde67f284da164ffe889ed0438f3d6457eda90f2Martyn James Russell  PRINT_MSG (("testing finished"));
2100b74f03e70ea7cab8c0f9d58108a446e3cb16d1eJeff Garzik
2110b74f03e70ea7cab8c0f9d58108a446e3cb16d1eJeff Garzik  return 0;
2120b74f03e70ea7cab8c0f9d58108a446e3cb16d1eJeff Garzik}
213