test.c 4.5 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 main(int argc, char **argv)
  26. {
  27. int i, j;
  28. int err = 0;
  29. int byte_order;
  30. struct Port_info port;
  31. GVFILE fp;
  32. double db, td[] = { -(PORT_DOUBLE_MAX), -(D_TEST), -(PORT_DOUBLE_MIN),
  33. 0, PORT_DOUBLE_MIN, D_TEST, PORT_DOUBLE_MAX
  34. };
  35. float fb, tf[] = { -(PORT_FLOAT_MAX), -(D_TEST), -(PORT_FLOAT_MIN),
  36. 0, PORT_FLOAT_MIN, D_TEST, PORT_FLOAT_MAX
  37. };
  38. long lb, tl[] = { PORT_LONG_MIN, -(L_TEST), 0, L_TEST, PORT_LONG_MAX };
  39. int ib, ti[] = { PORT_INT_MIN, -(L_TEST), 0, L_TEST, PORT_INT_MAX };
  40. short sb, ts[] = { PORT_SHORT_MIN, -(S_TEST), 0, S_TEST, PORT_SHORT_MAX };
  41. char cb, tc[] = { PORT_CHAR_MIN, -(C_TEST), 0, C_TEST, PORT_CHAR_MAX };
  42. if (NULL == (fp.file = fopen("test.tmp", "wb+"))) {
  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. dig_init_portable(&(port), byte_order);
  51. for (j = 0; j < 7; j++) {
  52. dig_fseek(&fp, 0, SEEK_CUR);
  53. fprintf(fp.file, "double ");
  54. dig__fwrite_port_D(&(td[j]), 1, &fp);
  55. dig_fseek(&fp, -(PORT_DOUBLE), SEEK_CUR);
  56. dig__fread_port_D(&db, 1, &fp);
  57. dig_fflush(&fp);
  58. if (db != td[j]) {
  59. fprintf(stderr,
  60. "ERROR in read/write portable double, byte_order = %d\n",
  61. byte_order);
  62. fprintf(stderr, " Written: %.16e3E\n Read : %.16e3E\n",
  63. td[j], db);
  64. err = 1;
  65. }
  66. }
  67. for (j = 0; j < 7; j++) {
  68. dig_fseek(&fp, 0, SEEK_CUR);
  69. fprintf(fp.file, "float ");
  70. dig__fwrite_port_F(&(tf[j]), 1, &fp);
  71. dig_fseek(&fp, -(PORT_FLOAT), SEEK_CUR);
  72. dig__fread_port_F(&fb, 1, &fp);
  73. dig_fflush(&fp);
  74. if (fb != tf[j]) {
  75. fprintf(stderr,
  76. "ERROR in read/write portable float, byte_order = %d\n",
  77. byte_order);
  78. fprintf(stderr, " Written: %.8e3E\n Read : %.8e3E\n",
  79. tf[j], fb);
  80. err = 1;
  81. }
  82. }
  83. for (j = 0; j < 5; j++) {
  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. fprintf(stderr,
  92. "ERROR in read/write portable long, byte_order = %d\n",
  93. byte_order);
  94. fprintf(stderr, " Written: %ld\n Read : %ld\n", tl[j],
  95. lb);
  96. err = 1;
  97. }
  98. }
  99. for (j = 0; j < 5; j++) {
  100. dig_fseek(&fp, 0, SEEK_CUR);
  101. fprintf(fp.file, "int ");
  102. dig__fwrite_port_I(&(ti[j]), 1, &fp);
  103. dig_fseek(&fp, -(PORT_INT), SEEK_CUR);
  104. dig__fread_port_I(&ib, 1, &fp);
  105. dig_fflush(&fp);
  106. if (ib != ti[j]) {
  107. fprintf(stderr,
  108. "ERROR in read/write portable int, byte_order = %d\n",
  109. byte_order);
  110. fprintf(stderr, " Written: %d\n Read : %d\n", ti[j], ib);
  111. err = 1;
  112. }
  113. }
  114. for (j = 0; j < 5; j++) {
  115. dig_fseek(&fp, 0, SEEK_CUR);
  116. fprintf(fp.file, "short ");
  117. dig__fwrite_port_S(&(ts[j]), 1, &fp);
  118. dig_fseek(&fp, -(PORT_SHORT), SEEK_CUR);
  119. dig__fread_port_S(&sb, 1, &fp);
  120. dig_fflush(&fp);
  121. if (sb != ts[j]) {
  122. fprintf(stderr,
  123. "ERROR in read/write portable short, byte_order = %d\n",
  124. byte_order);
  125. fprintf(stderr, " Written: %d\n Read : %d\n", ts[j], sb);
  126. err = 1;
  127. }
  128. }
  129. for (j = 0; j < 5; j++) {
  130. dig_fseek(&fp, 0, SEEK_CUR);
  131. fprintf(fp.file, "char ");
  132. dig__fwrite_port_C(&(tc[j]), 1, &fp);
  133. dig_fseek(&fp, -(PORT_CHAR), SEEK_CUR);
  134. dig__fread_port_C(&cb, 1, &fp);
  135. dig_fflush(&fp);
  136. if (cb != tc[j]) {
  137. fprintf(stderr,
  138. "ERROR in read/write portable char, byte_order = %d\n",
  139. byte_order);
  140. fprintf(stderr, " Written: %d\n Read : %d\n", tc[j], cb);
  141. err = 1;
  142. }
  143. }
  144. byte_order = ENDIAN_BIG;
  145. }
  146. fclose(fp.file);
  147. return (err);
  148. }