Improve array test coverage
[platform/upstream/glib.git] / glib / tests / array-test.c
1 /* GLIB - Library of useful routines for C programming
2  * Copyright (C) 1995-1997  Peter Mattis, Spencer Kimball and Josh MacDonald
3  *
4  * This library is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU Lesser General Public
6  * License as published by the Free Software Foundation; either
7  * version 2 of the License, or (at your option) any later version.
8  *
9  * This library is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12  * Lesser General Public License for more details.
13  *
14  * You should have received a copy of the GNU Lesser General Public
15  * License along with this library; if not, write to the
16  * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
17  * Boston, MA 02111-1307, USA.
18  */
19
20 /*
21  * Modified by the GLib Team and others 1997-2000.  See the AUTHORS
22  * file for a list of people on the GLib Team.  See the ChangeLog
23  * files for a list of changes.  These files are distributed with
24  * GLib at ftp://ftp.gtk.org/pub/gtk/. 
25  */
26
27 #undef G_DISABLE_ASSERT
28 #undef G_LOG_DOMAIN
29
30 #include <stdio.h>
31 #include <stdlib.h>
32 #include <string.h>
33 #include "glib.h"
34
35 static void
36 sum_up (gpointer data,
37         gpointer user_data)
38 {
39   gint *sum = (gint *)user_data;
40
41   *sum += GPOINTER_TO_INT (data);
42 }
43
44 static void
45 array_append (void)
46 {
47   GArray *garray;
48   gint i;
49   gint *segment;
50
51   garray = g_array_new (FALSE, FALSE, sizeof (gint));
52   for (i = 0; i < 10000; i++)
53     g_array_append_val (garray, i);
54
55   for (i = 0; i < 10000; i++)
56     g_assert_cmpint (g_array_index (garray, gint, i), ==, i);
57
58   segment = (gint*)g_array_free (garray, FALSE);
59   for (i = 0; i < 10000; i++)
60     g_assert_cmpint (segment[i], ==, i);
61   g_free (segment);
62 }
63
64 static void
65 array_prepend (void)
66 {
67   GArray *garray;
68   gint i;
69
70   garray = g_array_new (FALSE, FALSE, sizeof (gint));
71   for (i = 0; i < 100; i++)
72     g_array_prepend_val (garray, i);
73
74   for (i = 0; i < 100; i++)
75     g_assert_cmpint (g_array_index (garray, gint, i), ==, (100 - i - 1));
76
77   g_array_free (garray, TRUE);
78 }
79
80 static void
81 array_remove (void)
82 {
83   GArray *garray;
84   gint i;
85   gint prev, cur;
86
87   garray = g_array_new (FALSE, FALSE, sizeof (gint));
88   for (i = 0; i < 100; i++)
89     g_array_append_val (garray, i);
90
91   g_assert_cmpint (garray->len, ==, 100);
92
93   g_array_remove_index (garray, 1);
94   g_array_remove_index (garray, 3);
95   g_array_remove_index (garray, 21);
96   g_array_remove_index (garray, 57);
97
98   g_assert_cmpint (garray->len, ==, 96);
99
100   prev = -1;
101   for (i = 0; i < garray->len; i++)
102     {
103       cur = g_array_index (garray, gint, i);
104       g_assert (cur != 1 &&  cur != 4 && cur != 23 && cur != 60);
105       g_assert_cmpint (prev, <, cur);
106       prev = cur;
107     }
108
109   g_array_free (garray, TRUE);
110 }
111
112 static void
113 array_remove_fast (void)
114 {
115   GArray *garray;
116   gint i;
117   gint prev, cur;
118
119   garray = g_array_new (FALSE, FALSE, sizeof (gint));
120   for (i = 0; i < 100; i++)
121     g_array_append_val (garray, i);
122
123   g_assert_cmpint (garray->len, ==, 100);
124
125   g_array_remove_index_fast (garray, 1);
126   g_array_remove_index_fast (garray, 3);
127   g_array_remove_index_fast (garray, 21);
128   g_array_remove_index_fast (garray, 57);
129
130   g_assert_cmpint (garray->len, ==, 96);
131
132   prev = -1;
133   for (i = 0; i < garray->len; i++)
134     {
135       cur = g_array_index (garray, gint, i);
136       g_assert (cur != 1 &&  cur != 3 && cur != 21 && cur != 57);
137       if (cur < 96)
138         {
139           g_assert_cmpint (prev, <, cur);
140           prev = cur;
141         }
142     }
143
144   g_array_free (garray, TRUE);
145 }
146
147 static void
148 array_remove_range (void)
149 {
150   GArray *garray;
151   gint i;
152   gint prev, cur;
153
154   garray = g_array_new (FALSE, FALSE, sizeof (gint));
155   for (i = 0; i < 100; i++)
156     g_array_append_val (garray, i);
157
158   g_assert_cmpint (garray->len, ==, 100);
159
160   g_array_remove_range (garray, 31, 4);
161
162   g_assert_cmpint (garray->len, ==, 96);
163
164   prev = -1;
165   for (i = 0; i < garray->len; i++)
166     {
167       cur = g_array_index (garray, gint, i);
168       g_assert (cur < 31 || cur > 34);
169       g_assert_cmpint (prev, <, cur);
170       prev = cur;
171     }
172
173   g_array_free (garray, TRUE);
174 }
175
176 static void
177 array_ref_count (void)
178 {
179   GArray *garray;
180   GArray *garray2;
181   gint i;
182
183   garray = g_array_new (FALSE, FALSE, sizeof (gint));
184   g_assert_cmpint (g_array_get_element_size (garray), ==, sizeof (gint));
185   for (i = 0; i < 100; i++)
186     g_array_prepend_val (garray, i);
187
188   /* check we can ref, unref and still access the array */
189   garray2 = g_array_ref (garray);
190   g_assert (garray == garray2);
191   g_array_unref (garray2);
192   for (i = 0; i < 100; i++)
193     g_assert_cmpint (g_array_index (garray, gint, i), ==, (100 - i - 1));
194
195   /* garray2 should be an empty valid GArray wrapper */
196   garray2 = g_array_ref (garray);
197   g_array_free (garray, TRUE);
198
199   g_assert_cmpint (garray2->len, ==, 0);
200   g_array_unref (garray2);
201 }
202
203 static gpointer
204 array_large_size_remalloc_impl (gpointer mem,
205                                 gsize n_bytes)
206 {
207   /* We only care that g_array_set_size() doesn't hang; we'll never
208    * actually use any of the 2G of memory that it requests, so it's
209    * OK that we don't actually allocate the whole thing.
210    */
211   return realloc (mem, MIN (n_bytes, 1024 * 1024));
212 }
213
214 static GMemVTable array_large_size_mem_vtable = {
215   malloc, array_large_size_remalloc_impl, free,
216   NULL, NULL, NULL
217 };
218
219 static void
220 array_large_size (void)
221 {
222   GArray* array;
223
224   g_test_bug ("568760");
225
226   array = g_array_new (FALSE, FALSE, sizeof (char));
227
228   if (g_test_trap_fork (5 /* s */ * 1000 /* ms */ * 1000 /* µs */, 0))
229     {
230       g_mem_set_vtable (&array_large_size_mem_vtable);
231       g_array_set_size (array, 1073750016);
232       exit (0); /* success */
233     }
234   g_test_trap_assert_passed ();
235
236   g_array_free (array, TRUE);
237 }
238
239 static int
240 int_compare (gconstpointer p1, gconstpointer p2)
241 {
242   const gint *i1 = p1;
243   const gint *i2 = p2;
244
245   return *i1 - *i2;
246 }
247
248 static int
249 int_compare_data (gconstpointer p1, gconstpointer p2, gpointer data)
250 {
251   const gint *i1 = p1;
252   const gint *i2 = p2;
253
254   return *i1 - *i2;
255 }
256 static void
257 array_sort (void)
258 {
259   GArray *garray;
260   gint i;
261   gint prev, cur;
262
263   garray = g_array_new (FALSE, FALSE, sizeof (gint));
264   for (i = 0; i < 10000; i++)
265     {
266       cur = g_random_int_range (0, 10000);
267       g_array_append_val (garray, cur);
268     }
269   g_array_sort (garray,  int_compare);
270
271   prev = -1;
272   for (i = 0; i < garray->len; i++)
273     {
274       cur = g_array_index (garray, gint, i);
275       g_assert_cmpint (prev, <=, cur);
276       prev = cur;
277     }
278
279   g_array_free (garray, TRUE);
280 }
281
282 static void
283 array_sort_with_data (void)
284 {
285   GArray *garray;
286   gint i;
287   gint prev, cur;
288
289   garray = g_array_new (FALSE, FALSE, sizeof (gint));
290   for (i = 0; i < 10000; i++)
291     {
292       cur = g_random_int_range (0, 10000);
293       g_array_append_val (garray, cur);
294     }
295   g_array_sort_with_data (garray, int_compare_data, NULL);
296
297   prev = -1;
298   for (i = 0; i < garray->len; i++)
299     {
300       cur = g_array_index (garray, gint, i);
301       g_assert_cmpint (prev, <=, cur);
302       prev = cur;
303     }
304
305   g_array_free (garray, TRUE);
306 }
307
308 static void
309 pointer_array_add (void)
310 {
311   GPtrArray *gparray;
312   gint i;
313   gint sum = 0;
314   gpointer *segment;
315
316   gparray = g_ptr_array_sized_new (1000);
317   for (i = 0; i < 10000; i++)
318     g_ptr_array_add (gparray, GINT_TO_POINTER (i));
319
320   for (i = 0; i < 10000; i++)
321     g_assert (g_ptr_array_index (gparray, i) == GINT_TO_POINTER (i));
322   
323   g_ptr_array_foreach (gparray, sum_up, &sum);
324   g_assert (sum == 49995000);
325
326   segment = g_ptr_array_free (gparray, FALSE);
327   for (i = 0; i < 10000; i++)
328     g_assert (segment[i] == GINT_TO_POINTER (i));
329   g_free (segment);
330 }
331
332 static void
333 pointer_array_ref_count (void)
334 {
335   GPtrArray *gparray;
336   GPtrArray *gparray2;
337   gint i;
338   gint sum = 0;
339
340   gparray = g_ptr_array_new ();
341   for (i = 0; i < 10000; i++)
342     g_ptr_array_add (gparray, GINT_TO_POINTER (i));
343
344   /* check we can ref, unref and still access the array */
345   gparray2 = g_ptr_array_ref (gparray);
346   g_assert (gparray == gparray2);
347   g_ptr_array_unref (gparray2);
348   for (i = 0; i < 10000; i++)
349     g_assert (g_ptr_array_index (gparray, i) == GINT_TO_POINTER (i));
350
351   g_ptr_array_foreach (gparray, sum_up, &sum);
352   g_assert (sum == 49995000);
353
354   /* gparray2 should be an empty valid GPtrArray wrapper */
355   gparray2 = g_ptr_array_ref (gparray);
356   g_ptr_array_free (gparray, TRUE);
357
358   g_assert_cmpint (gparray2->len, ==, 0);
359   g_ptr_array_unref (gparray2);
360 }
361
362 static gint num_free_func_invocations = 0;
363
364 static void
365 my_free_func (gpointer data)
366 {
367   num_free_func_invocations++;
368   g_free (data);
369 }
370
371 static void
372 pointer_array_free_func (void)
373 {
374   GPtrArray *gparray;
375   GPtrArray *gparray2;
376   gchar **strv;
377   gchar *s;
378
379   num_free_func_invocations = 0;
380   gparray = g_ptr_array_new_with_free_func (my_free_func);
381   g_ptr_array_unref (gparray);
382   g_assert_cmpint (num_free_func_invocations, ==, 0);
383
384   gparray = g_ptr_array_new_with_free_func (my_free_func);
385   g_ptr_array_free (gparray, TRUE);
386   g_assert_cmpint (num_free_func_invocations, ==, 0);
387
388   num_free_func_invocations = 0;
389   gparray = g_ptr_array_new_with_free_func (my_free_func);
390   g_ptr_array_add (gparray, g_strdup ("foo"));
391   g_ptr_array_add (gparray, g_strdup ("bar"));
392   g_ptr_array_add (gparray, g_strdup ("baz"));
393   g_ptr_array_remove_index (gparray, 0);
394   g_assert_cmpint (num_free_func_invocations, ==, 1);
395   s = g_strdup ("frob");
396   g_ptr_array_add (gparray, s);
397   g_assert (g_ptr_array_remove (gparray, s));
398   g_assert_cmpint (num_free_func_invocations, ==, 2);
399   g_ptr_array_set_size (gparray, 1);
400   g_assert_cmpint (num_free_func_invocations, ==, 3);
401   g_ptr_array_ref (gparray);
402   g_ptr_array_unref (gparray);
403   g_assert_cmpint (num_free_func_invocations, ==, 3);
404   g_ptr_array_unref (gparray);
405   g_assert_cmpint (num_free_func_invocations, ==, 4);
406
407   num_free_func_invocations = 0;
408   gparray = g_ptr_array_new_with_free_func (my_free_func);
409   g_ptr_array_add (gparray, g_strdup ("foo"));
410   g_ptr_array_add (gparray, g_strdup ("bar"));
411   g_ptr_array_add (gparray, g_strdup ("baz"));
412   g_ptr_array_add (gparray, NULL);
413   gparray2 = g_ptr_array_ref (gparray);
414   strv = (gchar **) g_ptr_array_free (gparray, FALSE);
415   g_assert_cmpint (num_free_func_invocations, ==, 0);
416   g_strfreev (strv);
417   g_ptr_array_unref (gparray2);
418   g_assert_cmpint (num_free_func_invocations, ==, 0);
419
420   num_free_func_invocations = 0;
421   gparray = g_ptr_array_new_with_free_func (my_free_func);
422   g_ptr_array_add (gparray, g_strdup ("foo"));
423   g_ptr_array_add (gparray, g_strdup ("bar"));
424   g_ptr_array_add (gparray, g_strdup ("baz"));
425   g_ptr_array_unref (gparray);
426   g_assert_cmpint (num_free_func_invocations, ==, 3);
427
428   num_free_func_invocations = 0;
429   gparray = g_ptr_array_new_with_free_func (my_free_func);
430   g_ptr_array_add (gparray, g_strdup ("foo"));
431   g_ptr_array_add (gparray, g_strdup ("bar"));
432   g_ptr_array_add (gparray, g_strdup ("baz"));
433   g_ptr_array_free (gparray, TRUE);
434   g_assert_cmpint (num_free_func_invocations, ==, 3);
435
436   num_free_func_invocations = 0;
437   gparray = g_ptr_array_new_with_free_func (my_free_func);
438   g_ptr_array_add (gparray, "foo");
439   g_ptr_array_add (gparray, "bar");
440   g_ptr_array_add (gparray, "baz");
441   g_ptr_array_set_free_func (gparray, NULL);
442   g_ptr_array_free (gparray, TRUE);
443   g_assert_cmpint (num_free_func_invocations, ==, 0);
444 }
445
446 static gint
447 ptr_compare (gconstpointer p1, gconstpointer p2)
448 {
449   gpointer i1 = *(gpointer*)p1;
450   gpointer i2 = *(gpointer*)p2;
451
452   return GPOINTER_TO_INT (i1) - GPOINTER_TO_INT (i2);
453 }
454
455 static gint
456 ptr_compare_data (gconstpointer p1, gconstpointer p2, gpointer data)
457 {
458   gpointer i1 = *(gpointer*)p1;
459   gpointer i2 = *(gpointer*)p2;
460
461   return GPOINTER_TO_INT (i1) - GPOINTER_TO_INT (i2);
462 }
463
464 static void
465 pointer_array_sort (void)
466 {
467   GPtrArray *gparray;
468   gint i;
469   gint val;
470   gint prev, cur;
471
472   gparray = g_ptr_array_new ();
473   for (i = 0; i < 10000; i++)
474     {
475       val = g_random_int_range (0, 10000);
476       g_ptr_array_add (gparray, GINT_TO_POINTER (val));
477     }
478
479   g_ptr_array_sort (gparray, ptr_compare);
480
481   prev = -1;
482   for (i = 0; i < 10000; i++)
483     {
484       cur = GPOINTER_TO_INT (g_ptr_array_index (gparray, i));
485       g_assert_cmpint (prev, <=, cur);
486       prev = cur;
487     }
488
489   g_ptr_array_free (gparray, TRUE);
490 }
491
492 static void
493 pointer_array_sort_with_data (void)
494 {
495   GPtrArray *gparray;
496   gint i;
497   gint prev, cur;
498
499   gparray = g_ptr_array_new ();
500   for (i = 0; i < 10000; i++)
501     g_ptr_array_add (gparray, GINT_TO_POINTER (g_random_int_range (0, 10000)));
502
503   g_ptr_array_sort_with_data (gparray, ptr_compare_data, NULL);
504
505   prev = -1;
506   for (i = 0; i < 10000; i++)
507     {
508       cur = GPOINTER_TO_INT (g_ptr_array_index (gparray, i));
509       g_assert_cmpint (prev, <=, cur);
510       prev = cur;
511     }
512
513   g_ptr_array_free (gparray, TRUE);
514 }
515
516 static void
517 byte_array_append (void)
518 {
519   GByteArray *gbarray;
520   gint i;
521   guint8 *segment;
522
523   gbarray = g_byte_array_sized_new (1000);
524   for (i = 0; i < 10000; i++)
525     g_byte_array_append (gbarray, (guint8*) "abcd", 4);
526
527   for (i = 0; i < 10000; i++)
528     {
529       g_assert (gbarray->data[4*i] == 'a');
530       g_assert (gbarray->data[4*i+1] == 'b');
531       g_assert (gbarray->data[4*i+2] == 'c');
532       g_assert (gbarray->data[4*i+3] == 'd');
533     }
534
535   segment = g_byte_array_free (gbarray, FALSE);
536
537   for (i = 0; i < 10000; i++)
538     {
539       g_assert (segment[4*i] == 'a');
540       g_assert (segment[4*i+1] == 'b');
541       g_assert (segment[4*i+2] == 'c');
542       g_assert (segment[4*i+3] == 'd');
543     }
544
545   g_free (segment);
546 }
547
548 static void
549 byte_array_prepend (void)
550 {
551   GByteArray *gbarray;
552   gint i;
553
554   gbarray = g_byte_array_new ();
555   for (i = 0; i < 10000; i++)
556     g_byte_array_prepend (gbarray, (guint8*) "abcd", 4);
557
558   for (i = 0; i < 10000; i++)
559     {
560       g_assert (gbarray->data[4*i] == 'a');
561       g_assert (gbarray->data[4*i+1] == 'b');
562       g_assert (gbarray->data[4*i+2] == 'c');
563       g_assert (gbarray->data[4*i+3] == 'd');
564     }
565
566   g_byte_array_free (gbarray, TRUE);
567 }
568
569 static void
570 byte_array_ref_count (void)
571 {
572   GByteArray *gbarray;
573   GByteArray *gbarray2;
574   gint i;
575
576   gbarray = g_byte_array_new ();
577   for (i = 0; i < 10000; i++)
578     g_byte_array_append (gbarray, (guint8*) "abcd", 4);
579
580   gbarray2 = g_byte_array_ref (gbarray);
581   g_assert (gbarray2 == gbarray);
582   g_byte_array_unref (gbarray2);
583   for (i = 0; i < 10000; i++)
584     {
585       g_assert (gbarray->data[4*i] == 'a');
586       g_assert (gbarray->data[4*i+1] == 'b');
587       g_assert (gbarray->data[4*i+2] == 'c');
588       g_assert (gbarray->data[4*i+3] == 'd');
589     }
590
591   gbarray2 = g_byte_array_ref (gbarray);
592   g_assert (gbarray2 == gbarray);
593   g_byte_array_free (gbarray, TRUE);
594   g_assert_cmpint (gbarray2->len, ==, 0);
595   g_byte_array_unref (gbarray2);
596 }
597
598 static void
599 byte_array_remove (void)
600 {
601   GByteArray *gbarray;
602   gint i;
603
604   gbarray = g_byte_array_new ();
605   for (i = 0; i < 100; i++)
606     g_byte_array_append (gbarray, (guint8*) "abcd", 4);
607
608   g_assert_cmpint (gbarray->len, ==, 400);
609
610   g_byte_array_remove_index (gbarray, 4);
611   g_byte_array_remove_index (gbarray, 4);
612   g_byte_array_remove_index (gbarray, 4);
613   g_byte_array_remove_index (gbarray, 4);
614
615   g_assert_cmpint (gbarray->len, ==, 396);
616
617   for (i = 0; i < 99; i++)
618     {
619       g_assert (gbarray->data[4*i] == 'a');
620       g_assert (gbarray->data[4*i+1] == 'b');
621       g_assert (gbarray->data[4*i+2] == 'c');
622       g_assert (gbarray->data[4*i+3] == 'd');
623     }
624
625   g_byte_array_free (gbarray, TRUE);
626 }
627
628 static void
629 byte_array_remove_fast (void)
630 {
631   GByteArray *gbarray;
632   gint i;
633
634   gbarray = g_byte_array_new ();
635   for (i = 0; i < 100; i++)
636     g_byte_array_append (gbarray, (guint8*) "abcd", 4);
637
638   g_assert_cmpint (gbarray->len, ==, 400);
639
640   g_byte_array_remove_index_fast (gbarray, 4);
641   g_byte_array_remove_index_fast (gbarray, 4);
642   g_byte_array_remove_index_fast (gbarray, 4);
643   g_byte_array_remove_index_fast (gbarray, 4);
644
645   g_assert_cmpint (gbarray->len, ==, 396);
646
647   for (i = 0; i < 99; i++)
648     {
649       g_assert (gbarray->data[4*i] == 'a');
650       g_assert (gbarray->data[4*i+1] == 'b');
651       g_assert (gbarray->data[4*i+2] == 'c');
652       g_assert (gbarray->data[4*i+3] == 'd');
653     }
654
655   g_byte_array_free (gbarray, TRUE);
656 }
657
658 static void
659 byte_array_remove_range (void)
660 {
661   GByteArray *gbarray;
662   gint i;
663
664   gbarray = g_byte_array_new ();
665   for (i = 0; i < 100; i++)
666     g_byte_array_append (gbarray, (guint8*) "abcd", 4);
667
668   g_assert_cmpint (gbarray->len, ==, 400);
669
670   g_byte_array_remove_range (gbarray, 12, 4);
671
672   g_assert_cmpint (gbarray->len, ==, 396);
673
674   for (i = 0; i < 99; i++)
675     {
676       g_assert (gbarray->data[4*i] == 'a');
677       g_assert (gbarray->data[4*i+1] == 'b');
678       g_assert (gbarray->data[4*i+2] == 'c');
679       g_assert (gbarray->data[4*i+3] == 'd');
680     }
681
682   g_byte_array_free (gbarray, TRUE);
683 }
684
685 static int
686 byte_compare (gconstpointer p1, gconstpointer p2)
687 {
688   const guint8 *i1 = p1;
689   const guint8 *i2 = p2;
690
691   return *i1 - *i2;
692 }
693
694 static int
695 byte_compare_data (gconstpointer p1, gconstpointer p2, gpointer data)
696 {
697   const guint8 *i1 = p1;
698   const guint8 *i2 = p2;
699
700   return *i1 - *i2;
701 }
702
703 static void
704 byte_array_sort (void)
705 {
706   GByteArray *gbarray;
707   gint i;
708   guint8 val;
709   guint8 prev, cur;
710
711   gbarray = g_byte_array_new ();
712   for (i = 0; i < 100; i++)
713     {
714       val = 'a' + g_random_int_range (0, 26);
715       g_byte_array_append (gbarray, (guint8*) &val, 1);
716     }
717
718   g_byte_array_sort (gbarray, byte_compare);
719
720   prev = 'a';
721   for (i = 0; i < gbarray->len; i++)
722     {
723       cur = gbarray->data[i];
724       g_assert_cmpint (prev, <=, cur);
725       prev = cur;
726     }
727
728   g_byte_array_free (gbarray, TRUE);
729 }
730
731 static void
732 byte_array_sort_with_data (void)
733 {
734   GByteArray *gbarray;
735   gint i;
736   guint8 val;
737   guint8 prev, cur;
738
739   gbarray = g_byte_array_new ();
740   for (i = 0; i < 100; i++)
741     {
742       val = 'a' + g_random_int_range (0, 26);
743       g_byte_array_append (gbarray, (guint8*) &val, 1);
744     }
745
746   g_byte_array_sort_with_data (gbarray, byte_compare_data, NULL);
747
748   prev = 'a';
749   for (i = 0; i < gbarray->len; i++)
750     {
751       cur = gbarray->data[i];
752       g_assert_cmpint (prev, <=, cur);
753       prev = cur;
754     }
755
756   g_byte_array_free (gbarray, TRUE);
757 }
758
759 int
760 main (int argc, char *argv[])
761 {
762   g_test_init (&argc, &argv, NULL);
763
764   g_test_bug_base ("http://bugs.gnome.org/%s");
765
766   /* array tests */
767   g_test_add_func ("/array/append", array_append);
768   g_test_add_func ("/array/prepend", array_prepend);
769   g_test_add_func ("/array/remove", array_remove);
770   g_test_add_func ("/array/remove-fast", array_remove_fast);
771   g_test_add_func ("/array/remove-range", array_remove_range);
772   g_test_add_func ("/array/ref-count", array_ref_count);
773   g_test_add_func ("/array/large-size", array_large_size);
774   g_test_add_func ("/array/sort", array_sort);
775   g_test_add_func ("/array/sort-with-data", array_sort_with_data);
776
777   /* pointer arrays */
778   g_test_add_func ("/pointerarray/add", pointer_array_add);
779   g_test_add_func ("/pointerarray/ref-count", pointer_array_ref_count);
780   g_test_add_func ("/pointerarray/free-func", pointer_array_free_func);
781   g_test_add_func ("/pointerarray/sort", pointer_array_sort);
782   g_test_add_func ("/pointerarray/sort-with-data", pointer_array_sort_with_data);
783
784   /* byte arrays */
785   g_test_add_func ("/bytearray/append", byte_array_append);
786   g_test_add_func ("/bytearray/prepend", byte_array_prepend);
787   g_test_add_func ("/bytearray/remove", byte_array_remove);
788   g_test_add_func ("/bytearray/remove-fast", byte_array_remove_fast);
789   g_test_add_func ("/bytearray/remove-range", byte_array_remove_range);
790   g_test_add_func ("/bytearray/ref-count", byte_array_ref_count);
791   g_test_add_func ("/bytearray/sort", byte_array_sort);
792   g_test_add_func ("/bytearray/sort-with-data", byte_array_sort_with_data);
793
794   return g_test_run ();
795 }
796