diff options
-rw-r--r-- | test/ntypes.c | 66 |
1 files changed, 46 insertions, 20 deletions
diff --git a/test/ntypes.c b/test/ntypes.c index 2afd283..7099a22 100644 --- a/test/ntypes.c +++ b/test/ntypes.c @@ -215,6 +215,7 @@ test_compound_dtype_2(hid_t file) { typedef struct s2 { short c2; + long l2; } s2; typedef struct s1 { char c; @@ -226,17 +227,25 @@ test_compound_dtype_2(hid_t file) hid_t dtype, native_type, tid, tid2, tid_m, tid_m2; int i, j, n; hsize_t dims[2]; - s1 points[100][200], check[100][200]; + s1 *temp_point, *temp_check; + s1 *points=NULL, *check=NULL; + + TESTING("nested compound datatype"); - TESTING("compound_2 datatype"); + /* Allocate space for the points & check arrays */ + if((points=malloc(sizeof(s1)*100*200))==NULL) + goto error; + if((check=calloc(sizeof(s1),100*200))==NULL) + goto error; /* Initialize the dataset */ - for (i = n = 0; i < 100; i++) { - for (j = 0; j < 200; j++) { - (points[i][j]).c = 't'; - (points[i][j]).i = n++; - (points[i][j]).st.c2 = i+j; - (points[i][j]).l = (i*10+j*100)*n; + for (i = n = 0, temp_point=points; i < 100; i++) { + for (j = 0; j < 200; j++,temp_point++) { + points->c = 't'; + points->i = n++; + points->st.c2 = i+j; + points->st.l2 = (i*5+j*50)*n; + points->l = (i*10+j*100)*n; } } @@ -246,16 +255,17 @@ test_compound_dtype_2(hid_t file) if ((space = H5Screate_simple(2, dims, NULL))<0) goto error; /* Create compound datatype for disk storage */ - if((tid2=H5Tcreate(H5T_COMPOUND, 2))<0) goto error; - if((tid=H5Tcreate(H5T_COMPOUND, 15))<0) goto error; + if((tid2=H5Tcreate(H5T_COMPOUND, 6))<0) goto error; + if((tid=H5Tcreate(H5T_COMPOUND, 19))<0) goto error; /* Insert and pack members */ if(H5Tinsert(tid2, "c2", 0, H5T_STD_I16BE)<0) goto error; + if(H5Tinsert(tid2, "l2", 2, H5T_STD_I32LE)<0) goto error; if(H5Tinsert(tid, "c", 0, H5T_NATIVE_CHAR)<0) goto error; if(H5Tinsert(tid, "i", 1, H5T_STD_I32LE)<0) goto error; if(H5Tinsert(tid, "st", 5, tid2)<0) goto error; - if(H5Tinsert(tid, "l", 7, H5T_STD_U64BE)<0) goto error; + if(H5Tinsert(tid, "l", 11, H5T_STD_U64BE)<0) goto error; /* Create the dataset */ if ((dataset = H5Dcreate(file, DSET_COMPOUND_NAME_2, tid, space, @@ -267,6 +277,7 @@ test_compound_dtype_2(hid_t file) /* Insert members */ if(H5Tinsert(tid_m2, "c2", HOFFSET(s2, c2), H5T_NATIVE_SHORT)<0) goto error; + if(H5Tinsert(tid_m2, "l2", HOFFSET(s2, l2), H5T_NATIVE_LONG)<0) goto error; if(H5Tinsert(tid_m, "c", HOFFSET(s1, c), H5T_NATIVE_CHAR)<0) goto error; if(H5Tinsert(tid_m, "i", HOFFSET(s1, i), H5T_NATIVE_INT)<0) goto error; if(H5Tinsert(tid_m, "st", HOFFSET(s1, st), tid_m2)<0) goto error; @@ -296,6 +307,8 @@ test_compound_dtype_2(hid_t file) if((native_type=H5Tget_native_type(dtype, H5T_DIR_DEFAULT))<0) goto error; + if(sizeof(s1)!=H5Tget_size(native_type)) + goto error; if(!H5Tequal(native_type, tid_m)) goto error; @@ -304,12 +317,13 @@ test_compound_dtype_2(hid_t file) goto error; /* Check that the values read are the same as the values written */ - for (i = 0; i < 100; i++) { - for (j = 0; j < 200; j++) { - if ((points[i][j]).c != (check[i][j]).c || - (points[i][j]).i != (check[i][j]).i || - (points[i][j]).st.c2 != (check[i][j]).st.c2 || - (points[i][j]).l != (check[i][j]).l ) { + for (i = 0, temp_point=points, temp_check=check; i < 100; i++) { + for (j = 0; j < 200; j++, temp_point++,temp_check++) { + if (temp_point->c != temp_check->c || + temp_point->i != temp_check->i || + temp_point->st.c2 != temp_check->st.c2 || + temp_point->st.l2 != temp_check->st.l2 || + temp_point->l != temp_check->l ) { H5_FAILED(); printf(" Read different values than written.\n"); printf(" At index %d,%d\n", i, j); @@ -318,14 +332,24 @@ test_compound_dtype_2(hid_t file) } } + /* Close HDF5 objects */ H5Dclose(dataset); H5Tclose(dtype); H5Tclose(native_type); H5Tclose(tid_m); + + /* Free memory for test data */ + free(points); + free(check); + PASSED(); return 0; - error: +error: + if(points!=NULL) + free(points); + if(check!=NULL) + free(check); return -1; } @@ -416,6 +440,8 @@ test_compound_dtype(hid_t file) if((native_type=H5Tget_native_type(dtype, H5T_DIR_DEFAULT))<0) goto error; + if(sizeof(s1)!=H5Tget_size(native_type)) + goto error; if(!H5Tequal(native_type, tid2)) goto error; @@ -610,7 +636,7 @@ test_array_dtype(hid_t file) /* Initialize the dataset */ for(i = n = 0, temp_point=points; i < 100; i++) for(j = 0; j < 200; j++) - for(k = 0; k < 5; k++) { + for(k = 0; k < 5; k++,temp_point++) { temp_point->c= 't'; temp_point->i= n++; temp_point->l= (i*10+j*100)*n; @@ -676,7 +702,7 @@ test_array_dtype(hid_t file) /* Check that the values read are the same as the values written */ for (i = 0, temp_point=points, temp_check=check; i < 100; i++) { for (j = 0; j < 200; j++) { - for (k = 0; k < 5; k++) { + for (k = 0; k < 5; k++, temp_point++,temp_check++) { if (temp_point->c != temp_check->c || temp_point->i != temp_check->i || temp_point->l != temp_check->l ) { |