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*/
10#include <config.h>
11#include <nc_tests.h>
12#include "err_macros.h"
13#include "netcdf.h"
14#include <hdf5.h>
15#include <H5DSpublic.h>
16#include <time.h>
17#include <sys/time.h> /* Extra high precision time info. */
18
19#define FILE_NAME "tst_h_many_atts.h5"
20#define GRP_NAME "group1"
21
22int
23main()
24{
25   printf("\n*** Checking many attributes in HDF5 file.\n");
26   printf("*** Checking some more simple atts...\n");
27   {
28#define NUM_ATTS 10000
29      hid_t fcpl_idhdfidgrpid;
30      hid_t spaceidattid1;
31      int one = 1;
32      hsize_t dims[1] = {1};
33      int i;
34      char name[NC_MAX_NAME];
35      struct timeval start_timeend_timediff_time;
36      double sec;
37
38      /* Create a HDF5 file. */
39      if ((fcpl_id = H5Pcreate(H5P_FILE_CREATE)) < 0) ERR;
40      if (H5Pset_link_creation_order(fcpl_id, (H5P_CRT_ORDER_TRACKED |
41        H5P_CRT_ORDER_INDEXED)) < 0) ERR;
42      if (H5Pset_attr_creation_order(fcpl_id, (H5P_CRT_ORDER_TRACKED |
43        H5P_CRT_ORDER_INDEXED)) < 0) ERR;
44      if ((hdfid = H5Fcreate(FILE_NAMEH5F_ACC_TRUNCfcpl_idH5P_DEFAULT)) < 0) ERR;
45      if (H5Pclose(fcpl_id) < 0) ERR;
46
47      /* Open the root group. */
48      if ((grpid = H5Gopen2(hdfid, "/", H5P_DEFAULT)) < 0) ERR;
49
50      if (gettimeofday(&start_timeNULL)) ERR;
51      /* Write an attribute. */
52      if ((spaceid = H5Screate_simple(1, dimsNULL)) < 0) ERR;
53      for (i = 0; i < NUM_ATTSi++)
54      {
55  sprintf(name, "att_%d", i);
56  if ((attid1 = H5Acreate2(grpidnameH5T_NATIVE_INTspaceid,
57   H5P_DEFAULTH5P_DEFAULT)) < 0) ERR;
58  if (H5Awrite(attid1H5T_NATIVE_INT, &one) < 0) ERR;
59/*  if (H5Aclose(attid1) < 0) ERR;*/
60  if((i + 1) % 1000 == 0)
61  { /* only print every 1000th attribute name */
62     if (gettimeofday(&end_timeNULL)) ERR;
63     if (nc4_timeval_subtract(&diff_time, &end_time, &start_time)) ERR;
64     sec = diff_time.tv_sec + 1.0e-6 * diff_time.tv_usec;
65     printf("%i\t%.3g sec\n", i + 1, sec);
66  }
67      }
68
69      /* Close everything. */
70      if (H5Sclose(spaceid) < 0) ERR;
71      if (H5Gclose(grpid) < 0) ERR;
72      if (H5Fclose(hdfid) < 0) ERR;
73   }
74   SUMMARIZE_ERR;
75   FINAL_RESULTS;
76}


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