1/*! Test for NCF-331. Added May 11, 2015.
2 *  See the following links for more information:
3 *
4 *  o Issue on GitHub: https://github.com/Unidata/netcdf-c/issues/112
5 *  o Issue in JIRA:   https://bugtracking.unidata.ucar.edu/browse/NCF-331
6 *
7 * Test contributed by Jeff Whitaker
8 */
9
10#include <string.h>
11#include <netcdf.h>
12#include <stdio.h>
13#include <nc_tests.h>
14#include "nc_logging.h"
15
16#define FILE_NAME_NC "tst_h5_endians.nc"
17
18#define NDIM 10
19#define NLON 20
20#define DIM_NAME "x"
21#define DIM_LEN 4
22#define GRP_NAME "grp"
23#define LE_FLOAT_VARNAME "fl_le"
24#define BE_FLOAT_VARNAME "fl_be"
25#define LE_INT_VARNAME "int_le"
26#define BE_INT_VARNAME "int_be"
27#define LE_DBL_VARNAME "dbl_le"
28#define BE_DBL_VARNAME "dbl_be"
29
30int main() {
31
32  int nciddimid;
33  int le_float_varid;
34  int be_float_varid;
35  int le_int_varid;
36  int be_int_varid;
37  int le_dbl_varid;
38  int be_dbl_varid;
39  int ed;
40  int failures = 0;
41  int retval = 0;
42
43  printf("* Checking that endianness is properly read from file.\n");
44  printf("** Generating test files.\n");
45  /*
46   * 1. Create a netcdf file with endianness as desired.
47   */
48  {
49
50    printf("*** Creating a file via netcdf API: %s.\n",FILE_NAME_NC);
51    retval = nc_create(FILE_NAME_NCNC_NETCDF4 | NC_CLOBBER, &ncid);
52
53    retval = nc_def_dim(ncidDIM_NAMENDIM, &dimid);
54
55    /* Little-Endian Float */
56    retval = nc_def_var(ncidLE_FLOAT_VARNAMENC_FLOAT, 1, &dimid, &le_float_varid);
57    retval = nc_def_var_endian(ncidle_float_varidNC_ENDIAN_LITTLE);
58
59    /* Big-Endian Float */
60    retval = nc_def_var(ncidBE_FLOAT_VARNAMENC_FLOAT, 1, &dimid, &be_float_varid);
61    retval = nc_def_var_endian(ncidbe_float_varidNC_ENDIAN_BIG);
62
63    /* Little-Endian Int */
64    retval = nc_def_var(ncidLE_INT_VARNAMENC_INT, 1, &dimid, &le_int_varid);
65    retval = nc_def_var_endian(ncidle_int_varidNC_ENDIAN_LITTLE);
66
67    /* Big-Endian Int */
68    retval = nc_def_var(ncidBE_INT_VARNAMENC_INT, 1, &dimid, &be_int_varid);
69    retval = nc_def_var_endian(ncidbe_int_varidNC_ENDIAN_BIG);
70
71    /* Little-Endian Double */
72    retval = nc_def_var(ncidLE_DBL_VARNAMENC_DOUBLE, 1, &dimid, &le_dbl_varid);
73    retval = nc_def_var_endian(ncidle_dbl_varidNC_ENDIAN_LITTLE);
74
75    /* Big-Endian Double */
76    retval = nc_def_var(ncidBE_DBL_VARNAMENC_DOUBLE, 1, &dimid, &be_dbl_varid);
77    retval = nc_def_var_endian(ncidbe_dbl_varidNC_ENDIAN_BIG);
78
79
80    retval = nc_close(ncid);
81  }
82
83  /*
84   * 2. Reopen netcdf-generated file, check to see if the endianness attribute
85   *    exists.
86   */
87  printf("** Checking test files.\n");
88  {
89    ncid = 0;
90    le_float_varid = 0;
91    be_float_varid = 0;
92    le_int_varid = 0;
93    be_int_varid = 0;
94    le_dbl_varid = 0;
95    be_dbl_varid = 0;
96
97    printf("*** %s\n",FILE_NAME_NC);
98    retval = nc_open(FILE_NAME_NCNC_NETCDF4 | NC_NOWRITE, &ncid);
99
100    retval = nc_inq_varid(ncid,LE_FLOAT_VARNAME,&le_float_varid);
101    retval = nc_inq_varid(ncid,BE_FLOAT_VARNAME,&be_float_varid);
102    retval = nc_inq_varid(ncid,LE_INT_VARNAME,&le_int_varid);
103    retval = nc_inq_varid(ncid,BE_INT_VARNAME,&be_int_varid);
104    retval = nc_inq_varid(ncid,LE_DBL_VARNAME,&le_dbl_varid);
105    retval = nc_inq_varid(ncid,BE_DBL_VARNAME,&be_dbl_varid);
106
107    printf("\tLittle-Endian Float...\t");
108    retval = nc_inq_var_endian(ncid,le_float_varid,&ed);
109    if(ed == NC_ENDIAN_LITTLE) printf("passed\n"); else {printf("failed\n"); failures++;}
110
111    printf("\tBig-Endian Float...\t");
112    retval = nc_inq_var_endian(ncid,be_float_varid,&ed);
113    if(ed == NC_ENDIAN_BIG) printf("passed\n"); else {printf("failed\n"); failures++;}
114
115    printf("\tLittle-Endian Int...\t");
116    retval = nc_inq_var_endian(ncid,le_int_varid,&ed);
117    if(ed == NC_ENDIAN_LITTLE) printf("passed\n"); else {printf("failed\n"); failures++;}
118
119    printf("\tBig-Endian Int...\t");
120    retval = nc_inq_var_endian(ncid,be_int_varid,&ed);
121    if(ed == NC_ENDIAN_BIG) printf("passed\n"); else {printf("failed\n"); failures++;}
122
123    printf("\tLittle-Endian Double...\t");
124    retval = nc_inq_var_endian(ncid,le_dbl_varid,&ed);
125    if(ed == NC_ENDIAN_LITTLE) printf("passed\n"); else {printf("failed\n"); failures++;}
126
127    printf("\tBig-Endian Double...\t");
128    retval = nc_inq_var_endian(ncid,be_dbl_varid,&ed);
129    if(ed == NC_ENDIAN_BIG) printf("passed\n"); else {printf("failed\n"); failures++;}
130
131    retval = nc_close(ncid);
132  }
133
134  printf("** Failures Returned: [%d]\n",failures);
135  return failures;
136}


HyperKWIC - Version 7.20DA executed at 11:37 on 27 Oct 2017 | Polyhedron Solutions - INTERNAL USE | COMMERCIAL (Any O/S) SN 4AKIed