Esempio n. 1
0
hid_t CreateTestFile()
{
  hid_t fid;
  herr_t status;
  char ah5_status;
  hid_t label_grp;
  hid_t link_grp;
  hid_t links;
  hid_t link;
  char *labels[2] = {"label subject", "label object"};

  fid = H5Fcreate(TEST_FILE, H5F_ACC_EXCL, H5P_DEFAULT, H5P_DEFAULT);
  if (fid < 0) return fid;
  // Create nodes
  label_grp = H5Gcreate(fid, "label", H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
  if (label_grp < 0) return label_grp;
  link_grp = H5Gcreate(fid, "link", H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
  if (link_grp < 0) return link_grp;
  links = H5Gcreate(link_grp, "link", H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
  if (links < 0) return links;
  link = H5Gcreate(links, "link_instance_0", H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
  if (link < 0) return link;

  // Label array.
  ah5_status = AH5_write_str_dataset(label_grp, "link", 2, 14, (char** const)labels);
  if (ah5_status != AH5_TRUE) return -1;

  // link attribute.s
  status = AH5_write_str_attr(link, ".", "object", "/label/link");
  if (status < 0) return status;
  status = AH5_write_int_attr(link, ".", "object_id", 1);
  if (status < 0) return status;
  status = AH5_write_str_attr(link, ".", "subject", "/label/link");
  if (status < 0) return status;
  status = AH5_write_int_attr(link, ".", "subject_id", 0);
  if (status < 0) return status;
  status = AH5_write_flt_attr(link, ".", "my attr", 1.1);
  if (status < 0) return status;

  // Release nodes
  status = H5Gclose(label_grp);
  if (status < 0) return status;
  status = H5Gclose(link);
  if (status < 0) return status;
  status = H5Gclose(links);
  if (status < 0) return status;
  status = H5Gclose(link_grp);
  if (status < 0) return status;
  return fid;
}
Esempio n. 2
0
char *test_write_string_dataset()
{
#define DIM0 4
#define SDIM 8

    hid_t file_id, filetype, memtype, space, dset;
    size_t sdim;
    hsize_t dims[1] = {DIM0};
    int ndims, i, j;
    /*char wdata[DIM0][SDIM] =*/
    char *wdata[] = {"Parting", "is such",
                              "sweet  ",
                              "sorrow."};
    char **rdata;

    // Write a simple mesh test.
    file_id = AH5_auto_test_file();

    mu_assert("Write string dataset.",
              AH5_write_str_dataset(file_id, "dataset_name",
                                    DIM0, SDIM, wdata));
    // Test the written data using hdf5 API.
    dset = H5Dopen(file_id, "/dataset_name", H5P_DEFAULT);
    filetype = H5Dget_type(dset);
    sdim = H5Tget_size(filetype);
    space = H5Dget_space(dset);
    ndims = H5Sget_simple_extent_dims(space, dims, NULL);
    rdata = (char **) malloc(dims[0] * sizeof (char *));
    rdata[0] = (char *) malloc(dims[0] * sdim * sizeof (char));
    for (i=1; i<dims[0]; i++)
      rdata[i] = rdata[0] + i * sdim;
    memtype = H5Tcopy(H5T_C_S1);
    mu_assert("HDF5 error in H5Tset_size.", H5Tset_size(memtype, sdim) >= 0);
    mu_assert("HDF5 error in H5Dread.",
              H5Dread(dset, memtype, H5S_ALL, H5S_ALL, H5P_DEFAULT, rdata[0]) >= 0);
    for (i = 0; i < dims[0]; i++) {
      printf("%s %s\n", wdata[i], rdata[i]);
      /*mu_assert_str_equal("Check the first str dataset values.", wdata[i], rdata[i]);*/
      j = 0;
      while (wdata[i][j] != ' ' && wdata[i][j] != '\0')  {
        mu_assert_equal("Check the first str dataset values.", wdata[i][j], rdata[i][j]);
        ++j;
      }
    }
    // Release resources.
    free(rdata[0]);
    free(rdata);
    mu_assert("HDF5 error in H5Dclose.", H5Dclose(dset) >= 0);
    mu_assert("HDF5 error in H5Sclose.", H5Sclose(space) >= 0);
    mu_assert("HDF5 error in H5Tclose.", H5Tclose(filetype) >= 0);
    mu_assert("HDF5 error in H5Tclose.", H5Tclose(memtype) >= 0);



    // Write a string dataset using strlen.
    mu_assert("Write string dataset using strlen.",
              AH5_write_str_dataset(file_id, "dataset_name_2",
                                    DIM0, strlen(wdata[0]) + 1, wdata));

    // Test the written data using hdf5 API.
    dset = H5Dopen(file_id, "/dataset_name", H5P_DEFAULT);
    filetype = H5Dget_type(dset);
    sdim = H5Tget_size(filetype);
    space = H5Dget_space(dset);
    ndims = H5Sget_simple_extent_dims(space, dims, NULL);
    rdata = (char **) malloc(dims[0] * sizeof (char *));
    rdata[0] = (char *) malloc(dims[0] * sdim * sizeof (char));
    for (i=1; i<dims[0]; i++)
        rdata[i] = rdata[0] + i * sdim;
    memtype = H5Tcopy(H5T_C_S1);
    mu_assert("HDF5 error in H5Tset_size.", H5Tset_size(memtype, sdim) >= 0);
    mu_assert("HDF5 error in H5Dread.",
              H5Dread(dset, memtype, H5S_ALL, H5S_ALL, H5P_DEFAULT, rdata[0]) >= 0);
    for (i = 0; i < dims[0]; i++) {
      /*mu_assert_str_equal("Check the first str dataset values.", wdata[i], rdata[i]);*/
      j = 0;
      while (wdata[i][j] != ' ' && wdata[i][j] != '\0')  {
        mu_assert_equal("Check the first str dataset values.", wdata[i][j], rdata[i][j]);
        ++j;
      }
    }
    // Release resources.
    free(rdata[0]);
    free(rdata);
    mu_assert("HDF5 error in H5Dclose.", H5Dclose(dset) >= 0);
    mu_assert("HDF5 error in H5Sclose.", H5Sclose(space) >= 0);
    mu_assert("HDF5 error in H5Tclose.", H5Tclose(filetype) >= 0);
    mu_assert("HDF5 error in H5Tclose.", H5Tclose(memtype) >= 0);


    // Close file.
    AH5_close_test_file(file_id);

    return MU_FINISHED_WITHOUT_ERRORS;
}