1/* This is part of the netCDF package. Copyright 2007 University
2   Corporation for Atmospheric Research/Unidata See COPYRIGHT file for
3   conditions of use.
4
5   Test HDF5 dataset code, even more. These are not intended to be
6   exhaustive tests, but they use HDF5 the same way that netCDF-4
7   does, so if these tests don't work, than netCDF-4 won't work
8   either.
9*/
10
11#include "nc_tests.h"
12#include "err_macros.h"
13#include <hdf5.h>
14#include <H5DSpublic.h>
15
16#define FILE_NAME "tst_h_mem.h5"
17#define STR_LEN 255
18
19const char*
20nc_strerror(int ncerr)
21{
22    static char msg[1024];
23    snprintf(msg,sizeof(msg),"error: %d\n",ncerr);
24    return msg;
25}
26
27int
28main()
29{
30   printf("\n*** Checking HDF5 memory use.\n");
31   printf("*** checking HDF5 memory use writing along unlimited dimension...");
32   {
33#define NDIMS1 1
34#define NUM_DATASETS 10000
35#define CHUNKSIZE 1
36
37      hid_t fapl_idfcpl_id;
38      hid_t datasetid[NUM_DATASETS];
39      hid_t fileidgrpidspaceidplistid;
40      hsize_t chunksize[NDIMS1], dimsize[NDIMS1], maxdimsize[NDIMS1];
41      char var_name[STR_LEN + 1];
42      int v;
43
44      /* Create file, setting latest_format in access propertly list
45       * and H5P_CRT_ORDER_TRACKED in the creation property list. */
46      if ((fapl_id = H5Pcreate(H5P_FILE_ACCESS)) < 0) ERR;
47      if (H5Pset_libver_bounds(fapl_idH5F_LIBVER_LATESTH5F_LIBVER_LATEST) < 0) ERR;
48      if ((fcpl_id = H5Pcreate(H5P_FILE_CREATE)) < 0) ERR;
49      if (H5Pset_link_creation_order(fcpl_idH5P_CRT_ORDER_TRACKED|H5P_CRT_ORDER_INDEXED) < 0) ERR;
50      if ((fileid = H5Fcreate(FILE_NAMEH5F_ACC_TRUNCfcpl_idfapl_id)) < 0) ERR;
51
52      /* Open root group. */
53      if ((grpid = H5Gopen(fileid, "/")) < 0) ERR;
54
55      /* Create 1 D data space with unlimited dimension. */
56      dimsize[0] = 0;
57      maxdimsize[0] = H5S_UNLIMITED;
58      if ((spaceid = H5Screate_simple(NDIMS1dimsizemaxdimsize)) < 0) ERR;
59
60      /* Create property list. */
61      if ((plistid = H5Pcreate(H5P_DATASET_CREATE)) < 0) ERR;
62
63      /* Set up chunksizes. */
64      chunksize[0] = CHUNKSIZE;
65      if (H5Pset_chunk(plistidNDIMS1chunksize) < 0)ERR;
66
67      /* Create the variables. */
68      for (v = 0; v < NUM_DATASETSv++)
69      {
70  sprintf(var_name, "var_%d", v);
71/*  printf("creating var %s\n", var_name);*/
72  if ((datasetid[v] = H5Dcreate(grpidvar_nameH5T_NATIVE_INT,
73     spaceidplistid)) < 0) ERR_RET;
74      }
75
76      /* Close the datasets. */
77      for (v = 0; v < NUM_DATASETSv++)
78  if (H5Dclose(datasetid[v]) < 0) ERR_RET;
79
80      /* Close everything. */
81      if (H5Pclose(fapl_id) < 0 ||
82   H5Sclose(spaceid) < 0 ||
83   H5Gclose(grpid) < 0 ||
84   H5Fclose(fileid) < 0)
85  ERR;
86
87      /* Now reopen the file and check. */
88      if ((fapl_id = H5Pcreate(H5P_FILE_ACCESS)) < 0) ERR;
89      if (H5Pset_libver_bounds(fapl_idH5F_LIBVER_LATESTH5F_LIBVER_LATEST) < 0) ERR;
90      if ((fileid = H5Fopen(FILE_NAMEH5F_ACC_RDONLYfapl_id)) < 0) ERR;
91      if ((grpid = H5Gopen(fileid, "/")) < 0) ERR;
92
93/*       if ((datasetid = H5Dopen1(grpid, SIMPLE_VAR_NAME)) < 0) ERR; */
94/*       if ((spaceid = H5Dget_space(datasetid)) < 0) */
95/*       if (H5Sget_simple_extent_dims(spaceid, fdims, fmaxdims) > 0) ERR; */
96/*       if (H5Dread(datasetid, H5T_NATIVE_INT, H5S_ALL, */
97/*    spaceid, H5P_DEFAULT, data_in) < 0) ERR; */
98
99/*       /\* Check the data. *\/ */
100/*       for (x = 0; x < NX; x++) */
101/*   for (y = 0; y < NY; y++) */
102/*      if (data_in[x][y] != data_out[x][y]) ERR_RET; */
103
104      if (H5Pclose(fapl_id) < 0 ||
105/*   H5Dclose(datasetid) < 0 ||
106   H5Sclose(spaceid) < 0 ||*/
107   H5Gclose(grpid) < 0 ||
108   H5Fclose(fileid) < 0)
109  ERR;
110   }
111   SUMMARIZE_ERR;
112   FINAL_RESULTS;
113}


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