home *** CD-ROM | disk | FTP | other *** search
/ Il CD di internet / CD.iso / SOURCE / CONTRIB / MBASE / MBASE50.TAR / mbase / sample / bench.c next >
Encoding:
C/C++ Source or Header  |  1992-10-25  |  2.5 KB  |  128 lines

  1. /*
  2.  * METALBASE 5.0
  3.  *
  4.  * Released October 1st, 1992 by Huan-Ti [ richid@owlnet.rice.edu ]
  5.  *                                       [ t-richj@microsoft.com ]
  6.  */
  7.  
  8. #include <mbase.h>
  9. #include "bench.h"             /* Created during "% build bench.s"  */
  10.  
  11. #define NUM 10 /* When building chart, each '.' == how many adds? */
  12.  
  13. #ifdef LONGARGS
  14.    void  main (int, char **);
  15. #else
  16.    void  main ();
  17. #endif
  18.  
  19. relation  *rel;
  20.  
  21. long   elaparr[79];
  22.  
  23. void
  24. main  (argc, argv)
  25. int    argc;
  26. char **argv;
  27. {
  28.    int     i, num, x, top;
  29.    long    sec;
  30.    mb_time start;
  31.  
  32. /*
  33.  * First, parse the command line, and set {num}.
  34.  *
  35.  */
  36.  
  37.    if (argc == 1)
  38.       num = 0;
  39.    else if (argc == 2)
  40.       num = (int)atoi (argv[1]);
  41.    else
  42.       {
  43.       fprintf (stderr, "format: bench [numberofadds]%s", SNGCR);
  44.       mb_exit (1);
  45.       }
  46.    if (num < 0)
  47.       {
  48.       fprintf (stderr, "You gotta add at least one record, idiot.%s", SNGCR);
  49.       mb_exit (1);
  50.       }
  51.  
  52. /*
  53.  * Great.  Now open the database and start it rolling...
  54.  *
  55.  */
  56.  
  57.    if ((rel = mb_inc ("bench", 0)) == RNULL)
  58.       {
  59.       fprintf (stderr, "%s.%s", mb_error, SNGCR);
  60.       mb_exit (2);
  61.       }
  62.  
  63.    start = curtime();
  64.  
  65.    if (num != 0)
  66.       {
  67.       printf ("Number of records: %ld%s", mb_num(rel), SNGCR);
  68.       printf ("Start time:        %s%s", fmt_time (start, 0), SNGCR);
  69.       }
  70.  
  71.    for (x = 0; x < 79; x++)
  72.       {
  73.       top = num ? num : NUM;
  74.       for (i = 0; i < top; i++)
  75.          {
  76.          if ((mb_add (rel, &bench_rec)) != MB_OKAY)
  77.             {
  78.             printf ("ADD FAILED: %s%s", mb_error, SNGCR);
  79.             mb_exit(3);
  80.             }
  81.          }
  82.       if (! num)
  83.          fprintf (stderr, ".");
  84.  
  85.       sec = elap_t (start);
  86.  
  87.       if (num != 0)  break;
  88.  
  89.       elaparr[x] = sec;
  90.       }
  91.  
  92. /*
  93.  * All done.  Print the tally.
  94.  *
  95.  */
  96.  
  97.    if (! num)  printf ("\n");
  98.    printf ("Number of records: %ld%s", mb_num (rel), SNGCR);
  99.    if (num)
  100.       {
  101.       printf ("End time:          %s%s", fmt_time (curtime(), 0), SNGCR);
  102.  
  103.       if (i != 0)
  104.          {
  105.          printf ("Seconds per add:   %.2lf%s", (double)sec/(double)i, SNGCR);
  106.          }
  107.       }
  108.    else if (elaparr[78] != 0)
  109.       {
  110.       printf ("Average seconds per add = %.2lf:\n",
  111.               ((double)elaparr[78]/(double)(NUM*79)));
  112.       for (x = 19; x >= 0; x--)
  113.          {
  114.          for (i = 0; i < 79; i++)
  115.             {
  116.             if ( ((elaparr[i] * 20) / elaparr[78]) >= x )
  117.                printf ("X");
  118.             else
  119.                printf (" ");
  120.             }
  121.          printf ("\n");
  122.          }
  123.       }
  124.  
  125.    mb_exit (0);
  126. }
  127.  
  128.