home *** CD-ROM | disk | FTP | other *** search
/ The C Users' Group Library 1994 August / wc-cdrom-cusersgrouplibrary-1994-08.iso / listings / v_11_11 / labrocca / test.c < prev    next >
C/C++ Source or Header  |  1993-05-22  |  3KB  |  100 lines

  1. /* TEST.C */
  2. /* Copyright 1993 by P. J. LaBrocca
  3.    All rights reserved.
  4. */
  5. /*
  6. **  Torture test for Dyn2dArray()
  7. **
  8. **      Creates and destroys many dynamic two-dimensional
  9. **      arrays. Displays memory usage (MS-DOS only).
  10. **
  11. **      Compiles with Microsoft C versions 6, 7 & 8 MS-DOS
  12. **      and Symantec THINK C 5 (Macintosh).
  13. */
  14. #include <stdio.h>
  15. #include <stdlib.h>
  16.  
  17. #if defined( _MSC_VER )
  18. #include <malloc.h>
  19. #endif
  20.  
  21. #include "dyn2darr.h"
  22.  
  23. struct S {
  24.     char c;
  25.     double dd;
  26. //    double xd[100];      /* force failure */
  27. };
  28.  
  29. void main( void )
  30. {
  31.     int i, j, k, l;
  32.     int high = 10; /* Increase to apply greater stress. */
  33.     int count = 0;
  34. //    double **d;
  35.     struct S **d;
  36.     struct S * **pd;
  37.     
  38.     for( i = 1; i < high; ++i ) {
  39.         for( j = high; j > 0; --j ) {
  40.  
  41. #if defined( _MSC_VER )
  42.             printf("memmax: %u ", _memmax() );
  43. #endif
  44. /* D2D array of structures */
  45.             d = (struct S **) Dyn2dArray( i, j, struct S );
  46.             if( d == NULL) {
  47.                 printf("\nOut of memory: i: %d j: %d\n",i,j );
  48.                 exit( 0 );
  49.             }
  50. /* D2D array of pointers-to-structures */
  51.             pd = (struct S * **) Dyn2dArray(i, j, struct S *);
  52.             if( pd == NULL) {
  53.                 printf("\n!!Out of memory: 2");
  54.                 exit( 0 );
  55.             }    
  56. //            d = Dyn2dArray( i, j, double );
  57.             printf("******** count : %d ::d[%d][%d]******",
  58.                     ++count, i, j );
  59. #if defined( _MSC_VER )
  60.             printf(" memmax: %u\n", _memmax() );
  61. #else
  62.             putchar('\n');
  63. #endif
  64.  
  65. /* Assign some values */
  66.             for( k = 0; k < i; ++k ) {
  67.                 for( l = 0; l < j; ++l  ) {
  68.                     d[k][l].dd = k + l;
  69.                 } /* for( l = 0; l < */
  70.             } /* for( k = 0; k < */
  71.  
  72. /* Assign addresses of structs to pointers-to-structs */
  73.             for( k = 0; k < i; ++k ) {
  74.                 for( l = 0; l < j; ++l  ) {
  75.                     pd[k][l] = &d[k][l];
  76.                 } /* for( l = 0; l < */
  77.             } /* for( k = 0; k < */
  78.  
  79. /* See if everything wound up where it was supposed to go. */
  80.             for( k = 0; k < i; ++k ) {
  81.                 for( l = 0; l < j; ++l  ) {
  82.                     if( k + l != pd[k][l]->dd )
  83.                         exit(0);
  84.                     printf( "%d %d %d %d : %f",
  85.                                 i, j, k, l, pd[k][l]->dd );
  86.                     printf( "  - r: %d -- c: %d\n",
  87.                                      Dyn2dRows( pd ),
  88.                                      Dyn2dCols( pd ) );
  89.                 } /* for( l = 0; l < */
  90.             } /* for( k = 0; k < */
  91.  
  92. /* Clean up D2D arrays in preparation for new ones. */
  93.             free( d );
  94.             free( pd );
  95.  
  96.         } /* for( j = high; j  */
  97.     } /* for( i = 0; i < */
  98. } /* main */
  99. /* End of File */
  100.