tst-qsort.c 1.1 KB

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