1/* This is part of the netCDF package.
2   Copyright 2005 University Corporation for Atmospheric Research/Unidata
3   See COPYRIGHT file for conditions of use.
4
5   Test HDF5 file code. These are not intended to be exhaustive tests,
6   but they use HDF5 the same way that netCDF-4 does, so if these
7   tests don't work, than netCDF-4 won't work either.
8
9   This file deals with HDF5 attributes, but more so.
10
11   $Id: tst_h_atts2.c,v 1.18 2009/07/03 13:07:14 ed Exp $
12*/
13#include <nc_tests.h>
14#include "err_macros.h"
15#include <hdf5.h>
16
17#define FILE_NAME "tst_h_atts2.h5"
18#define REF_FILE_NAME "tst_xplatform2_3.nc"
19#define MAX_LEN 80
20#define NUM_ATTS 1
21#define ATT_NAME "King_John"
22#define NUM_OBJ 3
23
24int
25main()
26{
27   printf("\n*** Checking HDF5 attribute functions some more.\n");
28#ifdef EXTRA_TESTS
29   printf("*** Opening tst_xplatform2_3.nc...");
30   {
31      hid_t fileidgrpidattid;
32      hid_t file_typeid1[NUM_OBJ], native_typeid1[NUM_OBJ];
33      hid_t file_typeid2native_typeid2;
34      hsize_t num_obji;
35      H5O_info_t obj_info;
36      char obj_name[NC_MAX_NAME + 1];
37
38      /* Open one of the netCDF test files. */
39      if ((fileid = H5Fopen(REF_FILE_NAMEH5F_ACC_RDWRH5P_DEFAULT)) < 0) ERR;
40      if ((grpid = H5Gopen(fileid, "/")) < 0) ERR;
41
42      /* How many objects in this group? */
43      if (H5Gget_num_objs(grpid, &num_obj) < 0) ERR;
44      if (num_obj != NUM_OBJERR;
45
46      /* For each object in the group... */
47      for (i = 0; i < num_obji++)
48      {
49  /* Get the name. */
50  if (H5Oget_info_by_idx(grpid, ".", H5_INDEX_CRT_ORDERH5_ITER_INC,
51 i, &obj_infoH5P_DEFAULT) < 0) ERR_RET;
52  if (H5Lget_name_by_idx(grpid, ".", H5_INDEX_NAMEH5_ITER_INCi,
53 obj_nameNC_MAX_NAME + 1, H5P_DEFAULT) < 0) ERR_RET;
54  printf(" reading type %s ", obj_name);
55  if (obj_info.type != H5O_TYPE_NAMED_DATATYPEERR_RET;
56
57  /* Get the typeid. */
58  if ((file_typeid1[i] = H5Topen2(grpidobj_nameH5P_DEFAULT)) < 0) ERR_RET;
59  if ((native_typeid1[i] = H5Tget_native_type(file_typeid1[i], H5T_DIR_DEFAULT)) < 0) ERR_RET;
60      }
61
62      /* There is one att: open it by index. */
63      if ((attid = H5Aopen_idx(grpid, 0)) < 0) ERR;
64
65      /* Get file and native typeids. */
66      if ((file_typeid2 = H5Aget_type(attid)) < 0) ERR;
67      if ((native_typeid2 = H5Tget_native_type(file_typeid2H5T_DIR_DEFAULT)) < 0) ERR;
68
69      /* Close the attribute. */
70      if (H5Aclose(attid) < 0) ERR;
71
72      /* Close the typeids. */
73      if (H5Tclose(file_typeid2) < 0) ERR_RET;
74      if (H5Tclose(native_typeid2) < 0) ERR_RET;
75      for (i = 0; i < NUM_OBJi++)
76      {
77  if (H5Tclose(file_typeid1[i]) < 0) ERR_RET;
78  if (H5Tclose(native_typeid1[i]) < 0) ERR_RET;
79      }
80
81      /* Close the group and file. */
82      if (H5Gclose(grpid) < 0 ||
83   H5Fclose(fileid) < 0) ERR;
84   }
85
86   SUMMARIZE_ERR;
87   printf("*** Opening tst_xplatform2_3.nc again...");
88   {
89      hid_t fileidgrpidattidfile_typeidnative_typeid;
90      hid_t file_typeid2native_typeid2;
91#if 0
92      hsize_t num_obj;
93#endif
94
95      /* Open one of the netCDF test files. */
96      if ((fileid = H5Fopen(REF_FILE_NAMEH5F_ACC_RDWRH5P_DEFAULT)) < 0) ERR;
97      if ((grpid = H5Gopen(fileid, "/")) < 0) ERR;
98
99      /* There is one att: open it by index. */
100      if ((attid = H5Aopen_idx(grpid, 0)) < 0) ERR;
101
102      /* Get file and native typeids. */
103      if ((file_typeid = H5Aget_type(attid)) < 0) ERR;
104      if ((native_typeid = H5Tget_native_type(file_typeidH5T_DIR_DEFAULT)) < 0) ERR;
105
106      /* Now getting another copy of the native typeid will fail! WTF? */
107      if ((file_typeid2 = H5Aget_type(attid)) < 0) ERR;
108      if ((native_typeid2 = H5Tget_native_type(file_typeidH5T_DIR_DEFAULT)) < 0) ERR;
109
110      /* Close the attribute. */
111      if (H5Aclose(attid) < 0) ERR;
112
113      /* Close the typeids. */
114      if (H5Tclose(file_typeid) < 0) ERR;
115      if (H5Tclose(native_typeid) < 0) ERR;
116      if (H5Tclose(file_typeid2) < 0) ERR;
117      if (H5Tclose(native_typeid2) < 0) ERR;
118
119      /* Close the group and file. */
120      if (H5Gclose(grpid) < 0 ||
121   H5Fclose(fileid) < 0) ERR;
122   }
123
124   SUMMARIZE_ERR;
125#endif
126   FINAL_RESULTS;
127}


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