From 6cd8818b735d3c22f3a1f7cd30d52360139ed72c Mon Sep 17 00:00:00 2001 From: Robb Matzke Date: Fri, 23 Jan 1998 14:58:38 -0500 Subject: [svn-r169] Forgot this file the first time... --- test/cmpd_dset.c | 307 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 307 insertions(+) create mode 100644 test/cmpd_dset.c diff --git a/test/cmpd_dset.c b/test/cmpd_dset.c new file mode 100644 index 0000000..3676890 --- /dev/null +++ b/test/cmpd_dset.c @@ -0,0 +1,307 @@ +/* + * Copyright (C) 1998 NCSA + * All rights reserved. + * + * Programmer: Robb Matzke + * Friday, January 23, 1998 + */ +#include +#include +#include + +/* The first dataset */ +typedef struct s1_t { + int a; + int b; + int c; + int d; + int e; +} s1_t; + +/* The second dataset (same as first) */ +typedef s1_t s2_t; + +/* The third dataset (reversed fields of s1) */ +typedef struct s3_t { + int e; + int d; + int c; + int b; + int a; +} s3_t; + +/* The fourth dataset (a subset of s1) */ +typedef struct s4_t { + int b; + int d; +} s4_t; + +/* The fifth dataset (a superset of s1) */ +typedef struct s5_t { + int pre; + int a; + int b; + int mid1; + int c; + int mid2; + int d; + int e; + int post; +} s5_t; + + +#define NX 10 +#define NY 200 + + +static hid_t +H5Pcreate_simple (int ndims, size_t *dim) +{ + herr_t status; + hid_t pid = H5Pcreate (H5P_SIMPLE); + assert (pid>=0); + status = H5Pset_space (pid, ndims, dim); + assert (status>=0); + return pid; +} + + + +/*------------------------------------------------------------------------- + * Function: main + * + * Purpose: Creates a simple dataset of a compound type and then reads + * it back. The dataset is read back in various ways to + * exercise the I/O pipeline and compound type conversion. + * + * Return: Success: 0 + * + * Failure: 1 + * + * Programmer: Robb Matzke + * Friday, January 23, 1998 + * + * Modifications: + * + *------------------------------------------------------------------------- + */ +int +main (void) +{ + /* First dataset */ + static s1_t s1[NX*NY]; + hid_t s1_tid; + + /* Second dataset */ + static s2_t s2[NX*NY]; + hid_t s2_tid; + + /* Third dataset */ + static s3_t s3[NX*NY]; + hid_t s3_tid; + + /* Fourth dataset */ + static s4_t s4[NX*NY]; + hid_t s4_tid; + + /* Fifth dataset */ + static s5_t s5[NX*NY]; + hid_t s5_tid; + + /* Other variables */ + int i; + hid_t file, dataset, space; + herr_t status; + static size_t dim[] = {NX, NY}; + + /* Create the file */ + file = H5Fcreate ("cmpd_dset.h5", H5ACC_OVERWRITE, + H5C_DEFAULT, H5C_DEFAULT); + assert (file>=0); + + /* Create the data space */ + space = H5Pcreate_simple (2, dim); + assert (space>=0); + + + + /* + *###################################################################### + * STEP 1: Save the original dataset natively. + */ + printf ("\ +STEP 1: Initialize dataset `s1' and store it on disk in native order.\n"); + fflush (stdout); + + /* Initialize the dataset */ + for (i=0; i=0); + + /* Create the dataset */ + dataset = H5Dcreate (file, "s1", s1_tid, space, H5C_DEFAULT); + assert (dataset>=0); + + /* Write the data */ + status = H5Dwrite (dataset, s1_tid, H5P_ALL, H5P_ALL, H5C_DEFAULT, s1); + assert (status>=0); + + /* + *###################################################################### + * STEP 2: We create a new type ID for the second dataset even though + * it's the same as the first just to test things better, but + * in fact, we could have used s1_tid. + */ + printf ("\ +STEP 2: Read the dataset from disk into a new memory buffer which has the\n\ + same data type and space. This will be the typical case.\n"); + fflush (stdout); + + + /* Create a data type for s2 */ + s2_tid = H5Tcreate (H5T_COMPOUND, sizeof(s2_t)); + H5Tinsert (s2_tid, "a", HPOFFSET(s2,a), H5T_NATIVE_INT); + H5Tinsert (s2_tid, "b", HPOFFSET(s2,b), H5T_NATIVE_INT); + H5Tinsert (s2_tid, "c", HPOFFSET(s2,c), H5T_NATIVE_INT); + H5Tinsert (s2_tid, "d", HPOFFSET(s2,d), H5T_NATIVE_INT); + H5Tinsert (s2_tid, "e", HPOFFSET(s2,e), H5T_NATIVE_INT); + assert (s2_tid>=0); + + /* Read the data */ + status = H5Dread (dataset, s2_tid, H5P_ALL, H5P_ALL, H5C_DEFAULT, s2); + assert (status>=0); + + /* Compare s2 with s1. They should be the same */ + for (i=0; i=0); + + /* Read the data */ + status = H5Dread (dataset, s3_tid, H5P_ALL, H5P_ALL, H5C_DEFAULT, s3); + assert (status>=0); + + /* Compare s3 with s1. They should be the same */ + for (i=0; i members + * stored on disk we'll read . + */ + printf ("\ +STEP 4: Read a subset of the members.\n"); + fflush (stdout); + + /* Create a datatype for s4 */ + s4_tid = H5Tcreate (H5T_COMPOUND, sizeof(s4_t)); + H5Tinsert (s4_tid, "b", HPOFFSET(s4,b), H5T_NATIVE_INT); + H5Tinsert (s4_tid, "d", HPOFFSET(s4,d), H5T_NATIVE_INT); + assert (s4_tid>=0); + + /* Read the data */ + status = H5Dread (dataset, s4_tid, H5P_ALL, H5P_ALL, H5C_DEFAULT, s4); + assert (status>=0); + + /* Compare s4 with s1 */ + for (i=0; i=0); + + /* Read the data */ + status = H5Dread (dataset, s5_tid, H5P_ALL, H5P_ALL, H5C_DEFAULT, s5); + + /* Check that the data was read properly */ + for (i=0; i