diglib/test.c

Go to the documentation of this file.
00001 /*
00002 * $Id: test.c,v 1.8 2006/02/09 03:08:58 glynn Exp $
00003 *
00004 ****************************************************************************
00005 *
00006 * MODULE:       Vector library 
00007 *               
00008 * AUTHOR(S):    Original author CERL, probably Dave Gerdes.
00009 *               Update to GRASS 5.7 Radim Blazek.
00010 *
00011 * PURPOSE:      Lower level functions for reading/writing/manipulating vectors.
00012 *
00013 * COPYRIGHT:    (C) 2001 by the GRASS Development Team
00014 *
00015 *               This program is free software under the GNU General Public
00016 *               License (>=v2). Read the file COPYING that comes with GRASS
00017 *               for details.
00018 *
00019 *****************************************************************************/
00020 #include <stdio.h>
00021 #include <grass/Vect.h>
00022 
00023 /* Test portable r/w functions */
00024 
00025 #define D_TEST 1.3333
00026 #define L_TEST 123456789
00027 #define S_TEST 12345
00028 #define C_TEST 123
00029 
00030 int 
00031 main (int argc, char **argv)
00032 {
00033   int   i, j;
00034   int   err = 0;
00035   int   byte_order;
00036   struct Port_info port;
00037   GVFILE  fp;
00038   
00039   double db, td[] = { -(PORT_DOUBLE_MAX), -(D_TEST), -(PORT_DOUBLE_MIN),
00040                      0, PORT_DOUBLE_MIN,    D_TEST,   PORT_DOUBLE_MAX }; 
00041   float fb, tf[]  = { -(PORT_FLOAT_MAX),  -(D_TEST), -(PORT_FLOAT_MIN),
00042                      0, PORT_FLOAT_MIN,     D_TEST,    PORT_FLOAT_MAX }; 
00043   long  lb, tl[]  = {   PORT_LONG_MIN,  -(L_TEST), 0, L_TEST, PORT_LONG_MAX  };
00044   int   ib, ti[]  = {   PORT_INT_MIN,   -(L_TEST), 0, L_TEST, PORT_INT_MAX   };
00045   short sb, ts[]  = {   PORT_SHORT_MIN, -(S_TEST), 0, S_TEST, PORT_SHORT_MAX };
00046   char  cb, tc[]  = {   PORT_CHAR_MIN,  -(C_TEST), 0, C_TEST, PORT_CHAR_MAX  };
00047                     
00048 
00049     if (NULL == (fp.file = fopen ("test.tmp", "wb+")))
00050       { 
00051         fprintf (stderr, "ERROR, cannot open test.tmp file.\n");
00052         return (1);
00053       }  
00054     fp.loaded = 0;
00055 
00056     dig_set_cur_port (&port);
00057       
00058     byte_order = ENDIAN_LITTLE;
00059     for ( i = 0; i < 2; i++ )
00060       {
00061         dig_init_portable ( &(port), byte_order );
00062         for (j=0; j < 7; j++)
00063           {
00064             fprintf (fp.file, "double  ");        
00065             dig__fwrite_port_D ( &(td[j]), 1, &fp);
00066             dig_fseek (&fp, -(PORT_DOUBLE), SEEK_CUR);
00067             dig__fread_port_D (&db, 1, &fp);
00068             dig_fflush(&fp);
00069             if ( db != td[j] )
00070               {
00071                 fprintf (stderr, "ERROR in read/write portable double, byte_order = %d\n", byte_order);
00072                 fprintf (stderr, "  Written: %.16e3E\n  Read   : %.16e3E\n", td[j], db);
00073                 err = 1;
00074               }
00075           }    
00076         for (j=0; j < 7; j++)
00077           {
00078             fprintf (fp.file, "float       ");    
00079             dig__fwrite_port_F ( &(tf[j]), 1, &fp);
00080             dig_fseek (&fp, -(PORT_FLOAT), SEEK_CUR);
00081             dig__fread_port_F (&fb, 1, &fp);
00082             dig_fflush(&fp);
00083             if ( fb != tf[j] )
00084               {
00085                 fprintf (stderr, "ERROR in read/write portable float, byte_order = %d\n", byte_order);
00086                 fprintf (stderr, "  Written: %.8e3E\n  Read   : %.8e3E\n", tf[j], fb);
00087                 err = 1;
00088               }
00089           }
00090 
00091         for (j=0; j < 5; j++)
00092           {
00093             fprintf (fp.file, "long        ");    
00094             dig__fwrite_port_L ( &(tl[j]), 1, &fp);
00095             dig_fseek (&fp, -(PORT_LONG), SEEK_CUR);
00096             dig__fread_port_L (&lb, 1, &fp);
00097             dig_fflush(&fp);
00098             if ( lb != tl[j] )
00099               {
00100                 fprintf (stderr, "ERROR in read/write portable long, byte_order = %d\n", byte_order);
00101                 fprintf (stderr, "  Written: %ld\n  Read   : %ld\n", tl[j], lb);
00102                 err = 1;
00103               }
00104           }
00105             
00106         for (j=0; j < 5; j++)
00107           {
00108             fprintf (fp.file, "int         ");    
00109             dig__fwrite_port_I ( &(ti[j]), 1, &fp);
00110             dig_fseek (&fp, -(PORT_INT), SEEK_CUR);
00111             dig__fread_port_I (&ib, 1, &fp);
00112             dig_fflush(&fp);
00113             if ( ib != ti[j] )
00114               {
00115                 fprintf (stderr, "ERROR in read/write portable int, byte_order = %d\n", byte_order);
00116                 fprintf (stderr, "  Written: %d\n  Read   : %d\n", ti[j], ib);
00117                 err = 1;
00118               }
00119           }
00120             
00121         for (j=0; j < 5; j++)
00122           {
00123             fprintf (fp.file, "short         ");          
00124             dig__fwrite_port_S ( &(ts[j]), 1, &fp);
00125             dig_fseek (&fp, -(PORT_SHORT), SEEK_CUR);
00126             dig__fread_port_S (&sb, 1, &fp);
00127             dig_fflush(&fp);
00128             if ( sb != ts[j] )
00129               {
00130                 fprintf (stderr, "ERROR in read/write portable short, byte_order = %d\n", byte_order);
00131                 fprintf (stderr, "  Written: %d\n  Read   : %d\n", ts[j], sb);
00132                 err = 1;
00133               }
00134           }
00135         for (j=0; j < 5; j++)
00136           {
00137             fprintf (fp.file, "char           ");         
00138             dig__fwrite_port_C ( &(tc[j]), 1, &fp);
00139             dig_fseek (&fp, -(PORT_CHAR), SEEK_CUR);
00140             dig__fread_port_C (&cb, 1, &fp);
00141             dig_fflush(&fp);
00142             if ( cb != tc[j] )
00143               {
00144                 fprintf (stderr, "ERROR in read/write portable char, byte_order = %d\n", byte_order);
00145                 fprintf (stderr, "  Written: %d\n  Read   : %d\n", tc[j], cb);
00146                 err = 1;
00147               }
00148 
00149             
00150           }  
00151         byte_order = ENDIAN_BIG;
00152       }   
00153 
00154   fclose ( fp.file );
00155       
00156   return ( err );
00157 }
00158 
00159 

Generated on Sun Apr 6 17:32:44 2008 for GRASS by  doxygen 1.5.5