test.c 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164
  1. /*
  2. ****************************************************************************
  3. *
  4. * MODULE: Vector library
  5. *
  6. * AUTHOR(S): Original author CERL, probably Dave Gerdes.
  7. * Update to GRASS 5.7 Radim Blazek.
  8. *
  9. * PURPOSE: Lower level functions for reading/writing/manipulating vectors.
  10. *
  11. * COPYRIGHT: (C) 2001 by the GRASS Development Team
  12. *
  13. * This program is free software under the GNU General Public
  14. * License (>=v2). Read the file COPYING that comes with GRASS
  15. * for details.
  16. *
  17. *****************************************************************************/
  18. #include <stdio.h>
  19. #include <grass/Vect.h>
  20. /* Test portable r/w functions */
  21. #define D_TEST 1.3333
  22. #define L_TEST 123456789
  23. #define S_TEST 12345
  24. #define C_TEST 123
  25. int
  26. main (int argc, char **argv)
  27. {
  28. int i, j;
  29. int err = 0;
  30. int byte_order;
  31. struct Port_info port;
  32. GVFILE fp;
  33. double db, td[] = { -(PORT_DOUBLE_MAX), -(D_TEST), -(PORT_DOUBLE_MIN),
  34. 0, PORT_DOUBLE_MIN, D_TEST, PORT_DOUBLE_MAX };
  35. float fb, tf[] = { -(PORT_FLOAT_MAX), -(D_TEST), -(PORT_FLOAT_MIN),
  36. 0, PORT_FLOAT_MIN, D_TEST, PORT_FLOAT_MAX };
  37. long lb, tl[] = { PORT_LONG_MIN, -(L_TEST), 0, L_TEST, PORT_LONG_MAX };
  38. int ib, ti[] = { PORT_INT_MIN, -(L_TEST), 0, L_TEST, PORT_INT_MAX };
  39. short sb, ts[] = { PORT_SHORT_MIN, -(S_TEST), 0, S_TEST, PORT_SHORT_MAX };
  40. char cb, tc[] = { PORT_CHAR_MIN, -(C_TEST), 0, C_TEST, PORT_CHAR_MAX };
  41. if (NULL == (fp.file = fopen ("test.tmp", "wb+")))
  42. {
  43. fprintf (stderr, "ERROR, cannot open test.tmp file.\n");
  44. return (1);
  45. }
  46. fp.loaded = 0;
  47. dig_set_cur_port (&port);
  48. byte_order = ENDIAN_LITTLE;
  49. for ( i = 0; i < 2; i++ )
  50. {
  51. dig_init_portable ( &(port), byte_order );
  52. for (j=0; j < 7; j++)
  53. {
  54. dig_fseek (&fp, 0, SEEK_CUR);
  55. fprintf (fp.file, "double ");
  56. dig__fwrite_port_D ( &(td[j]), 1, &fp);
  57. dig_fseek (&fp, -(PORT_DOUBLE), SEEK_CUR);
  58. dig__fread_port_D (&db, 1, &fp);
  59. dig_fflush(&fp);
  60. if ( db != td[j] )
  61. {
  62. fprintf (stderr, "ERROR in read/write portable double, byte_order = %d\n", byte_order);
  63. fprintf (stderr, " Written: %.16e3E\n Read : %.16e3E\n", td[j], db);
  64. err = 1;
  65. }
  66. }
  67. for (j=0; j < 7; j++)
  68. {
  69. dig_fseek (&fp, 0, SEEK_CUR);
  70. fprintf (fp.file, "float ");
  71. dig__fwrite_port_F ( &(tf[j]), 1, &fp);
  72. dig_fseek (&fp, -(PORT_FLOAT), SEEK_CUR);
  73. dig__fread_port_F (&fb, 1, &fp);
  74. dig_fflush(&fp);
  75. if ( fb != tf[j] )
  76. {
  77. fprintf (stderr, "ERROR in read/write portable float, byte_order = %d\n", byte_order);
  78. fprintf (stderr, " Written: %.8e3E\n Read : %.8e3E\n", tf[j], fb);
  79. err = 1;
  80. }
  81. }
  82. for (j=0; j < 5; j++)
  83. {
  84. dig_fseek (&fp, 0, SEEK_CUR);
  85. fprintf (fp.file, "long ");
  86. dig__fwrite_port_L ( &(tl[j]), 1, &fp);
  87. dig_fseek (&fp, -(PORT_LONG), SEEK_CUR);
  88. dig__fread_port_L (&lb, 1, &fp);
  89. dig_fflush(&fp);
  90. if ( lb != tl[j] )
  91. {
  92. fprintf (stderr, "ERROR in read/write portable long, byte_order = %d\n", byte_order);
  93. fprintf (stderr, " Written: %ld\n Read : %ld\n", tl[j], lb);
  94. err = 1;
  95. }
  96. }
  97. for (j=0; j < 5; j++)
  98. {
  99. dig_fseek (&fp, 0, SEEK_CUR);
  100. fprintf (fp.file, "int ");
  101. dig__fwrite_port_I ( &(ti[j]), 1, &fp);
  102. dig_fseek (&fp, -(PORT_INT), SEEK_CUR);
  103. dig__fread_port_I (&ib, 1, &fp);
  104. dig_fflush(&fp);
  105. if ( ib != ti[j] )
  106. {
  107. fprintf (stderr, "ERROR in read/write portable int, byte_order = %d\n", byte_order);
  108. fprintf (stderr, " Written: %d\n Read : %d\n", ti[j], ib);
  109. err = 1;
  110. }
  111. }
  112. for (j=0; j < 5; j++)
  113. {
  114. dig_fseek (&fp, 0, SEEK_CUR);
  115. fprintf (fp.file, "short ");
  116. dig__fwrite_port_S ( &(ts[j]), 1, &fp);
  117. dig_fseek (&fp, -(PORT_SHORT), SEEK_CUR);
  118. dig__fread_port_S (&sb, 1, &fp);
  119. dig_fflush(&fp);
  120. if ( sb != ts[j] )
  121. {
  122. fprintf (stderr, "ERROR in read/write portable short, byte_order = %d\n", byte_order);
  123. fprintf (stderr, " Written: %d\n Read : %d\n", ts[j], sb);
  124. err = 1;
  125. }
  126. }
  127. for (j=0; j < 5; j++)
  128. {
  129. dig_fseek (&fp, 0, SEEK_CUR);
  130. fprintf (fp.file, "char ");
  131. dig__fwrite_port_C ( &(tc[j]), 1, &fp);
  132. dig_fseek (&fp, -(PORT_CHAR), SEEK_CUR);
  133. dig__fread_port_C (&cb, 1, &fp);
  134. dig_fflush(&fp);
  135. if ( cb != tc[j] )
  136. {
  137. fprintf (stderr, "ERROR in read/write portable char, byte_order = %d\n", byte_order);
  138. fprintf (stderr, " Written: %d\n Read : %d\n", tc[j], cb);
  139. err = 1;
  140. }
  141. }
  142. byte_order = ENDIAN_BIG;
  143. }
  144. fclose ( fp.file );
  145. return ( err );
  146. }