1/* This is part of the netCDF package.  Copyright 2005 University
2   Corporation for Atmospheric Research/Unidata See COPYRIGHT file for
3   conditions of use.
4
5   This program tests fixes for reading netCDF-4 files that contain
6   datasets with reference datatypes.  The netCDF-4 library should ignore
7   the datasets & attributes that have reference datatypes and allow the
8   rest of the file to be accessed.
9*/
10
11#include <config.h>
12#include <nc_tests.h>
13#include <err_macros.h>
14#include <hdf5.h>
15
16#define FILE_NAME "tst_h_refs.h5"
17#define REF_ATT_NAME "refatt"
18#define REF_VAR_NAME "refvar"
19#define INT_ATT_NAME "intatt"
20#define INT_VAR_NAME "intvar"
21
22int
23main()
24{
25    printf("\n*** Creating file with datasets & attributes that have reference datatypes.\n");
26    {
27 hid_t fileidscalar_spaceid;
28 hid_t attiddsetid;
29
30 if ((scalar_spaceid = H5Screate(H5S_SCALAR)) < 0) ERR;
31
32 /* Create new file, using default properties. */
33 if ((fileid = H5Fcreate(FILE_NAMEH5F_ACC_TRUNCH5P_DEFAULTH5P_DEFAULT)) < 0) ERR;
34
35
36        /* Create dataset with reference datatype */
37        if ((dsetid = H5Dcreate2(fileidREF_VAR_NAMEH5T_STD_REF_OBJscalar_spaceidH5P_DEFAULTH5P_DEFAULTH5P_DEFAULT)) < 0) ERR;
38
39        /* Create attribute with reference datatype on reference dataset */
40        if ((attid = H5Acreate2(dsetidREF_ATT_NAMEH5T_STD_REF_OBJscalar_spaceidH5P_DEFAULTH5P_DEFAULT)) < 0) ERR;
41        if (H5Aclose(attid) < 0) ERR;
42
43        /* Create attribute with native int datatype on reference dataset */
44        if ((attid = H5Acreate2(dsetidINT_ATT_NAMEH5T_NATIVE_INTscalar_spaceidH5P_DEFAULTH5P_DEFAULT)) < 0) ERR;
45        if (H5Aclose(attid) < 0) ERR;
46
47        /* Close reference dataset */
48        if (H5Dclose(dsetid) < 0) ERR;
49
50
51        /* Create dataset with native int datatype */
52        if ((dsetid = H5Dcreate2(fileidINT_VAR_NAMEH5T_NATIVE_INTscalar_spaceidH5P_DEFAULTH5P_DEFAULTH5P_DEFAULT)) < 0) ERR;
53
54        /* Create attribute with reference datatype on integer dataset */
55        if ((attid = H5Acreate2(dsetidREF_ATT_NAMEH5T_STD_REF_OBJscalar_spaceidH5P_DEFAULTH5P_DEFAULT)) < 0) ERR;
56        if (H5Aclose(attid) < 0) ERR;
57
58        /* Create attribute with native int datatype on integer dataset */
59        if ((attid = H5Acreate2(dsetidINT_ATT_NAMEH5T_NATIVE_INTscalar_spaceidH5P_DEFAULTH5P_DEFAULT)) < 0) ERR;
60        if (H5Aclose(attid) < 0) ERR;
61
62        /* Close integer dataset */
63        if (H5Dclose(dsetid) < 0) ERR;
64
65
66        /* Create attribute on root group with reference datatype */
67        if ((attid = H5Acreate2(fileidREF_ATT_NAMEH5T_STD_REF_OBJscalar_spaceidH5P_DEFAULTH5P_DEFAULT)) < 0) ERR;
68        if (H5Aclose(attid) < 0) ERR;
69
70        /* Create attribute on root group with native int datatype */
71        if ((attid = H5Acreate2(fileidINT_ATT_NAMEH5T_NATIVE_INTscalar_spaceidH5P_DEFAULTH5P_DEFAULT)) < 0) ERR;
72        if (H5Aclose(attid) < 0) ERR;
73
74
75        /* Close rest */
76 if (H5Sclose(scalar_spaceid) < 0) ERR;
77 if (H5Fclose(fileid) < 0) ERR;
78    }
79
80    printf("*** Checking accessing file through netCDF-4 API...");
81    {
82 int ncidvaridattid;
83        int natts = 0;
84 nc_type type;
85
86 if (nc_open(FILE_NAMENC_NOWRITE, &ncid)) ERR;
87
88        /* Check the root group's attributes are OK */
89 if (nc_inq_varnatts(ncidNC_GLOBAL, &natts )) ERR;
90 if (natts != 1) ERR;    /* Reference attribute should not be present */
91 if (nc_inq_attid(ncidNC_GLOBALINT_ATT_NAME, &attid)) ERR;
92 if (nc_inq_atttype(ncidNC_GLOBALINT_ATT_NAME, &type)) ERR;
93 if (type != NC_INTERR;
94
95        /* Verify that the reference dataset is not present */
96 if (!nc_inq_varid(ncidREF_VAR_NAME, &varid)) ERR;
97
98        /* Verify that the integer dataset is present and OK */
99 if (nc_inq_varid(ncidINT_VAR_NAME, &varid)) ERR;
100 if (nc_inq_vartype(ncidvarid, &type)) ERR;
101 if (type != NC_INTERR;
102
103        /* Check the integer dataset's attributes are OK */
104 if (nc_inq_varnatts(ncidvarid, &natts )) ERR;
105 if (natts != 1) ERR;    /* Reference attribute should not be present */
106 if (nc_inq_attid(ncidvaridINT_ATT_NAME, &attid)) ERR;
107 if (nc_inq_atttype(ncidvaridINT_ATT_NAME, &type)) ERR;
108 if (type != NC_INTERR;
109
110 if (nc_close(ncid)) ERR;
111    }
112    SUMMARIZE_ERR;
113
114    FINAL_RESULTS;
115}
116


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