Home | History | Annotate | Download | only in tests
      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
     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
     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
     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
     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
    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
    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
    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
    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