home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / magazine / pctech / 1988_02 / pentath.c < prev    next >
Text File  |  1983-08-03  |  3KB  |  163 lines

  1.  
  2. /*     Figure 1  -  Pentathlon program     */
  3.  
  4.  
  5. #include "stdio.h"
  6.  
  7. main()
  8.  {
  9.    int i , niter ;
  10.    int ibench ;
  11.  
  12.    printf("\n benchmark:\n");
  13.    scanf("%d",&ibench) ;
  14.  
  15.    printf("\n no. iterations:\n");
  16.    scanf("%d",&niter);
  17.  
  18.    for( i=1 ; i <= niter ; i=i+1 )
  19.       {
  20.         switch( ibench )
  21.           {
  22.           case 1 : bench1() ; break ;
  23.           case 2 : bench2() ; break ;
  24.           case 3 : bench3() ; break ;
  25.           case 4 : bench4() ; break ;
  26.           case 5 : bench5() ; break ;
  27.           case 6 : makefile() ; break ;
  28.           } ;
  29.       } ;
  30.    printf("\n thru\n");
  31.  }
  32.  
  33.  
  34. int bench1()      /* floating point arithmetic benchmark */
  35.  {
  36.     int i , j ;
  37.     float x[100] , y[100] , z ;
  38.  
  39.     for( i=0 ; i < 100 ; i=i+1 )
  40.        { x[i] = i+1 ;
  41.          y[i] = 3*i ;
  42.        } ;
  43.  
  44.     z=0 ;
  45.     for( j=0 ; j < 10 ; j=j+1 )
  46.        { 
  47.          for( i=0 ; i < 100 ; i=i+1 )
  48.             { z = z + x[i]*y[i] ; } ;
  49.        }
  50.  }
  51.  
  52.  
  53.  
  54. int bench2()            /* function calling benchmark */
  55.  {
  56.     int i ;
  57.  
  58.     for( i=0 ; i < 20000 ; i=i+1 )
  59.        { dummy(i) ; } ;
  60.  }
  61.  
  62. int dummy(i)
  63.  int i ;
  64.  {
  65.     return( i+1 ) ;
  66.  }
  67.  
  68.  
  69. int bench3()     /* string copy benchmark */
  70.  {
  71.     int i ;
  72.     char s[501] , s2[501] ;
  73.  
  74.     for(i=0 ; i < 500 ; i=i+1 )
  75.        { s[i] = 'a' ; } ;
  76.     s[500] = '\0' ;
  77.  
  78.     for( i=0 ; i < 100 ; i=i+1 )
  79.        { scopy(s2,s) ; } ;
  80.  }
  81.  
  82.          
  83. int scopy(to,from)     /* string copy function */
  84.  char *to ;         /* pointer to destination string */
  85.  char *from ;       /* pointer to source string */
  86.  {
  87.     while( (*to++ = *from++) != '\0' ) /* check for end of string */
  88.       { ; } ; /* copy one char and advance ptrs */
  89.  }
  90.  
  91. int bench4()    /* character count benchmark */
  92.  {
  93.     int i ;
  94.     char s[501] ;
  95.     int cnt[128] ;
  96.  
  97.     for(i=0 ; i < 500 ; i=i+1 )
  98.        { s[i] = i + 1 ; } ;
  99.     s[500] = '\0' ;
  100.  
  101.     for( i=0 ; i < 100 ; i=i+1 )
  102.        { count_chars(s,cnt) ; } ;
  103.  }
  104.  
  105. int count_chars(string,counts)
  106.  char string[] ;
  107.  int counts[] ;
  108.  {
  109.    register int i ;
  110.    register char c ;
  111.  
  112.    i=0 ;
  113.    c = string[i] ;
  114.    while( c != '\0' )
  115.      { counts[ c & 0x7f ] ++ ; 
  116.        i = i + 1 ;
  117.        c = string[i] ;
  118.      } ;
  119.  }
  120.  
  121.  
  122. int bench5()     /* file copy with getc/putc */
  123.  {
  124.     FILE  *in ,
  125.           *out ;
  126.     int c ;
  127.     long n ;
  128.  
  129.     in = fopen("a:test.in","r");
  130.     out = fopen("a:test.out","w");
  131.     if( (in == NULL) || (out ==NULL) )
  132.       { printf("can't open a file");
  133.         exit(0) ;
  134.       }
  135.     n=0;
  136.     c = getc(in) ;
  137.     while( c != EOF )
  138.       { n=n+1 ;
  139.         putc(c,out);
  140.         c = getc(in) ;
  141.       } ;
  142.     printf("\n %ld characters",n);
  143.     fclose(in);
  144.     fclose(out);
  145.  }
  146.  
  147.  
  148. int makefile()     /* create test file */
  149.  {
  150.     FILE  *out ;
  151.     long n ;
  152.  
  153.     out = fopen("a:test.in","w");
  154.     if( out ==NULL )
  155.       { printf("can't open test file");
  156.         exit(0) ;
  157.       }
  158.     n=0;
  159.     for( n=0 ; n < 30000 ; n=n+1 )
  160.       { putc('a',out) ; } ;
  161.     fclose(out);
  162.  }
  163.