.
[glibc/history.git] / stdlib / tst-qsort.c
blob2b26e74d0ba27bdd6ed08eee29bed9b96adf4707
1 /* Test case by Paul Eggert <eggert@twinsun.com> */
2 #include <stdio.h>
3 #include <stdlib.h>
4 #include <tst-stack-align.h>
6 struct big { char c[4 * 1024]; };
8 struct big *array;
9 struct big *array_end;
11 static int align_check;
13 int
14 compare (void const *a1, void const *b1)
16 struct big const *a = a1;
17 struct big const *b = b1;
19 if (!align_check)
20 align_check = TEST_STACK_ALIGN () ? -1 : 1;
22 if (! (array <= a && a < array_end
23 && array <= b && b < array_end))
25 exit (EXIT_FAILURE);
27 return b->c[0] - a->c[0];
30 int
31 main (int argc, char **argv)
33 size_t i;
34 size_t array_members = argv[1] ? atoi (argv[1]) : 50;
35 array = (struct big *) malloc (array_members * sizeof *array);
36 if (array == NULL)
38 puts ("no memory");
39 exit (EXIT_FAILURE);
42 array_end = array + array_members;
43 for (i = 0; i < array_members; i++)
44 array[i].c[0] = i % 128;
46 qsort (array, array_members, sizeof *array, compare);
48 if (align_check == -1)
50 puts ("stack not sufficiently aligned");
51 exit (EXIT_FAILURE);
54 return 0;