00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #include <stdlib.h>
00019 #include <stdio.h>
00020 #include <grass/Vect.h>
00021
00022
00023
00024 #define D_TEST 1.3333
00025 #define L_TEST 123456789
00026 #define S_TEST 12345
00027 #define C_TEST 123
00028
00029 int main()
00030 {
00031 int i, j;
00032 int err;
00033 int byte_order;
00034 struct Port_info port;
00035 GVFILE fp;
00036
00037 double db, td[] = { -(PORT_DOUBLE_MAX), -(D_TEST), -(PORT_DOUBLE_MIN),
00038 0, PORT_DOUBLE_MIN, D_TEST, PORT_DOUBLE_MAX
00039 };
00040 float fb, tf[] = { -(PORT_FLOAT_MAX), -(D_TEST), -(PORT_FLOAT_MIN),
00041 0, PORT_FLOAT_MIN, D_TEST, PORT_FLOAT_MAX
00042 };
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 err = EXIT_SUCCESS;
00049
00050 if (NULL == (fp.file = fopen("test.tmp", "wb+"))) {
00051 G_fatal_error("Unable tp open test.tmp file");
00052 }
00053 fp.loaded = 0;
00054
00055 dig_set_cur_port(&port);
00056
00057 byte_order = ENDIAN_LITTLE;
00058 for (i = 0; i < 2; i++) {
00059 dig_init_portable(&(port), byte_order);
00060 for (j = 0; j < 7; j++) {
00061 dig_fseek(&fp, 0, SEEK_CUR);
00062 fprintf(fp.file, "double ");
00063 dig__fwrite_port_D(&(td[j]), 1, &fp);
00064 dig_fseek(&fp, -(PORT_DOUBLE), SEEK_CUR);
00065 dig__fread_port_D(&db, 1, &fp);
00066 dig_fflush(&fp);
00067 if (db != td[j]) {
00068 G_warning("Error in read/write portable double, byte_order = %d"
00069 " Written: %.16e3E Read: %.16e3E",
00070 byte_order, td[j], db);
00071 err = EXIT_FAILURE;
00072 }
00073 }
00074 for (j = 0; j < 7; j++) {
00075 dig_fseek(&fp, 0, SEEK_CUR);
00076 fprintf(fp.file, "float ");
00077 dig__fwrite_port_F(&(tf[j]), 1, &fp);
00078 dig_fseek(&fp, -(PORT_FLOAT), SEEK_CUR);
00079 dig__fread_port_F(&fb, 1, &fp);
00080 dig_fflush(&fp);
00081 if (fb != tf[j]) {
00082 G_warning("Error in read/write portable float, byte_order = %d"
00083 " Written: %.8e3E Read: %.8e3E",
00084 byte_order, tf[j], fb);
00085 err = EXIT_FAILURE;
00086 }
00087 }
00088
00089 for (j = 0; j < 5; j++) {
00090 dig_fseek(&fp, 0, SEEK_CUR);
00091 fprintf(fp.file, "long ");
00092 dig__fwrite_port_L(&(tl[j]), 1, &fp);
00093 dig_fseek(&fp, -(PORT_LONG), SEEK_CUR);
00094 dig__fread_port_L(&lb, 1, &fp);
00095 dig_fflush(&fp);
00096 if (lb != tl[j]) {
00097 G_warning("Error in read/write portable long, byte_order = %d"
00098 " Written: %lu Read: %lu",
00099 byte_order, (long unsigned) tl[j], (long unsigned) lb);
00100 err = EXIT_FAILURE;
00101 }
00102 }
00103
00104 for (j = 0; j < 5; j++) {
00105 dig_fseek(&fp, 0, SEEK_CUR);
00106 fprintf(fp.file, "int ");
00107 dig__fwrite_port_I(&(ti[j]), 1, &fp);
00108 dig_fseek(&fp, -(PORT_INT), SEEK_CUR);
00109 dig__fread_port_I(&ib, 1, &fp);
00110 dig_fflush(&fp);
00111 if (ib != ti[j]) {
00112 G_warning("Error in read/write portable int, byte_order = %d"
00113 " Written: %d Read: %d",
00114 byte_order, ti[j], ib);
00115
00116 err = EXIT_FAILURE;
00117 }
00118 }
00119
00120 for (j = 0; j < 5; j++) {
00121 dig_fseek(&fp, 0, SEEK_CUR);
00122 fprintf(fp.file, "short ");
00123 dig__fwrite_port_S(&(ts[j]), 1, &fp);
00124 dig_fseek(&fp, -(PORT_SHORT), SEEK_CUR);
00125 dig__fread_port_S(&sb, 1, &fp);
00126 dig_fflush(&fp);
00127 if (sb != ts[j]) {
00128 G_warning("Error in read/write portable short, byte_order = %d"
00129 " Written: %d Read: %d",
00130 byte_order, ts[j], sb);
00131
00132 err = EXIT_FAILURE;
00133 }
00134 }
00135 for (j = 0; j < 5; j++) {
00136 dig_fseek(&fp, 0, SEEK_CUR);
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 G_warning("Error in read/write portable char, byte_order = %d"
00144 " Written: %d Read: %d",
00145 byte_order, tc[j], cb);
00146 err = EXIT_FAILURE;
00147 }
00148
00149
00150 }
00151 byte_order = ENDIAN_BIG;
00152 }
00153
00154 fclose(fp.file);
00155
00156 exit(err);
00157 }
00158