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