home *** CD-ROM | disk | FTP | other *** search
/ RISC DISC 1 / RISC_DISC_1.iso / pd_share / code / unixlib / !UnixLib / test / c / qtest < prev    next >
Encoding:
Text File  |  1994-03-08  |  1.5 KB  |  101 lines

  1. /* qtest.c - qsort() test program (c) Copyright 1990 H.Rogers */
  2.  
  3. #include <stdlib.h>
  4. #include <stdio.h>
  5. #include <time.h>
  6.  
  7. #define A_TYPE int
  8. #define A_SIZE 4096
  9.  
  10. static int
  11. c (const void *i1, const void *i2)
  12. {
  13.   return (*(A_TYPE *) i1 - *(A_TYPE *) i2);
  14. }
  15.  
  16. static clock_t
  17. qtest (A_TYPE * a)
  18. {
  19.   clock_t t;
  20.  
  21.   t = clock ();
  22.   qsort (a, A_SIZE, sizeof (A_TYPE), c);
  23.   t = clock () - t;
  24.  
  25.   return (t);
  26. }
  27.  
  28. static void
  29. qvrfy (A_TYPE * a)
  30. {
  31.   register int i, j;
  32.  
  33.   for (i = 0; i < A_SIZE - 1;)
  34.     {
  35.       j = a[i];
  36.       if (j > a[++i])
  37.     goto err;
  38.     }
  39.   return;
  40.  
  41. err:printf ("not sorted: &a[i] = %#x\ti = %d\n", &a[i], i);
  42.   exit (1);
  43. }
  44.  
  45. int
  46. main (int argc, char **argv)
  47. {
  48.   register A_TYPE *a;
  49.   register int i;
  50.   int n, j;
  51.   clock_t t;
  52.  
  53.   if (argc != 2)
  54.     {
  55.       puts ("usage: qtest ntest");
  56.       exit (1);
  57.     }
  58.  
  59.   n = atoi (argv[1]);
  60.  
  61.   if (!(a = malloc (sizeof (A_TYPE) * A_SIZE)))
  62.     {
  63.       perror ("qtest");
  64.       exit (1);
  65.     }
  66.  
  67.   srand (time (0));
  68.   t = 0;
  69.  
  70.   for (j = 0; j < n; j++)
  71.     {
  72.       clock_t q;
  73.  
  74.       for (i = 0; i < (A_SIZE >> 1); i++)
  75.     a[i] = (A_TYPE) rand () & 0xff;
  76.       for (; i < A_SIZE; i++)
  77.     a[i] = (A_TYPE) rand ();
  78.  
  79.       q = qtest (a);
  80.  
  81.       printf ("random data time: %d.%02d\n", q / 100, q % 100);
  82.  
  83.       qvrfy (a);
  84.  
  85.       t += q;
  86.     }
  87.  
  88.   t /= n;
  89.   printf ("average: %d.%02d\n", t / 100, t % 100);
  90.  
  91.   for (i = 0; i < A_SIZE; i++)
  92.     a[i] = 0;
  93.  
  94.   t = qtest (a);
  95.  
  96.   qvrfy (a);
  97.  
  98.   printf ("zero data time: %d.%02d\n", t / 100, t % 100);
  99.   return 0;
  100. }
  101.