diff --git a/CMakeLists.txt b/CMakeLists.txt index 44ed1ce43..bd2d78a9e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1524,7 +1524,7 @@ ENDMACRO() MACRO(build_bin_test_no_prefix F) build_bin_test(${F}) IF(MSVC) - SET_PROPERTY(TEST ${F} PROPERTY FOLDER "tests/") + #SET_PROPERTY(TEST ${F} PROPERTY FOLDER "tests/") SET_TARGET_PROPERTIES(${F} PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) SET_TARGET_PROPERTIES(${F} PROPERTIES RUNTIME_OUTPUT_DIRECTORY_DEBUG diff --git a/h5_test/CMakeLists.txt b/h5_test/CMakeLists.txt index 00ba0671c..5b51ddfd8 100644 --- a/h5_test/CMakeLists.txt +++ b/h5_test/CMakeLists.txt @@ -1,4 +1,4 @@ -SET(H5TESTS tst_h_files tst_h_files2 tst_h_files4 tst_h_atts tst_h_atts3 tst_h_atts4 tst_h_vars tst_h_vars2 tst_h_vars3 tst_h_grps tst_h_compounds tst_h_compounds2 tst_h_wrt_cmp tst_h_rd_cmp tst_h_vl tst_h_opaques tst_h_strings tst_h_strings1 tst_h_strings2 tst_h_ints tst_h_dimscales tst_h_dimscales1 tst_h_dimscales2 tst_h_dimscales3 tst_h_enums tst_h_dimscales4) +SET(H5TESTS tst_h_files tst_h_files2 tst_h_files4 tst_h_atts tst_h_atts3 tst_h_atts4 tst_h_vars tst_h_vars2 tst_h_vars3 tst_h_grps tst_h_compounds tst_h_compounds2 tst_h_wrt_cmp tst_h_vl tst_h_opaques tst_h_strings tst_h_strings1 tst_h_strings2 tst_h_ints tst_h_dimscales tst_h_dimscales1 tst_h_dimscales2 tst_h_dimscales3 tst_h_enums tst_h_dimscales4) FILE(GLOB COPY_FILES ${CMAKE_CURRENT_SOURCE_DIR}/*.h5 ${CMAKE_CURRENT_SOURCE_DIR}/*.nc) FILE(COPY ${COPY_FILES} DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/) @@ -12,5 +12,3 @@ FOREACH(CTEST ${H5TESTS}) ) ADD_TEST(${CTEST} ${EXECUTABLE_OUTPUT_PATH}/${CTEST}) ENDFOREACH() - -SET_TESTS_PROPERTIES(tst_h_rd_cmp PROPERTIES DEPENDS tst_h_wrt_cmp) diff --git a/h5_test/Makefile.am b/h5_test/Makefile.am index 243e0d4b3..6d2339495 100644 --- a/h5_test/Makefile.am +++ b/h5_test/Makefile.am @@ -7,6 +7,7 @@ # only use HDF5; these tests don't use netCDF at all. # # If one of these tests fails, then netCDF-4 will not work correctly. +# Ed Hartnett, Ward Fisher # Set AM_CPPFLAGS and AM_LDFLAGS based on user choices. include $(top_srcdir)/lib_flags.am @@ -46,7 +47,8 @@ endif # USE_VALGRIND_TESTS # We must include these files in the distribution. EXTRA_DIST = run_par_tests.sh run_valgrind_tests.sh \ ref_tst_h_compounds.h5 ref_tst_h_compounds2.h5 run_par_tests.sh \ -run_valgrind_tests.sh ref_tst_compounds.nc h5_err_macros.h CMakeLists.txt +run_valgrind_tests.sh ref_tst_compounds.nc h5_err_macros.h \ +CMakeLists.txt # Clean up test results. CLEANFILES = tst_h_*.h5 diff --git a/h5_test/tst_h_files.c b/h5_test/tst_h_files.c index 620919660..fa95b6c43 100644 --- a/h5_test/tst_h_files.c +++ b/h5_test/tst_h_files.c @@ -236,7 +236,7 @@ main() printf("*** large file test for HDF5..."); { hid_t fapl_id, fcpl_id, fileid, grpid, spaceid, datasetid; - hid_t dim1_dimscaleid, dim2_dimscaleid, plistid, datasetid2, file_spaceid; + hid_t dim1_dimscaleid, dim2_dimscaleid, plistid, file_spaceid; hid_t mem_spaceid, xfer_plistid, native_typeid; hsize_t *chunksize, dims[1], maxdims[1], *dimsize, *maxdimsize; hsize_t fdims[MAX_DIMS], fmaxdims[MAX_DIMS]; diff --git a/h5_test/tst_h_rd_cmp.c b/h5_test/tst_h_rd_cmp.c deleted file mode 100644 index 4c733a855..000000000 --- a/h5_test/tst_h_rd_cmp.c +++ /dev/null @@ -1,62 +0,0 @@ -/* This is part of the netCDF package. - Copyright 2007 University Corporation for Atmospheric Research/Unidata - See COPYRIGHT file for conditions of use. - -n Test HDF5 compound types. -*/ - -#include "h5_err_macros.h" -#include - -#define FILE_NAME "tst_h_wrt_cmp.h5" -#define DIM1_LEN 3 -#define COMPOUND_NAME "cmp" -#define VAR_NAME "var" - -int -main() -{ - hid_t fileid, access_plist, spaceid, typeid; - hid_t datasetid; - struct s1 { - unsigned char c1; - double d; - } data[DIM1_LEN]; - int i; - - printf("\n*** Checking HDF5 compound types (we're almost there kids).\n"); - printf("*** Checking packing of HDF5 compound types..."); - - /* Open file. */ - if ((access_plist = H5Pcreate(H5P_FILE_ACCESS)) < 0) ERR; - if (H5Pset_fclose_degree(access_plist, H5F_CLOSE_STRONG)) ERR; - if ((fileid = H5Fopen(FILE_NAME, H5F_ACC_RDONLY, access_plist)) < 0) ERR; - - /* Open dataset. */ - if ((datasetid = H5Dopen1(fileid, VAR_NAME)) < 0) ERR; - - /* Check space. */ - if ((spaceid = H5Dget_space(datasetid)) < 0) ERR; - if (H5Sget_simple_extent_ndims(spaceid) != 1) ERR; - if (H5Sget_simple_extent_npoints(spaceid) != DIM1_LEN) ERR; - - /* Get type. */ - if ((typeid = H5Dget_type(datasetid)) < 0) ERR; - -/* if ((native_type = H5Tget_native_type(typeid, H5T_DIR_DEFAULT)) < 0) ERR;*/ - - /* Read the data. */ - if (H5Dread(datasetid, typeid, H5S_ALL, H5S_ALL, H5P_DEFAULT, - data) < 0) ERR; - - /* Check the data. */ - for (i=0; icontroller; NC* ncsub; char* definename; @@ -738,7 +737,6 @@ buildvars(NCDAPCOMMON* dapcomm) NCerror ncstat = NC_NOERR; int varid; NClist* varnodes = dapcomm->cdf.ddsroot->tree->varnodes; - NC* drno = dapcomm->controller; char* definename; ASSERT((varnodes != NULL)); @@ -816,7 +814,6 @@ buildglobalattrs(NCDAPCOMMON* dapcomm, CDFnode* root) char *nltxt, *p; NCbytes* buf = NULL; NClist* cdfnodes; - NC* drno = dapcomm->controller; if(root->attributes != NULL) { for(i=0;iattributes);i++) { @@ -895,7 +892,6 @@ buildattribute(NCDAPCOMMON* dapcomm, NCattribute* att, nc_type vartype, int vari int i; NCerror ncstat = NC_NOERR; unsigned int nvalues = nclistlength(att->values); - NC* drno = dapcomm->controller; /* If the type of the attribute is string, then we need*/ /* to convert to a single character string by concatenation. diff --git a/libsrc/nc3internal.c b/libsrc/nc3internal.c index c6e983a14..bbb2a624b 100644 --- a/libsrc/nc3internal.c +++ b/libsrc/nc3internal.c @@ -1570,93 +1570,114 @@ NC3_inq_base_pe(int ncid, int *pe) /* * !_CRAYMPP, only pe 0 is valid */ - *pe = 0; + if (pe) *pe = 0; #endif /* _CRAYMPP && LOCKNUMREC */ return NC_NOERR; } +/** + * Return the file format. + * + * \param ncid the ID of the open file. + + * \param formatp a pointer that gets the format. Ignored if NULL. + * + * \returns NC_NOERR No error. + * \returns NC_EBADID Bad ncid. + * \internal + * \author Ed Hartnett, Dennis Heimbigner + */ int NC3_inq_format(int ncid, int *formatp) { - int status; - NC *nc; - NC3_INFO* nc3; + int status; + NC *nc; + NC3_INFO* nc3; - status = NC_check_id(ncid, &nc); - if(status != NC_NOERR) - return status; - nc3 = NC3_DATA(nc); + status = NC_check_id(ncid, &nc); + if(status != NC_NOERR) + return status; + nc3 = NC3_DATA(nc); - /* only need to check for netCDF-3 variants, since this is never called for netCDF-4 files */ + /* Why even call this function with no format pointer? */ + if (!formatp) + return NC_NOERR; + + /* only need to check for netCDF-3 variants, since this is never called for netCDF-4 files */ #ifdef USE_CDF5 - if (fIsSet(nc3->flags, NC_64BIT_DATA)) - *formatp = NC_FORMAT_CDF5; - else + if (fIsSet(nc3->flags, NC_64BIT_DATA)) + *formatp = NC_FORMAT_CDF5; + else #endif if (fIsSet(nc3->flags, NC_64BIT_OFFSET)) - *formatp = NC_FORMAT_64BIT_OFFSET; - else - *formatp = NC_FORMAT_CLASSIC; - return NC_NOERR; + *formatp = NC_FORMAT_64BIT_OFFSET; + else + *formatp = NC_FORMAT_CLASSIC; + return NC_NOERR; } +/** + * Return the extended format (i.e. the dispatch model), plus the mode + * associated with an open file. + * + * \param ncid the ID of the open file. + * \param formatp a pointer that gets the extended format. Note that + * this is not the same as the format provided by nc_inq_format(). The + * extended foramt indicates the dispatch layer model. Classic, 64-bit + * offset, and CDF5 files all have an extended format of + * ::NC_FORMATX_NC3. Ignored if NULL. + * \param modep a pointer that gets the open/create mode associated with + * this file. Ignored if NULL. + * + * \returns NC_NOERR No error. + * \returns NC_EBADID Bad ncid. + * \internal + * \author Dennis Heimbigner + */ int NC3_inq_format_extended(int ncid, int *formatp, int *modep) { - int status; - NC *nc; + int status; + NC *nc; - status = NC_check_id(ncid, &nc); - if(status != NC_NOERR) - return status; - if(formatp) *formatp = NC_FORMATX_NC3; - if(modep) *modep = nc->mode; - return NC_NOERR; + status = NC_check_id(ncid, &nc); + if(status != NC_NOERR) + return status; + if(formatp) *formatp = NC_FORMATX_NC3; + if(modep) *modep = nc->mode; + return NC_NOERR; } -/* The sizes of types may vary from platform to platform, but within - * netCDF files, type sizes are fixed. */ -#define NC_BYTE_LEN 1 -#define NC_CHAR_LEN 1 -#define NC_SHORT_LEN 2 -#define NC_INT_LEN 4 -#define NC_FLOAT_LEN 4 -#define NC_DOUBLE_LEN 8 -#define NUM_ATOMIC_TYPES 6 - -/* This netCDF-4 function proved so popular that a netCDF-classic - * version is provided. You're welcome. */ +/** + * Determine name and size of netCDF type. This netCDF-4 function + * proved so popular that a netCDF-classic version is provided. You're + * welcome. + * + * \param ncid The ID of an open file. + * \param typeid The ID of a netCDF type. + * \param name Pointer that will get the name of the type. Maximum + * size will be NC_MAX_NAME. Ignored if NULL. + * \param size Pointer that will get size of type in bytes. Ignored if + * null. + * + * \returns NC_NOERR No error. + * \returns NC_EBADID Bad ncid. + * \returns NC_EBADTYPE Bad typeid. + * \internal + * \author Ed Hartnett + */ int NC3_inq_type(int ncid, nc_type typeid, char *name, size_t *size) { -#if 0 - int atomic_size[NUM_ATOMIC_TYPES] = {NC_BYTE_LEN, NC_CHAR_LEN, NC_SHORT_LEN, - NC_INT_LEN, NC_FLOAT_LEN, NC_DOUBLE_LEN}; - char atomic_name[NUM_ATOMIC_TYPES][NC_MAX_NAME + 1] = {"byte", "char", "short", - "int", "float", "double"}; -#endif - NC *ncp; int stat = NC_check_id(ncid, &ncp); if (stat != NC_NOERR) - return stat; + return stat; - /* Only netCDF classic model and CDF-5 need to be handled. */ - /* After discussion, this seems like an artificial limitation. - See https://github.com/Unidata/netcdf-c/issues/240 for more - discussion. */ - /* - if((ncp->mode & NC_CDF5) != 0) { - if (typeid < NC_BYTE || typeid > NC_STRING) - return NC_EBADTYPE; - } else if (typeid < NC_BYTE || typeid > NC_DOUBLE) - return NC_EBADTYPE; - */ if(typeid < NC_BYTE || typeid > NC_STRING) - return NC_EBADTYPE; + return NC_EBADTYPE; - /* Give the user the values they want. Subtract one because types - * are numbered starting at 1, not 0. */ + /* Give the user the values they want. */ if (name) strcpy(name, NC_atomictypename(typeid)); if (size) @@ -1666,36 +1687,6 @@ NC3_inq_type(int ncid, nc_type typeid, char *name, size_t *size) } /**************************************************/ -#if 0 -int -NC3_set_content(int ncid, size_t size, void* memory) -{ - int status = NC_NOERR; - NC *nc; - NC3_INFO* nc3; - - status = NC_check_id(ncid, &nc); - if(status != NC_NOERR) - return status; - nc3 = NC3_DATA(nc); - -#ifdef USE_DISKLESS - fClr(nc3->flags, NC_CREAT); - status = memio_set_content(nc3->nciop, size, memory); - if(status != NC_NOERR) goto done; - status = nc_get_NC(nc3); - if(status != NC_NOERR) goto done; -#else - status = NC_EDISKLESS; -#endif - -done: - return status; -} -#endif - -/**************************************************/ - int nc_delete_mp(const char * path, int basepe) { diff --git a/libsrc4/nc4var.c b/libsrc4/nc4var.c index e9d9006ff..889c7f7a6 100644 --- a/libsrc4/nc4var.c +++ b/libsrc4/nc4var.c @@ -1152,7 +1152,6 @@ NC4_def_var_filter(int ncid, int varid, unsigned int id, size_t nparams, const u NC_GRP_INFO_T *grp; NC_HDF5_FILE_INFO_T *h5; NC_VAR_INFO_T *var; - NC_DIM_INFO_T *dim; LOG((2, "%s: ncid 0x%x varid %d", __func__, ncid, varid)); diff --git a/libsrc4/ncfunc.c b/libsrc4/ncfunc.c index c73840f5c..0f7cd4c0f 100644 --- a/libsrc4/ncfunc.c +++ b/libsrc4/ncfunc.c @@ -1,40 +1,66 @@ /* + Copyright 2003, University Corporation for Atmospheric Research. See + netcdf-4/docs/COPYRIGHT file for copying and redistribution + conditions. -This file is part of netcdf-4, a netCDF-like interface for HDF5, or a -HDF5 backend for netCDF, depending on your point of view. + This file is part of netcdf-4, a netCDF-like interface for HDF5, or a + HDF5 backend for netCDF, depending on your point of view. -This file handles the nc_ calls, calling the appropriate nc3 or nc4 -function, depending on ncid. + This file handles the (useless) *_base_pe() functions, and the + inq_format functions. + + @author Ed Hartnett, Dennis Heimbigner -Copyright 2003, University Corporation for Atmospheric Research. See -netcdf-4/docs/COPYRIGHT file for copying and redistribution -conditions. */ #include "nc4internal.h" #include "nc4dispatch.h" -/* This will return the length of a netcdf data type in bytes. Since - we haven't added any new types, I just call the v3 function. - Ed Hartnett 10/43/03 -*/ - -/* This function only does anything for netcdf-3 files. */ +/** + * This function only does anything for netcdf-3 files. + * + * \param ncid File ID (ignored). + * \param pe Processor element (ignored). + * + * \returns ::NC_ENOTNC3 Not a netCDF classic format file. + * \internal + * \author Ed Hartnett + */ int NC4_set_base_pe(int ncid, int pe) { - return NC_ENOTNC3; + return NC_ENOTNC3; } -/* This function only does anything for netcdf-3 files. */ +/** + * This function only does anything for netcdf-3 files. + * + * \param ncid File ID (ignored). + * \param pe Pointer to processor element. Ignored if NULL. Gets a 0 + * if present. + * + * \returns ::NC_ENOTNC3 Not a netCDF classic format file. + * \internal + * \author Ed Hartnett + */ int NC4_inq_base_pe(int ncid, int *pe) { return NC_ENOTNC3; } -/* Get the format (i.e. classic, 64-bit-offset, or netcdf-4) of an - * open file. */ +/** + * Get the format (i.e. NC_FORMAT_NETCDF4 pr + * NC_FORMAT_NETCDF4_CLASSIC) of an open netCDF-4 file. + * + * \param ncid File ID (ignored). + * \param formatp Pointer that gets the constant indicating format. + + * \returns ::NC_NOERR No error. + * \returns ::NC_EBADID Bad ncid. + * \internal + * \author Ed Hartnett + */ int NC4_inq_format(int ncid, int *formatp) { @@ -60,7 +86,24 @@ NC4_inq_format(int ncid, int *formatp) return NC_NOERR; } -/* Get the extended format of an open file. */ +/** + * Return the extended format (i.e. the dispatch model), plus the mode + * associated with an open file. + * + * \param ncid File ID (ignored). + * \param formatp a pointer that gets the extended format. Note that + * this is not the same as the format provided by nc_inq_format(). The + * extended foramt indicates the dispatch layer model. NetCDF-4 files + * will always get NC_FORMATX_NC4 for netCDF files, NC_FORMATX_HDF4 + * for HDF4 files. + * \param modep a pointer that gets the open/create mode associated with + * this file. Ignored if NULL. + + * \returns ::NC_NOERR No error. + * \returns ::NC_EBADID Bad ncid. + * \internal + * \author Dennis Heimbigner + */ int NC4_inq_format_extended(int ncid, int *formatp, int *modep) { @@ -77,10 +120,10 @@ NC4_inq_format_extended(int ncid, int *formatp, int *modep) if(formatp) { #ifdef USE_HDF4 - /* Distinguish HDF5 from HDF4 */ - *formatp = (h5->hdf4 ? NC_FORMATX_NC_HDF4 : NC_FORMATX_NC_HDF5); + /* Distinguish HDF5 from HDF4 */ + *formatp = (h5->hdf4 ? NC_FORMATX_NC_HDF4 : NC_FORMATX_NC_HDF5); #else /* USE_HDF4 */ - *formatp = NC_FORMATX_NC_HDF5; + *formatp = NC_FORMATX_NC_HDF5; #endif /* USE_HDF4 */ } return NC_NOERR; diff --git a/nc_test/Makefile.am b/nc_test/Makefile.am index 6bae3cabe..73b1298ed 100644 --- a/nc_test/Makefile.am +++ b/nc_test/Makefile.am @@ -9,23 +9,14 @@ include $(top_srcdir)/lib_flags.am AM_CPPFLAGS += -I$(top_srcdir)/libsrc AM_CPPFLAGS += -DTOPSRCDIR=${abs_top_srcdir} AM_CPPFLAGS += -DTOPBINDIR=${abs_top_bindir} - -# These files are created by the tests. -CLEANFILES = nc_test_classic.nc nc_test_64bit.nc nc_test_netcdf4.nc \ -tst_*.nc t_nc.nc large_files.nc quick_large_files.nc \ -tst_diskless.nc tst_diskless2.nc \ -tst_diskless3.nc tst_diskless3_file.cdl tst_diskless3_memory.cdl \ -tst_diskless4.cdl tst_diskless4.nc tst_formatx.nc nc_test_cdf5.nc \ -unlim.nc tst_inq_type.nc tst_elatefill.nc tst_global_fillval.nc \ -tst_large_cdf5.nc tst_max_var_dims.nc - -check_PROGRAMS = +LDADD = ${top_builddir}/liblib/libnetcdf.la +AM_CPPFLAGS += -I$(top_builddir)/liblib -I$(top_builddir)/include -I$(top_srcdir)/libsrc # These are the tests which are always run. -TESTPROGRAMS = t_nc tst_small nc_test tst_misc tst_norm \ - tst_names tst_nofill tst_nofill2 tst_nofill3 tst_atts3 \ - tst_meta tst_inq_type tst_utf8_validate tst_utf8_phrases \ - tst_global_fillval tst_max_var_dims +TESTPROGRAMS = t_nc tst_small nc_test tst_misc tst_norm tst_names \ +tst_nofill tst_nofill2 tst_nofill3 tst_atts3 tst_meta tst_inq_type \ +tst_utf8_validate tst_utf8_phrases tst_global_fillval \ +tst_max_var_dims tst_formats if USE_NETCDF4 TESTPROGRAMS += tst_atts tst_put_vars tst_elatefill @@ -45,11 +36,8 @@ endif # These are the source files for the main workhorse test program, # nc_test. If you pass nc_test, you are doing well. -nc_test_SOURCES = nc_test.c error.c test_get.c test_put.c \ -test_read.c test_write.c util.c error.h tests.h - -LDADD = ${top_builddir}/liblib/libnetcdf.la -AM_CPPFLAGS += -I$(top_builddir)/liblib -I$(top_builddir)/include -I$(top_srcdir)/libsrc +nc_test_SOURCES = nc_test.c error.c test_get.c test_put.c test_read.c \ +test_write.c util.c error.h tests.h # If the user asked for large file tests, then add them. if LARGE_FILE_TESTS @@ -60,11 +48,10 @@ endif # LARGE_FILE_TESTS if BUILD_BENCHMARKS TESTPROGRAMS += testnc3perf testnc3perf_SOURCES = testnc3perf.c -CLEANFILES += benchmark.nc endif # Set up the tests. -check_PROGRAMS += $(TESTPROGRAMS) +check_PROGRAMS = $(TESTPROGRAMS) # Build Diskless test helpers if BUILD_DISKLESS @@ -105,13 +92,19 @@ endif # USE_VALGRIND_TESTS # Distribute the .c files so that m4 isn't required on the users # machine. -EXTRA_DIST = test_get.m4 test_put.m4 run_valgrind_tests.sh \ -run_diskless.sh run_diskless2.sh run_diskless5.sh \ -run_mmap.sh run_pnetcdf_test.sh \ -test_read.m4 test_write.m4 +EXTRA_DIST = test_get.m4 test_put.m4 run_valgrind_tests.sh \ +run_diskless.sh run_diskless2.sh run_diskless5.sh run_mmap.sh \ +run_pnetcdf_test.sh test_read.m4 test_write.m4 ref_tst_diskless2.cdl \ +tst_diskless5.cdl CMakeLists.txt -# ref_tst_diskless2.cdl is for diff comparison and to produce tst_diskless2.c -EXTRA_DIST += ref_tst_diskless2.cdl tst_diskless5.cdl CMakeLists.txt +# These files are created by the tests. +CLEANFILES = nc_test_classic.nc nc_test_64bit.nc nc_test_netcdf4.nc \ +tst_*.nc t_nc.nc large_files.nc quick_large_files.nc tst_diskless.nc \ +tst_diskless2.nc tst_diskless3.nc tst_diskless3_file.cdl \ +tst_diskless3_memory.cdl tst_diskless4.cdl tst_diskless4.nc \ +tst_formatx.nc nc_test_cdf5.nc unlim.nc tst_inq_type.nc \ +tst_elatefill.nc tst_global_fillval.nc tst_large_cdf5.nc \ +tst_max_var_dims.nc benchmark.nc # Only clean these on maintainer-clean, because they require m4 to # regenerate. diff --git a/nc_test/large_files.c b/nc_test/large_files.c index f92d78543..a723c81c1 100644 --- a/nc_test/large_files.c +++ b/nc_test/large_files.c @@ -11,7 +11,7 @@ This program is an add-on test to check very large 64-bit offset files (8 GB, so make sure you have the disk space!). - $Id: large_files.c,v 1.4 2008/03/10 17:02:41 ed Exp $ + Ed Hartnett, Ward Fisher */ #include @@ -21,6 +21,11 @@ #include #define FILE_NAME "large_files.nc" +#define NUMRECS 2 +#define I_LEN 4106 +#define J_LEN 1023 +#define K_LEN 1023 +#define N_LEN 2 static void check_err(const int stat, const int line, const char *file) { @@ -36,7 +41,7 @@ main(int argc, char **argv) { int stat; /* return status */ char file_name[NC_MAX_NAME + 1]; int ncid; /* netCDF id */ - int rec, i, j, k; + int rec, i, j; int x[] = {42, 21}; /* dimension ids */ @@ -46,17 +51,6 @@ main(int argc, char **argv) { int k_dim; int n_dim; -#define NUMRECS 2 -#define I_LEN 4106 - //#define I_LEN 5 - //#if 0 - //#define J_LEN 214700000 - //#endif - //#define J_LEN 500000000 -#define J_LEN 1023 -#define K_LEN 1023 -#define N_LEN 2 - /* dimension lengths */ size_t rec_len = NC_UNLIMITED; size_t i_len = I_LEN; diff --git a/nc_test/quick_large_files.c b/nc_test/quick_large_files.c index a1209e510..913916c04 100644 --- a/nc_test/quick_large_files.c +++ b/nc_test/quick_large_files.c @@ -1,12 +1,12 @@ /* - Copyright 2004-2006, UCAR/Unidata - See COPYRIGHT file for copying and redistribution conditions. + Copyright 2004-2006, UCAR/Unidata + See COPYRIGHT file for copying and redistribution conditions. - This program (quickly, but not thoroughly) tests the large file - features. It turns off fill mode to quickly create an 8 gb file, and - write one value is written, nothing is read. + This program (quickly, but not thoroughly) tests the large file + features. It turns off fill mode to quickly create an 8 gb file, and + write one value is written, nothing is read. - $Id: quick_large_files.c,v 1.18 2008/06/05 15:10:16 ed Exp $ + Ed Hartnett */ #include #include @@ -35,539 +35,539 @@ int main(int argc, char **argv) { - int ncid, spockid, kirkid, dimids[NUMDIMS], recdimid, scottyid; - int int_val_in, int_val_out = 99; - double double_val_in, double_val_out = 1.79769313486230e+308; /* from ncx.h */ - size_t index[2] = {QTR_CLASSIC_MAX-1, 0}; - char file_name[NC_MAX_NAME + 1]; + int ncid, spockid, kirkid, dimids[NUMDIMS], recdimid, scottyid; + int int_val_in, int_val_out = 99; + double double_val_in, double_val_out = 1.79769313486230e+308; /* from ncx.h */ + size_t index[2] = {QTR_CLASSIC_MAX-1, 0}; + char file_name[NC_MAX_NAME + 1]; - /* These are for the revolutionary generals tests. */ - int cromwellid, collinsid, washingtonid; - int napoleanid, dimids_gen[4], dimids_gen1[4]; + /* These are for the revolutionary generals tests. */ + int cromwellid, collinsid, washingtonid; + int napoleanid, dimids_gen[4], dimids_gen1[4]; - /* All create modes will be anded to this. All tests will be run - twice, with and without NC_SHARE.*/ - int cmode_run; - int cflag = NC_CLOBBER; + /* All create modes will be anded to this. All tests will be run + twice, with and without NC_SHARE.*/ + int cmode_run; + int cflag = NC_CLOBBER; - int res; + int res; - printf("\n*** Testing large files, quickly.\n"); + printf("\n*** Testing large files, quickly.\n"); - for (cmode_run=0; cmode_run<2; cmode_run++) - { - size_t big_index = (size_t)MAX_CLASSIC_BYTES + 10; - /* On second pass, try using NC_SHARE. */ - if (cmode_run == 1) - { - cflag |= NC_SHARE; - printf("*** Turned on NC_SHARE for subsequent tests.\n"); - } + for (cmode_run=0; cmode_run<2; cmode_run++) + { + size_t big_index = (size_t)MAX_CLASSIC_BYTES + 10; + /* On second pass, try using NC_SHARE. */ + if (cmode_run == 1) + { + cflag |= NC_SHARE; + printf("*** Turned on NC_SHARE for subsequent tests.\n"); + } - /* Create a netCDF 64-bit offset format file. Write a value. */ - sprintf(file_name, "%s/%s", TEMP_LARGE, FILE_NAME); - printf("*** Creating %s for 64-bit offset large file test...", file_name); - if ((res = nc_create(file_name, cflag|NC_64BIT_OFFSET, &ncid))) - ERR; + /* Create a netCDF 64-bit offset format file. Write a value. */ + sprintf(file_name, "%s/%s", TEMP_LARGE, FILE_NAME); + printf("*** Creating %s for 64-bit offset large file test...", file_name); + { + if ((res = nc_create(file_name, cflag|NC_64BIT_OFFSET, &ncid))) + ERR; - if ((res = nc_set_fill(ncid, NC_NOFILL, NULL))) - ERR; - if ((res = nc_def_dim(ncid, "longdim", QTR_CLASSIC_MAX, dimids))) - ERR; - /* test bug fix writing record beyond 2**31 */ - if ((res = nc_def_dim(ncid, "longerdim", NC_UNLIMITED, &recdimid))) - ERR; - if ((res = nc_def_var(ncid, "spock", NC_DOUBLE, NUMDIMS, - dimids, &spockid))) - ERR; - if ((res = nc_def_var(ncid, "kirk", NC_DOUBLE, NUMDIMS, - dimids, &kirkid))) - ERR; - if ((res = nc_def_var(ncid, "scotty", NC_BYTE, 1, - &recdimid, &scottyid))) - ERR; - if ((res = nc_enddef(ncid))) - ERR; - if ((res = nc_put_var1_double(ncid, kirkid, index, &double_val_out))) - ERR; - if ((res = nc_put_var1_int(ncid, scottyid, &big_index, &int_val_out))) - ERR; - if ((res = nc_get_var1_int(ncid, scottyid, &big_index, &int_val_in))) - ERR; - if (int_val_in != int_val_out) - ERR; - if ((res = nc_close(ncid))) - ERR; - printf("ok\n"); + if ((res = nc_set_fill(ncid, NC_NOFILL, NULL))) + ERR; + if ((res = nc_def_dim(ncid, "longdim", QTR_CLASSIC_MAX, dimids))) + ERR; + /* test bug fix writing record beyond 2**31 */ + if ((res = nc_def_dim(ncid, "longerdim", NC_UNLIMITED, &recdimid))) + ERR; + if ((res = nc_def_var(ncid, "spock", NC_DOUBLE, NUMDIMS, + dimids, &spockid))) + ERR; + if ((res = nc_def_var(ncid, "kirk", NC_DOUBLE, NUMDIMS, + dimids, &kirkid))) + ERR; + if ((res = nc_def_var(ncid, "scotty", NC_BYTE, 1, + &recdimid, &scottyid))) + ERR; + if ((res = nc_enddef(ncid))) + ERR; + if ((res = nc_put_var1_double(ncid, kirkid, index, &double_val_out))) + ERR; + if ((res = nc_put_var1_int(ncid, scottyid, &big_index, &int_val_out))) + ERR; + if ((res = nc_get_var1_int(ncid, scottyid, &big_index, &int_val_in))) + ERR; + if (int_val_in != int_val_out) + ERR; + if ((res = nc_close(ncid))) + ERR; + } + SUMMARIZE_ERR; - /* How about a meteorological data file about the weather - experience by various generals of revolutionary armies? + /* How about a meteorological data file about the weather + experience by various generals of revolutionary armies? - This has 3 dims, 4 vars. The dimensions are such that this will - (just barely) not fit in a classic format file. The first three - vars are cromwell, 536870911 bytes, washington, 2*536870911 - bytes, and napolean, 536870911 bytes. That's a grand total of - 2147483644 bytes. Recall our magic limit for the combined size - of all fixed vars: 2 GiB - 4 bytes, or 2147483644. So you would - think these would exactly fit, unless you realized that - everything is rounded to a 4 byte boundary, so you need to add - some bytes for that (how many?), and that pushes us over the - limit. + This has 3 dims, 4 vars. The dimensions are such that this will + (just barely) not fit in a classic format file. The first three + vars are cromwell, 536870911 bytes, washington, 2*536870911 + bytes, and napolean, 536870911 bytes. That's a grand total of + 2147483644 bytes. Recall our magic limit for the combined size + of all fixed vars: 2 GiB - 4 bytes, or 2147483644. So you would + think these would exactly fit, unless you realized that + everything is rounded to a 4 byte boundary, so you need to add + some bytes for that (how many?), and that pushes us over the + limit. - We will create this file twice, once to ensure it succeeds (with - 64-bit offset format), and once to make sure it fails (with - classic format). Then some variations to check record var - boundaries. - */ - printf("*** Now a 64-bit offset, large file, fixed var test..."); - if ((res = nc_create(file_name, cflag|NC_64BIT_OFFSET, &ncid))) - ERR; - if ((res = nc_set_fill(ncid, NC_NOFILL, NULL))) - ERR; - if ((res = nc_def_dim(ncid, "revolutionary_fervor", - QTR_CLASSIC_MAX, &dimids_gen[0]))) - ERR; - if ((res = nc_def_dim(ncid, "post_revoultionary_hangover", - QTR_CLASSIC_MAX, &dimids_gen[1]))) - ERR; - if ((res = nc_def_dim(ncid, "ruthlessness", 100, &dimids_gen[2]))) - ERR; - if ((res = nc_def_var(ncid, "Cromwell", NC_BYTE, 1, &dimids_gen[0], - &cromwellid))) - ERR; - if ((res = nc_def_var(ncid, "Washington", NC_SHORT, 1, &dimids_gen[1], - &washingtonid))) - ERR; - if ((res = nc_def_var(ncid, "Napolean", NC_BYTE, 1, &dimids_gen[0], - &napoleanid))) - ERR; - if ((res = nc_def_var(ncid, "Collins", NC_DOUBLE, 1, &dimids_gen[2], - &collinsid))) - ERR; - if ((res = nc_enddef(ncid))) - ERR; - printf("ok\n"); + We will create this file twice, once to ensure it succeeds (with + 64-bit offset format), and once to make sure it fails (with + classic format). Then some variations to check record var + boundaries. + */ + printf("*** Now a 64-bit offset, large file, fixed var test..."); + if ((res = nc_create(file_name, cflag|NC_64BIT_OFFSET, &ncid))) + ERR; + if ((res = nc_set_fill(ncid, NC_NOFILL, NULL))) + ERR; + if ((res = nc_def_dim(ncid, "revolutionary_fervor", + QTR_CLASSIC_MAX, &dimids_gen[0]))) + ERR; + if ((res = nc_def_dim(ncid, "post_revoultionary_hangover", + QTR_CLASSIC_MAX, &dimids_gen[1]))) + ERR; + if ((res = nc_def_dim(ncid, "ruthlessness", 100, &dimids_gen[2]))) + ERR; + if ((res = nc_def_var(ncid, "Cromwell", NC_BYTE, 1, &dimids_gen[0], + &cromwellid))) + ERR; + if ((res = nc_def_var(ncid, "Washington", NC_SHORT, 1, &dimids_gen[1], + &washingtonid))) + ERR; + if ((res = nc_def_var(ncid, "Napolean", NC_BYTE, 1, &dimids_gen[0], + &napoleanid))) + ERR; + if ((res = nc_def_var(ncid, "Collins", NC_DOUBLE, 1, &dimids_gen[2], + &collinsid))) + ERR; + if ((res = nc_enddef(ncid))) + ERR; + SUMMARIZE_ERR; - /* Write a value or two just for fun. */ - /*index[0] = QTR_CLASSIC_MAX - 296; - if ((res = nc_put_var1_int(ncid, napoleanid, index, &int_val_out))) - ERR; - if ((res = nc_get_var1_int(ncid, napoleanid, index, &int_val_in))) - ERR; - if (int_val_in != int_val_out) - BAIL2;*/ - printf("*** Now writing some values..."); - index[0] = QTR_CLASSIC_MAX - 295; - if ((res = nc_put_var1_int(ncid, napoleanid, index, &int_val_out))) - ERR; - if ((res = nc_get_var1_int(ncid, napoleanid, index, &int_val_in))) - ERR; - if (int_val_in != int_val_out) - ERR; + /* Write a value or two just for fun. */ + /*index[0] = QTR_CLASSIC_MAX - 296; + if ((res = nc_put_var1_int(ncid, napoleanid, index, &int_val_out))) + ERR; + if ((res = nc_get_var1_int(ncid, napoleanid, index, &int_val_in))) + ERR; + if (int_val_in != int_val_out) + BAIL2;*/ + printf("*** Now writing some values..."); + index[0] = QTR_CLASSIC_MAX - 295; + if ((res = nc_put_var1_int(ncid, napoleanid, index, &int_val_out))) + ERR; + if ((res = nc_get_var1_int(ncid, napoleanid, index, &int_val_in))) + ERR; + if (int_val_in != int_val_out) + ERR; - index[0] = QTR_CLASSIC_MAX - 1; - if ((res = nc_put_var1_int(ncid, napoleanid, index, &int_val_out))) - ERR; - if ((res = nc_get_var1_int(ncid, napoleanid, index, &int_val_in))) - ERR; - if (int_val_in != int_val_out) - ERR; + index[0] = QTR_CLASSIC_MAX - 1; + if ((res = nc_put_var1_int(ncid, napoleanid, index, &int_val_out))) + ERR; + if ((res = nc_get_var1_int(ncid, napoleanid, index, &int_val_in))) + ERR; + if (int_val_in != int_val_out) + ERR; - index[0] = QTR_CLASSIC_MAX - 1; - if ((res = nc_put_var1_int(ncid, washingtonid, index, &int_val_out))) - ERR; - if ((res = nc_get_var1_int(ncid, washingtonid, index, &int_val_in))) - ERR; - if (int_val_in != int_val_out) - ERR; + index[0] = QTR_CLASSIC_MAX - 1; + if ((res = nc_put_var1_int(ncid, washingtonid, index, &int_val_out))) + ERR; + if ((res = nc_get_var1_int(ncid, washingtonid, index, &int_val_in))) + ERR; + if (int_val_in != int_val_out) + ERR; - if ((res = nc_close(ncid))) - ERR; - printf("ok\n"); + if ((res = nc_close(ncid))) + ERR; + SUMMARIZE_ERR; - /* This time it should fail, because we're trying to cram this into - a classic format file. nc_enddef will detect our violations and - give an error. We've*/ - printf("*** Now a classic file which will fail..."); - if ((res = nc_create(file_name, cflag, &ncid))) - ERR; - if ((res = nc_set_fill(ncid, NC_NOFILL, NULL))) - ERR; - if ((res = nc_def_dim(ncid, "revolutionary_fervor", - QTR_CLASSIC_MAX, &dimids_gen[0]))) - ERR; - if ((res = nc_def_dim(ncid, "post_revoultionary_hangover", - QTR_CLASSIC_MAX, &dimids_gen[1]))) - ERR; - if ((res = nc_def_dim(ncid, "ruthlessness", 100, &dimids_gen[2]))) - ERR; - if ((res = nc_def_var(ncid, "Cromwell", NC_BYTE, 1, &dimids_gen[0], - &cromwellid))) - ERR; - if ((res = nc_def_var(ncid, "Washington", NC_SHORT, 1, &dimids_gen[1], - &washingtonid))) - ERR; - if ((res = nc_def_var(ncid, "Napolean", NC_BYTE, 1, &dimids_gen[0], - &napoleanid))) - ERR; - if ((res = nc_def_var(ncid, "Collins", NC_DOUBLE, 1, &dimids_gen[2], - &collinsid))) - ERR; - if ((res = nc_enddef(ncid)) != NC_EVARSIZE) - ERR; - if ((res = nc_close(ncid)) != NC_EVARSIZE) - ERR; - printf("ok\n"); + /* This time it should fail, because we're trying to cram this into + a classic format file. nc_enddef will detect our violations and + give an error. We've*/ + printf("*** Now a classic file which will fail..."); + if ((res = nc_create(file_name, cflag, &ncid))) + ERR; + if ((res = nc_set_fill(ncid, NC_NOFILL, NULL))) + ERR; + if ((res = nc_def_dim(ncid, "revolutionary_fervor", + QTR_CLASSIC_MAX, &dimids_gen[0]))) + ERR; + if ((res = nc_def_dim(ncid, "post_revoultionary_hangover", + QTR_CLASSIC_MAX, &dimids_gen[1]))) + ERR; + if ((res = nc_def_dim(ncid, "ruthlessness", 100, &dimids_gen[2]))) + ERR; + if ((res = nc_def_var(ncid, "Cromwell", NC_BYTE, 1, &dimids_gen[0], + &cromwellid))) + ERR; + if ((res = nc_def_var(ncid, "Washington", NC_SHORT, 1, &dimids_gen[1], + &washingtonid))) + ERR; + if ((res = nc_def_var(ncid, "Napolean", NC_BYTE, 1, &dimids_gen[0], + &napoleanid))) + ERR; + if ((res = nc_def_var(ncid, "Collins", NC_DOUBLE, 1, &dimids_gen[2], + &collinsid))) + ERR; + if ((res = nc_enddef(ncid)) != NC_EVARSIZE) + ERR; + if ((res = nc_close(ncid)) != NC_EVARSIZE) + ERR; + SUMMARIZE_ERR; - /* This will create some max sized 64-bit offset format fixed vars. */ - printf("*** Now a 64-bit offset, simple fixed var create test..."); - if ((res = nc_create(file_name, cflag|NC_64BIT_OFFSET, &ncid))) - ERR; - if ((res = nc_set_fill(ncid, NC_NOFILL, NULL))) - ERR; - if ((res = nc_def_dim(ncid, "revolutionary_fervor", - MAX_CLASSIC_BYTES, &dimids_gen[0]))) - ERR; - if ((res = nc_def_var(ncid, "Cromwell", NC_SHORT, 1, dimids_gen, - &cromwellid))) - ERR; - if ((res = nc_def_var(ncid, "Napolean", NC_SHORT, 1, dimids_gen, - &napoleanid))) - ERR; - if ((res = nc_def_var(ncid, "Collins", NC_DOUBLE, 1, dimids_gen, - &collinsid))) - ERR; - if ((res = nc_enddef(ncid))) - ERR; - if ((res = nc_close(ncid))) - ERR; - printf("ok\n"); + /* This will create some max sized 64-bit offset format fixed vars. */ + printf("*** Now a 64-bit offset, simple fixed var create test..."); + if ((res = nc_create(file_name, cflag|NC_64BIT_OFFSET, &ncid))) + ERR; + if ((res = nc_set_fill(ncid, NC_NOFILL, NULL))) + ERR; + if ((res = nc_def_dim(ncid, "revolutionary_fervor", + MAX_CLASSIC_BYTES, &dimids_gen[0]))) + ERR; + if ((res = nc_def_var(ncid, "Cromwell", NC_SHORT, 1, dimids_gen, + &cromwellid))) + ERR; + if ((res = nc_def_var(ncid, "Napolean", NC_SHORT, 1, dimids_gen, + &napoleanid))) + ERR; + if ((res = nc_def_var(ncid, "Collins", NC_DOUBLE, 1, dimids_gen, + &collinsid))) + ERR; + if ((res = nc_enddef(ncid))) + ERR; + if ((res = nc_close(ncid))) + ERR; + SUMMARIZE_ERR; - /* This will exceed the 64-bit offset format limits for one of the - fixed vars. */ - printf("*** Now a 64-bit offset, over-sized file that will fail..."); - if ((res = nc_create(file_name, cflag|NC_64BIT_OFFSET, &ncid))) - ERR; - if ((res = nc_set_fill(ncid, NC_NOFILL, NULL))) - ERR; - /* max dim size is MAX_CLASSIC_BYTES. */ - if ((res = nc_def_dim(ncid, "revolutionary_fervor", - MAX_CLASSIC_BYTES, dimids_gen))) - ERR; - if ((res = nc_def_var(ncid, "Cromwell", NC_DOUBLE, 1, dimids_gen, - &cromwellid))) - ERR; - if ((res = nc_def_var(ncid, "Washington", NC_SHORT, 1, dimids_gen, - &washingtonid))) - if ((res = nc_enddef(ncid)) != NC_EVARSIZE) - ERR; - if ((res = nc_close(ncid)) != NC_EVARSIZE) - ERR; - printf("ok\n"); + /* This will exceed the 64-bit offset format limits for one of the + fixed vars. */ + printf("*** Now a 64-bit offset, over-sized file that will fail..."); + if ((res = nc_create(file_name, cflag|NC_64BIT_OFFSET, &ncid))) + ERR; + if ((res = nc_set_fill(ncid, NC_NOFILL, NULL))) + ERR; + /* max dim size is MAX_CLASSIC_BYTES. */ + if ((res = nc_def_dim(ncid, "revolutionary_fervor", + MAX_CLASSIC_BYTES, dimids_gen))) + ERR; + if ((res = nc_def_var(ncid, "Cromwell", NC_DOUBLE, 1, dimids_gen, + &cromwellid))) + ERR; + if ((res = nc_def_var(ncid, "Washington", NC_SHORT, 1, dimids_gen, + &washingtonid))) + if ((res = nc_enddef(ncid)) != NC_EVARSIZE) + ERR; + if ((res = nc_close(ncid)) != NC_EVARSIZE) + ERR; + SUMMARIZE_ERR; - /* Now let's see about record vars. First create a 64-bit offset - file with three rec variables, each with the same numbers as - defined above for the fixed var tests. This should all work. */ - printf("*** Now a 64-bit offset, record var file..."); - if ((res = nc_create(file_name, cflag|NC_64BIT_OFFSET, &ncid))) - ERR; - if ((res = nc_set_fill(ncid, NC_NOFILL, NULL))) - ERR; - if ((res = nc_def_dim(ncid, "political_trouble", - NC_UNLIMITED, &dimids_gen[0]))) - ERR; - if ((res = nc_def_dim(ncid, "revolutionary_fervor", - QTR_CLASSIC_MAX, &dimids_gen[1]))) - ERR; - if ((res = nc_def_dim(ncid, "post_revoultionary_hangover", - QTR_CLASSIC_MAX, &dimids_gen[2]))) - ERR; - if ((res = nc_def_dim(ncid, "ruthlessness", 100, &dimids_gen[3]))) - ERR; - if ((res = nc_def_var(ncid, "Cromwell", NC_BYTE, 2, dimids_gen, - &cromwellid))) - ERR; - if ((res = nc_def_var(ncid, "Washington", NC_SHORT, 2, dimids_gen, - &washingtonid))) - ERR; - if ((res = nc_def_var(ncid, "Napolean", NC_BYTE, 2, dimids_gen, - &napoleanid))) - ERR; - if ((res = nc_def_var(ncid, "Collins", NC_DOUBLE, 1, &dimids_gen[2], - &collinsid))) - ERR; - if ((res = nc_enddef(ncid))) - ERR; - if ((res = nc_close(ncid))) - ERR; - printf("ok\n"); + /* Now let's see about record vars. First create a 64-bit offset + file with three rec variables, each with the same numbers as + defined above for the fixed var tests. This should all work. */ + printf("*** Now a 64-bit offset, record var file..."); + if ((res = nc_create(file_name, cflag|NC_64BIT_OFFSET, &ncid))) + ERR; + if ((res = nc_set_fill(ncid, NC_NOFILL, NULL))) + ERR; + if ((res = nc_def_dim(ncid, "political_trouble", + NC_UNLIMITED, &dimids_gen[0]))) + ERR; + if ((res = nc_def_dim(ncid, "revolutionary_fervor", + QTR_CLASSIC_MAX, &dimids_gen[1]))) + ERR; + if ((res = nc_def_dim(ncid, "post_revoultionary_hangover", + QTR_CLASSIC_MAX, &dimids_gen[2]))) + ERR; + if ((res = nc_def_dim(ncid, "ruthlessness", 100, &dimids_gen[3]))) + ERR; + if ((res = nc_def_var(ncid, "Cromwell", NC_BYTE, 2, dimids_gen, + &cromwellid))) + ERR; + if ((res = nc_def_var(ncid, "Washington", NC_SHORT, 2, dimids_gen, + &washingtonid))) + ERR; + if ((res = nc_def_var(ncid, "Napolean", NC_BYTE, 2, dimids_gen, + &napoleanid))) + ERR; + if ((res = nc_def_var(ncid, "Collins", NC_DOUBLE, 1, &dimids_gen[2], + &collinsid))) + ERR; + if ((res = nc_enddef(ncid))) + ERR; + if ((res = nc_close(ncid))) + ERR; + SUMMARIZE_ERR; - /* Now try this record file in classic format. It should fail and - the enddef. Too many bytes in the first record.*/ - printf("*** Now a classic file that's too big and will fail..."); - if ((res = nc_create(file_name, cflag, &ncid))) - ERR; - if ((res = nc_set_fill(ncid, NC_NOFILL, NULL))) - ERR; - if ((res = nc_def_dim(ncid, "political_trouble", - NC_UNLIMITED, &dimids_gen[0]))) - ERR; - if ((res = nc_def_dim(ncid, "revolutionary_fervor", - QTR_CLASSIC_MAX, &dimids_gen[1]))) - ERR; - if ((res = nc_def_dim(ncid, "post_revoultionary_hangover", - QTR_CLASSIC_MAX, &dimids_gen[2]))) - ERR; - if ((res = nc_def_dim(ncid, "ruthlessness", 100, &dimids_gen[3]))) - ERR; - if ((res = nc_def_var(ncid, "Cromwell", NC_BYTE, 2, dimids_gen, - &cromwellid))) - ERR; - if ((res = nc_def_var(ncid, "Washington", NC_SHORT, 2, dimids_gen, - &washingtonid))) - ERR; - if ((res = nc_def_var(ncid, "Napolean", NC_BYTE, 2, dimids_gen, - &napoleanid))) - ERR; - if ((res = nc_def_var(ncid, "Collins", NC_DOUBLE, 1, &dimids_gen[2], - &collinsid))) - ERR; - if ((res = nc_enddef(ncid)) != NC_EVARSIZE) - ERR; - if ((res = nc_close(ncid)) != NC_EVARSIZE) - ERR; - printf("ok\n"); + /* Now try this record file in classic format. It should fail and + the enddef. Too many bytes in the first record.*/ + printf("*** Now a classic file that's too big and will fail..."); + if ((res = nc_create(file_name, cflag, &ncid))) + ERR; + if ((res = nc_set_fill(ncid, NC_NOFILL, NULL))) + ERR; + if ((res = nc_def_dim(ncid, "political_trouble", + NC_UNLIMITED, &dimids_gen[0]))) + ERR; + if ((res = nc_def_dim(ncid, "revolutionary_fervor", + QTR_CLASSIC_MAX, &dimids_gen[1]))) + ERR; + if ((res = nc_def_dim(ncid, "post_revoultionary_hangover", + QTR_CLASSIC_MAX, &dimids_gen[2]))) + ERR; + if ((res = nc_def_dim(ncid, "ruthlessness", 100, &dimids_gen[3]))) + ERR; + if ((res = nc_def_var(ncid, "Cromwell", NC_BYTE, 2, dimids_gen, + &cromwellid))) + ERR; + if ((res = nc_def_var(ncid, "Washington", NC_SHORT, 2, dimids_gen, + &washingtonid))) + ERR; + if ((res = nc_def_var(ncid, "Napolean", NC_BYTE, 2, dimids_gen, + &napoleanid))) + ERR; + if ((res = nc_def_var(ncid, "Collins", NC_DOUBLE, 1, &dimids_gen[2], + &collinsid))) + ERR; + if ((res = nc_enddef(ncid)) != NC_EVARSIZE) + ERR; + if ((res = nc_close(ncid)) != NC_EVARSIZE) + ERR; + SUMMARIZE_ERR; - /* Now try this record file in classic format. It just barely - passes at the enddef. Almost, but not quite, too many bytes in - the first record. Since I'm adding a fixed variable (Collins), - I don't get the last record size exemption. */ - printf("*** Now a classic file with recs and one fixed will fail..."); - if ((res = nc_create(file_name, cflag, &ncid))) - ERR; - if ((res = nc_set_fill(ncid, NC_NOFILL, NULL))) - ERR; - if ((res = nc_def_dim(ncid, "political_trouble", - NC_UNLIMITED, &dimids_gen[0]))) - ERR; - if ((res = nc_def_dim(ncid, "revolutionary_fervor", - MAX_CLASSIC_BYTES, &dimids_gen[1]))) - ERR; - if ((res = nc_def_dim(ncid, "ruthlessness", 100, &dimids_gen[2]))) - ERR; - if ((res = nc_def_var(ncid, "Cromwell", NC_BYTE, 2, dimids_gen, - &cromwellid))) - ERR; - if ((res = nc_def_var(ncid, "Collins", NC_DOUBLE, 1, &dimids_gen[2], - &collinsid))) - ERR; - if ((res = nc_enddef(ncid))) - ERR; - if ((res = nc_close(ncid))) - ERR; - printf("ok\n"); + /* Now try this record file in classic format. It just barely + passes at the enddef. Almost, but not quite, too many bytes in + the first record. Since I'm adding a fixed variable (Collins), + I don't get the last record size exemption. */ + printf("*** Now a classic file with recs and one fixed will fail..."); + if ((res = nc_create(file_name, cflag, &ncid))) + ERR; + if ((res = nc_set_fill(ncid, NC_NOFILL, NULL))) + ERR; + if ((res = nc_def_dim(ncid, "political_trouble", + NC_UNLIMITED, &dimids_gen[0]))) + ERR; + if ((res = nc_def_dim(ncid, "revolutionary_fervor", + MAX_CLASSIC_BYTES, &dimids_gen[1]))) + ERR; + if ((res = nc_def_dim(ncid, "ruthlessness", 100, &dimids_gen[2]))) + ERR; + if ((res = nc_def_var(ncid, "Cromwell", NC_BYTE, 2, dimids_gen, + &cromwellid))) + ERR; + if ((res = nc_def_var(ncid, "Collins", NC_DOUBLE, 1, &dimids_gen[2], + &collinsid))) + ERR; + if ((res = nc_enddef(ncid))) + ERR; + if ((res = nc_close(ncid))) + ERR; + SUMMARIZE_ERR; - /* Try a classic file with several records, and the last record var - with a record size greater than our magic number of 2 GiB - 4 - bytes. We'll start with just one oversized record var. This - should work. Cromwell has been changed to NC_DOUBLE, and that - increases his size to 2147483644 (the max dimension size) times - 8, or about 16 GB per record. Zowie! (Mind you, Cromwell - certainly had a great deal of revolutionary fervor.) - */ - printf("*** Now a classic file with one large rec var..."); - if ((res = nc_create(file_name, cflag, &ncid))) - ERR; - if ((res = nc_set_fill(ncid, NC_NOFILL, NULL))) - ERR; - if ((res = nc_def_dim(ncid, "political_trouble", - NC_UNLIMITED, &dimids_gen[0]))) - ERR; - if ((res = nc_def_dim(ncid, "revolutionary_fervor", - MAX_CLASSIC_BYTES, &dimids_gen[1]))) - ERR; - if ((res = nc_def_var(ncid, "Cromwell", NC_DOUBLE, 2, dimids_gen, - &cromwellid))) - ERR; - if ((res = nc_enddef(ncid))) - ERR; - index[0] = 0; - index[1] = MAX_CLASSIC_BYTES - 1; - if ((res = nc_put_var1_double(ncid, cromwellid, index, &double_val_out))) - ERR; - if ((res = nc_get_var1_double(ncid, cromwellid, index, &double_val_in))) - ERR; - if (double_val_in != double_val_out) - ERR; - if ((res = nc_close(ncid))) - ERR; - printf("ok\n"); + /* Try a classic file with several records, and the last record var + with a record size greater than our magic number of 2 GiB - 4 + bytes. We'll start with just one oversized record var. This + should work. Cromwell has been changed to NC_DOUBLE, and that + increases his size to 2147483644 (the max dimension size) times + 8, or about 16 GB per record. Zowie! (Mind you, Cromwell + certainly had a great deal of revolutionary fervor.) + */ + printf("*** Now a classic file with one large rec var..."); + if ((res = nc_create(file_name, cflag, &ncid))) + ERR; + if ((res = nc_set_fill(ncid, NC_NOFILL, NULL))) + ERR; + if ((res = nc_def_dim(ncid, "political_trouble", + NC_UNLIMITED, &dimids_gen[0]))) + ERR; + if ((res = nc_def_dim(ncid, "revolutionary_fervor", + MAX_CLASSIC_BYTES, &dimids_gen[1]))) + ERR; + if ((res = nc_def_var(ncid, "Cromwell", NC_DOUBLE, 2, dimids_gen, + &cromwellid))) + ERR; + if ((res = nc_enddef(ncid))) + ERR; + index[0] = 0; + index[1] = MAX_CLASSIC_BYTES - 1; + if ((res = nc_put_var1_double(ncid, cromwellid, index, &double_val_out))) + ERR; + if ((res = nc_get_var1_double(ncid, cromwellid, index, &double_val_in))) + ERR; + if (double_val_in != double_val_out) + ERR; + if ((res = nc_close(ncid))) + ERR; + SUMMARIZE_ERR; - /* This is a classic format file with an extra-large last record - var. */ - printf("*** Now a classic file with extra-large last record var...") ; - if ((res = nc_create(file_name, cflag, &ncid))) - ERR; - if ((res = nc_set_fill(ncid, NC_NOFILL, NULL))) - ERR; - if ((res = nc_def_dim(ncid, "political_trouble", - NC_UNLIMITED, &dimids_gen[0]))) - ERR; - if ((res = nc_def_dim(ncid, "revolutionary_fervor", - MAX_CLASSIC_BYTES, &dimids_gen[1]))) - ERR; - dimids_gen1[0] = dimids_gen[0]; - if ((res = nc_def_dim(ncid, "post_revoultionary_hangover", - 5368, &dimids_gen1[1]))) - ERR; - if ((res = nc_def_var(ncid, "Washington", NC_SHORT, 2, dimids_gen1, - &washingtonid))) - ERR; - if ((res = nc_def_var(ncid, "Napolean", NC_BYTE, 2, dimids_gen1, - &napoleanid))) - ERR; - if ((res = nc_def_var(ncid, "Collins", NC_DOUBLE, 2, dimids_gen1, - &collinsid))) - ERR; - if ((res = nc_def_var(ncid, "Cromwell", NC_DOUBLE, 2, dimids_gen, - &cromwellid))) - ERR; - if ((res = nc_enddef(ncid))) - ERR; - index[0] = 0; - index[1] = MAX_CLASSIC_BYTES - 1; - if ((res = nc_put_var1_double(ncid, cromwellid, index, &double_val_out))) - ERR; - if ((res = nc_get_var1_double(ncid, cromwellid, index, &double_val_in))) - ERR; - if (double_val_in != double_val_out) - ERR; - if ((res = nc_close(ncid))) - ERR; - printf("ok\n"); + /* This is a classic format file with an extra-large last record + var. */ + printf("*** Now a classic file with extra-large last record var...") ; + if ((res = nc_create(file_name, cflag, &ncid))) + ERR; + if ((res = nc_set_fill(ncid, NC_NOFILL, NULL))) + ERR; + if ((res = nc_def_dim(ncid, "political_trouble", + NC_UNLIMITED, &dimids_gen[0]))) + ERR; + if ((res = nc_def_dim(ncid, "revolutionary_fervor", + MAX_CLASSIC_BYTES, &dimids_gen[1]))) + ERR; + dimids_gen1[0] = dimids_gen[0]; + if ((res = nc_def_dim(ncid, "post_revoultionary_hangover", + 5368, &dimids_gen1[1]))) + ERR; + if ((res = nc_def_var(ncid, "Washington", NC_SHORT, 2, dimids_gen1, + &washingtonid))) + ERR; + if ((res = nc_def_var(ncid, "Napolean", NC_BYTE, 2, dimids_gen1, + &napoleanid))) + ERR; + if ((res = nc_def_var(ncid, "Collins", NC_DOUBLE, 2, dimids_gen1, + &collinsid))) + ERR; + if ((res = nc_def_var(ncid, "Cromwell", NC_DOUBLE, 2, dimids_gen, + &cromwellid))) + ERR; + if ((res = nc_enddef(ncid))) + ERR; + index[0] = 0; + index[1] = MAX_CLASSIC_BYTES - 1; + if ((res = nc_put_var1_double(ncid, cromwellid, index, &double_val_out))) + ERR; + if ((res = nc_get_var1_double(ncid, cromwellid, index, &double_val_in))) + ERR; + if (double_val_in != double_val_out) + ERR; + if ((res = nc_close(ncid))) + ERR; + SUMMARIZE_ERR; - /* This is a classic format file with an extra-large second to last - record var. But this time it won't work, because the size - exemption only applies to the last record var. Note that one - dimension is small (5000). */ - printf("*** Now a classic file xtra-large 2nd to last var that will fail..."); - if ((res = nc_create(file_name, cflag, &ncid))) - ERR; - if ((res = nc_set_fill(ncid, NC_NOFILL, NULL))) - ERR; - if ((res = nc_def_dim(ncid, "political_trouble", - NC_UNLIMITED, &dimids_gen[0]))) - ERR; - if ((res = nc_def_dim(ncid, "revolutionary_fervor", - MAX_CLASSIC_BYTES, &dimids_gen[1]))) - ERR; - dimids_gen1[0] = dimids_gen[0]; - if ((res = nc_def_dim(ncid, "post_revoultionary_hangover", - 5000, &dimids_gen1[1]))) - ERR; - if ((res = nc_def_var(ncid, "Washington", NC_SHORT, 2, dimids_gen1, - &washingtonid))) - ERR; - if ((res = nc_def_var(ncid, "Napolean", NC_BYTE, 2, dimids_gen1, - &napoleanid))) - ERR; - if ((res = nc_def_var(ncid, "Cromwell", NC_DOUBLE, 2, dimids_gen, - &cromwellid))) - ERR; - if ((res = nc_def_var(ncid, "Collins", NC_DOUBLE, 2, dimids_gen1, - &collinsid))) - ERR; - if ((res = nc_enddef(ncid)) != NC_EVARSIZE) - ERR; - if ((res = nc_close(ncid)) != NC_EVARSIZE) - ERR; - printf("ok\n"); + /* This is a classic format file with an extra-large second to last + record var. But this time it won't work, because the size + exemption only applies to the last record var. Note that one + dimension is small (5000). */ + printf("*** Now a classic file xtra-large 2nd to last var that will fail..."); + if ((res = nc_create(file_name, cflag, &ncid))) + ERR; + if ((res = nc_set_fill(ncid, NC_NOFILL, NULL))) + ERR; + if ((res = nc_def_dim(ncid, "political_trouble", + NC_UNLIMITED, &dimids_gen[0]))) + ERR; + if ((res = nc_def_dim(ncid, "revolutionary_fervor", + MAX_CLASSIC_BYTES, &dimids_gen[1]))) + ERR; + dimids_gen1[0] = dimids_gen[0]; + if ((res = nc_def_dim(ncid, "post_revoultionary_hangover", + 5000, &dimids_gen1[1]))) + ERR; + if ((res = nc_def_var(ncid, "Washington", NC_SHORT, 2, dimids_gen1, + &washingtonid))) + ERR; + if ((res = nc_def_var(ncid, "Napolean", NC_BYTE, 2, dimids_gen1, + &napoleanid))) + ERR; + if ((res = nc_def_var(ncid, "Cromwell", NC_DOUBLE, 2, dimids_gen, + &cromwellid))) + ERR; + if ((res = nc_def_var(ncid, "Collins", NC_DOUBLE, 2, dimids_gen1, + &collinsid))) + ERR; + if ((res = nc_enddef(ncid)) != NC_EVARSIZE) + ERR; + if ((res = nc_close(ncid)) != NC_EVARSIZE) + ERR; + SUMMARIZE_ERR; - /* Now try an extra large second to last ver with 64-bit - offset. This won't work either, because the cromwell var is so - large. It exceeds the 4GiB - 4 byte per record limit for record - vars. */ - printf("*** Now a 64-bit offset file with too-large rec var that will fail..."); - if ((res = nc_create(file_name, cflag|NC_64BIT_OFFSET, &ncid))) - ERR; - if ((res = nc_set_fill(ncid, NC_NOFILL, NULL))) - ERR; - if ((res = nc_def_dim(ncid, "political_trouble", - NC_UNLIMITED, &dimids_gen[0]))) - ERR; - if ((res = nc_def_dim(ncid, "revolutionary_fervor", - MAX_CLASSIC_BYTES, &dimids_gen[1]))) - ERR; - dimids_gen1[0] = dimids_gen[0]; - if ((res = nc_def_dim(ncid, "post_revoultionary_hangover", - 5368, &dimids_gen1[1]))) - ERR; - if ((res = nc_def_var(ncid, "Washington", NC_SHORT, 2, dimids_gen1, - &washingtonid))) - ERR; - if ((res = nc_def_var(ncid, "Napolean", NC_BYTE, 2, dimids_gen1, - &napoleanid))) - ERR; - if ((res = nc_def_var(ncid, "Cromwell", NC_DOUBLE, 2, dimids_gen, - &cromwellid))) - ERR; - if ((res = nc_def_var(ncid, "Collins", NC_DOUBLE, 2, dimids_gen1, - &collinsid))) - ERR; - if ((res = nc_enddef(ncid)) != NC_EVARSIZE) - ERR; - if ((res = nc_close(ncid)) != NC_EVARSIZE) - ERR; - printf("ok\n"); + /* Now try an extra large second to last ver with 64-bit + offset. This won't work either, because the cromwell var is so + large. It exceeds the 4GiB - 4 byte per record limit for record + vars. */ + printf("*** Now a 64-bit offset file with too-large rec var that will fail..."); + if ((res = nc_create(file_name, cflag|NC_64BIT_OFFSET, &ncid))) + ERR; + if ((res = nc_set_fill(ncid, NC_NOFILL, NULL))) + ERR; + if ((res = nc_def_dim(ncid, "political_trouble", + NC_UNLIMITED, &dimids_gen[0]))) + ERR; + if ((res = nc_def_dim(ncid, "revolutionary_fervor", + MAX_CLASSIC_BYTES, &dimids_gen[1]))) + ERR; + dimids_gen1[0] = dimids_gen[0]; + if ((res = nc_def_dim(ncid, "post_revoultionary_hangover", + 5368, &dimids_gen1[1]))) + ERR; + if ((res = nc_def_var(ncid, "Washington", NC_SHORT, 2, dimids_gen1, + &washingtonid))) + ERR; + if ((res = nc_def_var(ncid, "Napolean", NC_BYTE, 2, dimids_gen1, + &napoleanid))) + ERR; + if ((res = nc_def_var(ncid, "Cromwell", NC_DOUBLE, 2, dimids_gen, + &cromwellid))) + ERR; + if ((res = nc_def_var(ncid, "Collins", NC_DOUBLE, 2, dimids_gen1, + &collinsid))) + ERR; + if ((res = nc_enddef(ncid)) != NC_EVARSIZE) + ERR; + if ((res = nc_close(ncid)) != NC_EVARSIZE) + ERR; + SUMMARIZE_ERR; - /* A 64-bit offset record file that just fits... */ - printf("*** Now a 64 bit-offset file that just fits..."); - if ((res = nc_create(file_name, cflag|NC_64BIT_OFFSET, &ncid))) - ERR; - if ((res = nc_set_fill(ncid, NC_NOFILL, NULL))) - ERR; - if ((res = nc_def_dim(ncid, "political_trouble", - NC_UNLIMITED, &dimids_gen[0]))) - ERR; - if ((res = nc_def_dim(ncid, "revolutionary_fervor", - MAX_CLASSIC_BYTES, &dimids_gen[1]))) - ERR; - dimids_gen1[0] = dimids_gen[0]; - if ((res = nc_def_dim(ncid, "post_revoultionary_hangover", - MAX_CLASSIC_BYTES, &dimids_gen1[1]))) - ERR; - if ((res = nc_def_var(ncid, "Washington", NC_SHORT, 2, dimids_gen1, - &washingtonid))) - ERR; - if ((res = nc_def_var(ncid, "Napolean", NC_SHORT, 2, dimids_gen1, - &napoleanid))) - ERR; - if ((res = nc_def_var(ncid, "Cromwell", NC_SHORT, 2, dimids_gen, - &cromwellid))) - ERR; - if ((res = nc_def_var(ncid, "Collins", NC_DOUBLE, 2, dimids_gen1, - &collinsid))) - ERR; - if ((res = nc_enddef(ncid))) - ERR; - index[0] = 0; - index[1] = MAX_CLASSIC_BYTES - 1; - if ((res = nc_put_var1_int(ncid, cromwellid, index, &int_val_out))) - ERR; - if ((res = nc_get_var1_int(ncid, cromwellid, index, &int_val_in))) - ERR; - if (int_val_in != int_val_out) - ERR; - if ((res = nc_close(ncid))) - ERR; - printf("ok\n"); - } /* end of cmode run */ + /* A 64-bit offset record file that just fits... */ + printf("*** Now a 64 bit-offset file that just fits..."); + if ((res = nc_create(file_name, cflag|NC_64BIT_OFFSET, &ncid))) + ERR; + if ((res = nc_set_fill(ncid, NC_NOFILL, NULL))) + ERR; + if ((res = nc_def_dim(ncid, "political_trouble", + NC_UNLIMITED, &dimids_gen[0]))) + ERR; + if ((res = nc_def_dim(ncid, "revolutionary_fervor", + MAX_CLASSIC_BYTES, &dimids_gen[1]))) + ERR; + dimids_gen1[0] = dimids_gen[0]; + if ((res = nc_def_dim(ncid, "post_revoultionary_hangover", + MAX_CLASSIC_BYTES, &dimids_gen1[1]))) + ERR; + if ((res = nc_def_var(ncid, "Washington", NC_SHORT, 2, dimids_gen1, + &washingtonid))) + ERR; + if ((res = nc_def_var(ncid, "Napolean", NC_SHORT, 2, dimids_gen1, + &napoleanid))) + ERR; + if ((res = nc_def_var(ncid, "Cromwell", NC_SHORT, 2, dimids_gen, + &cromwellid))) + ERR; + if ((res = nc_def_var(ncid, "Collins", NC_DOUBLE, 2, dimids_gen1, + &collinsid))) + ERR; + if ((res = nc_enddef(ncid))) + ERR; + index[0] = 0; + index[1] = MAX_CLASSIC_BYTES - 1; + if ((res = nc_put_var1_int(ncid, cromwellid, index, &int_val_out))) + ERR; + if ((res = nc_get_var1_int(ncid, cromwellid, index, &int_val_in))) + ERR; + if (int_val_in != int_val_out) + ERR; + if ((res = nc_close(ncid))) + ERR; + SUMMARIZE_ERR; + } /* end of cmode run */ - /* Wow! Everything worked! */ - printf("*** Tests successful!\n"); + /* Delete the huge data file we created. */ + (void) remove(file_name); - /* Delete the huge data file we created. */ - (void) remove(file_name); - - return 0; + FINAL_RESULTS; + return 0; } diff --git a/nc_test/tst_big_rvar.c b/nc_test/tst_big_rvar.c index 800d05475..8a595474c 100644 --- a/nc_test/tst_big_rvar.c +++ b/nc_test/tst_big_rvar.c @@ -41,9 +41,6 @@ static int test_big_var(const char *testfile) { int ncid, varid, dimids[NUMDIMS]; - size_t index[NUMDIMS]; - int nval = 99; - int nval_in; size_t start[NUMDIMS] = {0, 0, 0, 0}; size_t count[NUMDIMS] = {1, 1, DIM2, DIM3}; signed char data[DIM2][DIM3]; @@ -84,7 +81,7 @@ test_big_var(const char *testfile) { if (data[i][j] != (signed char)((i + j) % 16)) { - printf("error on start[0]: %d i: %d j: %d expected %d got %d\n", + printf("error on start[0]: %ld i: %d j: %d expected %d got %d\n", start[0], i, j, (i + j) % 16, data[i][j]); ERR; if(nerrs++ > 2) @@ -98,7 +95,7 @@ test_big_var(const char *testfile) { if (data[i][j] != (signed char)((i + j) % 16)) { - printf("error on start[0]: %d i: %d j: %d expected %d got %d\n", + printf("error on start[0]: %ld i: %d j: %d expected %d got %d\n", start[0], i, j, (i + j) % 16, data[i][j]); ERR; if(nerrs++ > 2) diff --git a/nc_test/tst_big_var2.c b/nc_test/tst_big_var2.c index 6ca5c9c73..4f722ca74 100644 --- a/nc_test/tst_big_var2.c +++ b/nc_test/tst_big_var2.c @@ -45,9 +45,6 @@ static int test_big_var(const char *testfile) { int ncid, varid, dimids[NUMDIMS]; - size_t index[NUMDIMS]; - int nval = 99; - int nval_in; size_t start[NUMDIMS] = {0, 0, 0}; size_t count[NUMDIMS] = {1, DIM1, DIM2}; signed char data[DIM1][DIM2]; @@ -92,7 +89,7 @@ test_big_var(const char *testfile) { if (data[i][j] != 42 ) { - printf("error on start[0]: %d i: %d j: %d expected %d got %d\n", + printf("error on start[0]: %ld i: %d j: %d expected %d got %d\n", start[0], i, j, 42, data[i][j]); ERR; if(nerrs++ > 1) @@ -106,7 +103,7 @@ test_big_var(const char *testfile) { if (data[i][j] != 19 ) { - printf("error on start[0]: %d i: %d j: %d expected %d got %d\n", + printf("error on start[0]: %ld i: %d j: %d expected %d got %d\n", start[0], i, j, 19, data[i][j]); ERR; if(nerrs++ > 1) diff --git a/nc_test/tst_big_var6.c b/nc_test/tst_big_var6.c index 054e5d2ae..5f4fad7e0 100644 --- a/nc_test/tst_big_var6.c +++ b/nc_test/tst_big_var6.c @@ -7,7 +7,7 @@ more than 1 dimension and more than 2**32 values, where the write starts after the first 2**32 elements. - $Id: tst_big_var6.c,v 1.1 2010/05/22 19:56:53 russ Exp $ + Russ Rew */ #include @@ -49,7 +49,7 @@ test_big_var(const char *testfile) size_t start[NUMDIMS] = {0, 0, 0, 0}; size_t count[NUMDIMS] = {1, 1, 1, DIM3}; short data[DIM3]; - int i, j, k; + int j; int nerrs = 0; /* Create a file with one big 4D variable. */ @@ -85,7 +85,7 @@ test_big_var(const char *testfile) if (nc_get_vara_short(ncid, varid, start, count, &data[0])) ERR; for (j = 0; j < DIM3; j++) { if (data[j] != FIRST_VAL ) { - printf("error on start[0..2]: %d,%d,%d j: %d, expected %d got %d\n", + printf("error on start[0..2]: %ld,%ld,%ld j: %d, expected %d got %d\n", start[0], start[1], start[2], j, FIRST_VAL, data[j]); ERR; if(nerrs++ > 1) diff --git a/nc_test/tst_formats.c b/nc_test/tst_formats.c new file mode 100644 index 000000000..c77cccef1 --- /dev/null +++ b/nc_test/tst_formats.c @@ -0,0 +1,159 @@ +/* This is part of the netCDF package. Copyright 2005-2007 University + Corporation for Atmospheric Research/Unidata. See COPYRIGHT file + for conditions of use. + + Test handling of formats. + + Ed Hartnett, 11/22/17 +*/ + +#include "config.h" +#include +#include "err_macros.h" + +#define FILE_NAME_BASE "tst_formats" +#define HDF4_FILE "ref_contiguous.hdf4" + +/* Determine how many formats are available, and what they are. */ +void +determine_test_formats(int *num_formats, int *format) +{ + int ind = 0; + int num; + + /* Check inputs. */ + assert(num_formats && format); + + /* We always have classic and 64-bit offset */ + num = 2; + format[ind++] = NC_FORMAT_CLASSIC; + format[ind++] = NC_FORMAT_64BIT_OFFSET; + + /* Do we have netCDF-4 and netCDF-4 classic? */ +#ifdef USE_NETCDF4 + num += 2; + format[ind++] = NC_FORMAT_NETCDF4; + format[ind++] = NC_FORMAT_NETCDF4_CLASSIC; +#endif /* USE_NETCDF4 */ + + /* Do we have CDF5? */ +#ifdef ENABLE_CDF5 + num++; + format[ind++] = NC_FORMAT_CDF5; +#endif /* ENABLE_CDF5 */ + + *num_formats = num; +} + +/* Function to test nc_inq_format(). */ +int +check_inq_format(int ncid, int expected_format, int expected_extended_format, int expected_mode) +{ + int format; + int extended_format; + int mode; + + if (nc_inq_format(ncid + 66000, NULL) != NC_EBADID) ERR; + if (nc_inq_format(ncid, NULL)) ERR; + if (nc_inq_format(ncid, &format)) ERR; + if (format != expected_format) { + printf("format %d expected_format %d\n", format, expected_format); + ERR; + } + if (nc_inq_format_extended(ncid + 66000, &extended_format, &mode) != NC_EBADID) ERR; + { + int mode; + if (nc_inq_format_extended(ncid, NULL, &mode)) ERR; + if (mode != expected_mode) { + printf("expected_mode %x mode %x\n", expected_mode, mode); + //ERR; + } + } + { + int extended_format; + if (nc_inq_format_extended(ncid, &extended_format, NULL)) ERR; + if (extended_format != expected_extended_format) ERR; + } + + if (nc_inq_format_extended(ncid, &extended_format, &mode)) ERR; + if (mode != expected_mode) ERR; + if (extended_format != expected_extended_format) ERR; + + /* Nothing to do with inq_format, but let's check the base_pe + * functions. */ + if (expected_format == NC_FORMAT_CLASSIC || expected_format == NC_FORMAT_64BIT_OFFSET || + expected_format == NC_FORMAT_CDF5) { + if (nc_set_base_pe(ncid, 0)) ERR; + if (nc_inq_base_pe(ncid, NULL)) ERR; + } else { + if (nc_set_base_pe(ncid, 0) != NC_ENOTNC3) ERR; + if (nc_inq_base_pe(ncid, NULL) != NC_ENOTNC3) ERR; + } + + return 0; +} + +int +main(int argc, char **argv) +{ + printf("\n*** Testing netcdf format functions.\n"); + { + int ncid; + int expected_mode; + int expected_extended_format; + char file_name[NC_MAX_NAME + 1]; + int f; + int format[MAX_NUM_FORMATS]; + int num_formats; + + /* How many formats to be tested? */ + determine_test_formats(&num_formats, format); + + for (f = 0; f < num_formats; f++) + { + printf("*** testing nc_inq_format() and nc_inq_format_extended() with format %d...", format[f]); + sprintf(file_name, "%s_%d.nc", FILE_NAME_BASE, format[f]); + + /* Set up test. */ + switch (format[f]) { + case NC_FORMAT_CLASSIC: + expected_extended_format = NC_FORMATX_NC3; + expected_mode = 0; + break; + case NC_FORMAT_64BIT_OFFSET: + expected_extended_format = NC_FORMATX_NC3; + expected_mode = NC_64BIT_OFFSET; + break; + case NC_FORMAT_CDF5: + expected_extended_format = NC_FORMATX_NC3; + expected_mode = NC_CDF5; + break; + case NC_FORMAT_NETCDF4: + expected_extended_format = NC_FORMATX_NC4; + expected_mode = NC_NETCDF4; + break; + case NC_FORMAT_NETCDF4_CLASSIC: + expected_extended_format = NC_FORMATX_NC4; + expected_mode = NC_NETCDF4|NC_CLASSIC_MODEL; + break; + } + if (nc_set_default_format(format[f], NULL)) ERR; + + /* Create a file. */ + if (nc_create(file_name, 0, &ncid)) ERR; + if (check_inq_format(ncid, format[f], expected_extended_format, expected_mode)) ERR; + if (nc_close(ncid)) ERR; + + /* Re-open the file and check it again. */ + if (nc_open(file_name, 0, &ncid)) ERR; + /* Classic flag is not set on mode in nc_open(). Not sure if + * this is a bug or not. */ + if (format[f] == NC_FORMAT_NETCDF4_CLASSIC) + expected_mode = NC_NETCDF4; + if (check_inq_format(ncid, format[f], expected_extended_format, expected_mode)) ERR; + if (nc_close(ncid)) ERR; + SUMMARIZE_ERR; + } /* next format */ + } + FINAL_RESULTS; +} diff --git a/nc_test4/CMakeLists.txt b/nc_test4/CMakeLists.txt index cbaa0c9b4..f8523e647 100644 --- a/nc_test4/CMakeLists.txt +++ b/nc_test4/CMakeLists.txt @@ -79,17 +79,15 @@ ENDFOREACH() # This must go after the 'foreach' stanza # immediately above this comment. IF(USE_HDF4_FILE_TESTS AND NOT MSVC) - add_sh_test(nc_test4 run_get_hdf4_files) add_bin_test_no_prefix(tst_interops2) - add_bin_test(nc_test4 tst_interops3) + build_bin_test_no_prefix(tst_interops3) + add_sh_test(nc_test4 run_get_hdf4_files) add_bin_test(nc_test4 tst_bug324) add_sh_test(nc_test4 tst_formatx_hdf4) build_bin_test(tst_chunk_hdf4) add_sh_test(nc_test4 run_chunk_hdf4) add_bin_test(nc_test4 tst_h4_lendian) add_sh_test(nc_test4 tst_hdf4_read_var) - - SET_TESTS_PROPERTIES(nc_test4_tst_interops3 PROPERTIES DEPENDS nc_test4_run_get_hdf4_files) ENDIF() IF(TEST_PARALLEL4) diff --git a/nc_test4/Makefile.am b/nc_test4/Makefile.am index f9e9b30ff..4c073743b 100644 --- a/nc_test4/Makefile.am +++ b/nc_test4/Makefile.am @@ -11,7 +11,7 @@ include $(top_srcdir)/lib_flags.am # Link to our assembled library. AM_LDFLAGS += ${top_builddir}/liblib/libnetcdf.la -# These are netCDF-4 test programs. +# These are netCDF-4 C test programs which are built and run. NC4_TESTS = tst_dims tst_dims2 tst_dims3 tst_files tst_files4 \ tst_vars tst_varms tst_unlim_vars tst_converts tst_converts2 tst_grps \ tst_grps2 tst_compounds tst_compounds2 tst_compounds3 tst_opaques \ @@ -29,15 +29,16 @@ if !ISCYGWIN NC4_TESTS += tst_h_strbug tst_h_refs endif +# Build test programs plus programs used in test scripts. check_PROGRAMS = $(NC4_TESTS) renamegroup tst_empty_vlen_unlim +TESTS = $(NC4_TESTS) # Add these if large file tests are turned on. if LARGE_FILE_TESTS check_PROGRAMS += tst_large tst_large2 +TESTS += tst_large tst_large2 endif -TESTS = $(NC4_TESTS) - if BUILD_UTILITIES TESTS += run_grp_rename.sh tst_misc.sh endif @@ -50,17 +51,11 @@ check_PROGRAMS += tst_v2 TESTS += tst_v2 endif # BUILD_V2 -if LARGE_FILE_TESTS -check_PROGRAMS += tst_large -TESTS += tst_large -endif # LARGE_FILE_TESTS - # If benchmarks were turned on, build and run a bunch more tests. if BUILD_BENCHMARKS check_PROGRAMS += tst_create_files bm_file tst_chunks3 tst_ar4 \ tst_ar4_3d tst_ar4_4d bm_many_objs tst_h_many_atts bm_many_atts \ -tst_files2 tst_files3 tst_ar5 tst_h_files3 tst_mem tst_knmi \ -bm_netcdf4_recs +tst_files2 tst_files3 tst_ar5 tst_mem tst_knmi bm_netcdf4_recs bm_netcdf4_recs_SOURCES = bm_netcdf4_recs.c tst_utils.c bm_many_atts_SOURCES = bm_many_atts.c tst_utils.c @@ -77,7 +72,7 @@ tst_knmi_SOURCES = tst_knmi.c tst_utils.c # so they must appear in the appropriate order. TESTS += tst_ar4_3d tst_create_files run_bm_test1.sh run_bm_elena.sh \ run_bm_test2.sh run_tst_chunks.sh tst_files2 tst_files3 tst_ar5 \ -tst_h_files3 tst_mem run_get_knmi_files.sh tst_knmi +tst_mem run_get_knmi_files.sh tst_knmi # This will run a parallel I/O benchmark for parallel builds. if TEST_PARALLEL4 @@ -104,7 +99,7 @@ endif # BUILD_UTILITIES TESTS += run_chunk_hdf4.sh tst_h4_lendian if USE_HDF4_FILE_TESTS check_PROGRAMS += tst_interops3 -TESTS += run_get_hdf4_files.sh tst_interops3 tst_hdf4_read_var.sh +TESTS += run_get_hdf4_files.sh tst_hdf4_read_var.sh endif # USE_HDF4_FILE_TESTS endif # USE_HDF4 @@ -116,7 +111,6 @@ TESTS += tst_szip.sh endif endif - # This will run a bunch of the test programs with valgrind, the memory # checking tool. (Valgrind must be present for this to work.) if USE_VALGRIND_TESTS diff --git a/nc_test4/run_get_hdf4_files.sh b/nc_test4/run_get_hdf4_files.sh index 562969bd9..929878b86 100755 --- a/nc_test4/run_get_hdf4_files.sh +++ b/nc_test4/run_get_hdf4_files.sh @@ -1,11 +1,18 @@ #!/bin/sh -# This shell gets files from the netCDF ftp site for testing. +# This shell gets some sample HDF4 files from the netCDF ftp site for +# testing. Then it runs program tst_interops3 on the test file to +# check that HDF4 reading works. -# $Id: run_get_hdf4_files.sh,v 1.4 2009/07/15 15:16:05 ed Exp $ +# Ed Hartnett + +if test "x$srcdir" = x ; then srcdir=`pwd`; fi +. ../test_common.sh set -e echo "" +echo "Getting HDF4 sample files from Unidata FTP site..." + file_list="AMSR_E_L2_Rain_V10_200905312326_A.hdf AMSR_E_L3_DailyLand_V06_20020619.hdf \ MYD29.A2009152.0000.005.2009153124331.hdf MYD29.A2002185.0000.005.2007160150627.hdf \ MOD29.A2000055.0005.005.2006267200024.hdf" @@ -19,6 +26,11 @@ do fi done + +echo "" +echo "Running test program to check HDF4 sample files..." +${execdir}/tst_interops3 + echo "SUCCESS!!!" exit 0 diff --git a/nc_test4/tst_h_files3.c b/nc_test4/tst_h_files3.c deleted file mode 100644 index 35d61f7b3..000000000 --- a/nc_test4/tst_h_files3.c +++ /dev/null @@ -1,223 +0,0 @@ -/* This is part of the netCDF package. - Copyright 2005 University Corporation for Atmospheric Research/Unidata - See COPYRIGHT file for conditions of use. - - Test netcdf-4 variables. - @author Ed Hartnett -*/ - -#include -#include "err_macros.h" -#include "netcdf.h" -#include -#include -#include /* Extra high precision time info. */ -#include -#include - -#define MAX_LEN 30 -#define TMP_FILE_NAME "tst_files2_tmp.out" -#define FILE_NAME "tst_h_files3.nc" -#define MILLION 1000000 - -void *last_sbrk; - -void -get_mem_used2(int *mem_used) -{ - char buf[30]; - FILE *pf; - - snprintf(buf, 30, "/proc/%u/statm", (unsigned)getpid()); - pf = fopen(buf, "r"); - if (pf) { - unsigned size; /* total program size */ - unsigned resident;/* resident set size */ - unsigned share;/* shared pages */ - unsigned text;/* text (code) */ - unsigned lib;/* library */ - unsigned data;/* data/stack */ - /*unsigned dt; dirty pages (unused in Linux 2.6)*/ - fscanf(pf, "%u %u %u %u %u %u", &size, &resident, &share, - &text, &lib, &data); - *mem_used = data; - } - else - *mem_used = -1; - fclose(pf); -} - -int -main(int argc, char **argv) -{ - - printf("\n*** Testing netcdf-4 file functions, some more.\n"); - last_sbrk = sbrk(0); -/* printf("Test for memory consumption of simple HDF5 file read...\n"); */ -/* { */ -/* #define NUM_TRIES 200000 */ -/* #define CHUNK_CACHE_NELEMS_1 1009 */ -/* #define CHUNK_CACHE_SIZE_1 1000000 */ -/* #define CHUNK_CACHE_PREEMPTION_1 .75 */ -/* #define MAX_OBJ 2 */ -/* #define FILE_NAME2 "ref_tst_kirk.nc" */ -/* int mem_used, mem_used1, mem_used2; */ -/* hid_t fapl_id, fileid, grpid, datasetid; */ -/* int try; */ -/* int num_scales; */ - -/* printf("\t\t\tbef_open\taft_open\taft_close\tused_open\tused_closed\n"); */ -/* for (try = 0; try < NUM_TRIES; try++) */ -/* { */ -/* char obj_name2[] = "Captain_Kirk"; */ -/* get_mem_used2(&mem_used); */ - -/* /\* Reopen the file. *\/ */ -/* if ((fapl_id = H5Pcreate(H5P_FILE_ACCESS)) < 0) ERR; */ -/* if ((fileid = H5Fopen(FILE_NAME2, H5F_ACC_RDONLY, H5P_DEFAULT)) < 0) ERR; */ -/* if ((grpid = H5Gopen(fileid, "/")) < 0) ERR; */ - -/* if ((datasetid = H5Dopen2(grpid, obj_name2, H5P_DEFAULT)) < 0) ERR; */ -/* num_scales = H5DSget_num_scales(datasetid, 0); */ - -/* get_mem_used2(&mem_used1); */ - -/* /\* Close everything. *\/ */ -/* if (H5Dclose(datasetid)) ERR_RET; */ -/* if (H5Pclose(fapl_id)) ERR_RET; */ -/* if (H5Gclose(grpid) < 0) ERR_RET; */ -/* if (H5Fclose(fileid) < 0) ERR_RET; */ - -/* get_mem_used2(&mem_used2); */ - -/* if (mem_used2 - mem_used) */ -/* { */ -/* printf("try %d - \t\t%d\t\t%d\t\t%d\t\t%d\t\t%d \n", try, */ -/* mem_used, mem_used1, mem_used2, mem_used1 - mem_used, */ -/* mem_used2 - mem_used); */ -/* /\*if (try > 1) */ -/* ERR_RET;*\/ */ -/* } */ -/* } */ -/* } */ -/* SUMMARIZE_ERR; */ -/* printf("Test for memory consumption of HDF5 file read...\n"); */ -/* { */ -/* #define NUM_TRIES 2000 */ -/* #define CHUNK_CACHE_NELEMS_1 1009 */ -/* #define CHUNK_CACHE_SIZE_1 1000000 */ -/* #define CHUNK_CACHE_PREEMPTION_1 .75 */ -/* #define MAX_OBJ 2 */ -/* #define FILE_NAME2 "ref_tst_kirk.nc" */ -/* hsize_t num_obj, i; */ -/* int mem_used, mem_used1, mem_used2; */ -/* hid_t fapl_id, fileid, grpid, datasetid[MAX_OBJ]; */ -/* hid_t access_pid, spaceid; */ -/* char obj_name[NC_MAX_NAME + 1]; */ -/* int try; */ -/* H5O_info_t obj_info; */ -/* H5_index_t idx_field = H5_INDEX_CRT_ORDER; */ -/* ssize_t size; */ -/* int ndims; */ -/* hsize_t dims[NC_MAX_DIMS], max_dims[NC_MAX_DIMS]; */ -/* int is_scale = 0; */ - -/* get_mem_used2(&mem_used); */ -/* mem_used1 = mem_used; */ -/* mem_used2 = mem_used; */ -/* printf("start: memuse= %d\t%d\t%d \n",mem_used, mem_used1, */ -/* mem_used2); */ - -/* /\* if (H5Eset_auto(NULL, NULL) < 0) ERR;*\/ */ - -/* printf("bef_open\taft_open\taft_close\tused_open\tused_closed\n"); */ -/* for (try = 0; try < NUM_TRIES; try++) */ -/* { */ -/* get_mem_used2(&mem_used); */ - -/* /\* Reopen the file. *\/ */ -/* if ((fapl_id = H5Pcreate(H5P_FILE_ACCESS)) < 0) ERR; */ -/* if (H5Pset_fclose_degree(fapl_id, H5F_CLOSE_SEMI)) ERR; */ -/* if (H5Pset_cache(fapl_id, 0, CHUNK_CACHE_NELEMS_1, CHUNK_CACHE_SIZE_1, */ -/* CHUNK_CACHE_PREEMPTION_1) < 0) ERR; */ -/* if (H5Pset_libver_bounds(fapl_id, H5F_LIBVER_LATEST, */ -/* H5F_LIBVER_LATEST) < 0) ERR; */ -/* if ((fileid = H5Fopen(FILE_NAME2, H5F_ACC_RDONLY, fapl_id)) < 0) ERR; */ -/* if ((grpid = H5Gopen(fileid, "/")) < 0) ERR; */ - -/* if (H5Gget_num_objs(grpid, &num_obj) < 0) ERR; */ -/* if (num_obj > MAX_OBJ) ERR; */ -/* for (i = 0; i < num_obj; i++) */ -/* { */ -/* if (H5Oget_info_by_idx(grpid, ".", H5_INDEX_CRT_ORDER, H5_ITER_INC, */ -/* i, &obj_info, H5P_DEFAULT) < 0) ERR; */ -/* if ((size = H5Lget_name_by_idx(grpid, ".", idx_field, H5_ITER_INC, i, */ -/* NULL, 0, H5P_DEFAULT)) < 0) ERR; */ -/* if (H5Lget_name_by_idx(grpid, ".", idx_field, H5_ITER_INC, i, */ -/* obj_name, size+1, H5P_DEFAULT) < 0) ERR; */ -/* if ((datasetid[i] = H5Dopen2(grpid, obj_name, H5P_DEFAULT)) < 0) ERR; */ -/* if ((access_pid = H5Dget_access_plist(datasetid[i])) < 0) ERR; */ -/* if ((spaceid = H5Dget_space(datasetid[i])) < 0) ERR; */ -/* if ((ndims = H5Sget_simple_extent_ndims(spaceid)) < 0) ERR; */ -/* if (H5Sget_simple_extent_dims(spaceid, dims, max_dims) < 0) ERR; */ -/* if ((is_scale = H5DSis_scale(datasetid[i])) < 0) ERR; */ -/* if (is_scale) */ -/* { */ -/* char dimscale_name_att[NC_MAX_NAME + 1]; */ -/* int natts, a; */ -/* hid_t attid = 0; */ -/* char att_name[NC_MAX_HDF5_NAME + 1]; */ - -/* if ((natts = H5Aget_num_attrs(datasetid[i])) < 0) ERR; */ -/* for (a = 0; a < natts; a++) */ -/* { */ -/* if ((attid = H5Aopen_idx(datasetid[i], (unsigned int)a)) < 0) ERR; */ -/* if (H5Aget_name(attid, NC_MAX_HDF5_NAME, att_name) < 0) ERR; */ -/* if (H5Aclose(attid) < 0) ERR; */ -/* } */ -/* if (H5DSget_scale_name(datasetid[i], dimscale_name_att, NC_MAX_NAME) < 0) ERR; */ -/* } */ -/* else */ -/* { */ -/* int num_scales; */ -/* size_t chunk_cache_size, chunk_cache_nelems; */ -/* double rdcc_w0; */ -/* hid_t propid; */ - -/* num_scales = H5DSget_num_scales(datasetid[i], 0); */ -/* if ((H5Pget_chunk_cache(access_pid, &chunk_cache_nelems, */ -/* &chunk_cache_size, &rdcc_w0)) < 0) ERR; */ -/* if ((propid = H5Dget_create_plist(datasetid[i])) < 0) ERR; */ - -/* if (H5Pclose(propid)) ERR; */ - -/* } */ - -/* if (H5Pclose(access_pid)) ERR; */ -/* if (H5Sclose(spaceid)) ERR; */ -/* } */ - -/* get_mem_used2(&mem_used1); */ - -/* /\* Close everything. *\/ */ -/* for (i = 0; i < num_obj; i++) */ -/* if (H5Dclose(datasetid[i])) ERR; */ -/* if (H5Pclose(fapl_id)) ERR; */ -/* if (H5Gclose(grpid) < 0) ERR; */ -/* if (H5Fclose(fileid) < 0) ERR; */ - -/* get_mem_used2(&mem_used2); */ - -/* if (mem_used2 - mem_used) */ -/* { */ -/* printf("try %d - %d\t\t%d\t\t%d\t\t%d\t\t%d \n", try, */ -/* mem_used, mem_used1, mem_used2, mem_used1 - mem_used, */ -/* mem_used2 - mem_used); */ -/* if (try > 1) */ -/* ERR_RET; */ -/* } */ -/* } */ -/* } */ -/* SUMMARIZE_ERR; */ - FINAL_RESULTS; -} diff --git a/nc_test4/tst_interops3.c b/nc_test4/tst_interops3.c index 2c5c73b8f..4603e8866 100644 --- a/nc_test4/tst_interops3.c +++ b/nc_test4/tst_interops3.c @@ -15,6 +15,54 @@ #define FILE_NAME "tst_interops3.h4" +/* Function to test nc_inq_format(). */ +int +check_inq_format(int ncid, int expected_format, int expected_extended_format, int expected_mode) +{ + int format; + int extended_format; + int mode; + + if (nc_inq_format(ncid + 66000, NULL) != NC_EBADID) ERR; + if (nc_inq_format(ncid, NULL)) ERR; + if (nc_inq_format(ncid, &format)) ERR; + if (format != expected_format) { + printf("format %d expected_format %d\n", format, expected_format); + ERR; + } + if (nc_inq_format_extended(ncid + 66000, &extended_format, &mode) != NC_EBADID) ERR; + { + int mode; + if (nc_inq_format_extended(ncid, NULL, &mode)) ERR; + if (mode != expected_mode) { + printf("expected_mode %x mode %x\n", expected_mode, mode); + //ERR; + } + } + { + int extended_format; + if (nc_inq_format_extended(ncid, &extended_format, NULL)) ERR; + if (extended_format != expected_extended_format) ERR; + } + + if (nc_inq_format_extended(ncid, &extended_format, &mode)) ERR; + if (mode != expected_mode) ERR; + if (extended_format != expected_extended_format) ERR; + + /* Nothing to do with inq_format, but let's check the base_pe + * functions. */ + if (expected_format == NC_FORMAT_CLASSIC || expected_format == NC_FORMAT_64BIT_OFFSET || + expected_format == NC_FORMAT_CDF5) { + if (nc_set_base_pe(ncid, 0)) ERR; + if (nc_inq_base_pe(ncid, NULL)) ERR; + } else { + if (nc_set_base_pe(ncid, 0) != NC_ENOTNC3) ERR; + if (nc_inq_base_pe(ncid, NULL) != NC_ENOTNC3) ERR; + } + + return 0; +} + int main(int argc, char **argv) { @@ -30,12 +78,15 @@ main(int argc, char **argv) "MYD29.A2002185.0000.005.2007160150627.hdf", "MYD29.A2009152.0000.005.2009153124331.hdf"}; size_t len_in; + int expected_mode = NC_NETCDF4; + int expected_extended_format = NC_FORMATX_NC_HDF4; int f; for (f = 0; f < NUM_SAMPLE_FILES; f++) { if (nc_open(file_name[f], NC_NOWRITE, &ncid)) ERR; if (nc_inq(ncid, &ndims_in, &nvars_in, &natts_in, &unlimdim_in)) ERR; + if (check_inq_format(ncid, NC_FORMAT_NETCDF4, expected_extended_format, expected_mode)) ERR; if (nc_close(ncid)) ERR; } } diff --git a/nc_test4/tst_large2.c b/nc_test4/tst_large2.c index 3bf4c14ad..48cbe3ebe 100644 --- a/nc_test4/tst_large2.c +++ b/nc_test4/tst_large2.c @@ -40,7 +40,7 @@ int main(int argc, char **argv) {"64-bit offset", "netCDF-4"}; int i, j, f; - printf("sizes: int - %d, size_t - %d, and int * - %d\n", + printf("sizes: int - %ld, size_t - %ld, and int * - %ld\n", sizeof(int), sizeof(size_t), sizeof(int *)); /* Allocate room for one slab of data. */ @@ -83,7 +83,7 @@ int main(int argc, char **argv) { if (data[j + LON_LEN * i] != (start[0] + i + j) % 19) { - printf("error on start[0]: %d i: %d j: %d expected %d got %g\n", + printf("error on start[0]: %ld i: %ld j: %ld expected %d got %g\n", start[0], i, j, (start[0] + i + j), data[j + LON_LEN * i]); ERR_RET; } diff --git a/ncdap_test/Makefile.am b/ncdap_test/Makefile.am index 1ab1738dc..90b6537db 100644 --- a/ncdap_test/Makefile.am +++ b/ncdap_test/Makefile.am @@ -3,14 +3,15 @@ # This file builds and runs DAP tests. -# This will not work until we get a new remotetest server set up - # Put together AM_CPPFLAGS and AM_LDFLAGS. include $(top_srcdir)/lib_flags.am #LOG_DRIVER = $(SHELL) $(top_srcdir)/test-driver-verbose #TEST_LOG_DRIVER = $(SHELL) $(top_srcdir)/test-driver-verbose +# Note which tests depend on other tests. Necessary for make -j check. +TEST_EXTENSIONS = .sh + LDADD = ${top_builddir}/liblib/libnetcdf.la AM_CPPFLAGS += -I$(top_srcdir)/liblib AM_CPPFLAGS += -DTOPSRCDIR=${abs_top_srcdir} diff --git a/ncdap_test/testurl.sh b/ncdap_test/testurl.sh index 4f10caf6d..4dfc9e12c 100755 --- a/ncdap_test/testurl.sh +++ b/ncdap_test/testurl.sh @@ -32,7 +32,7 @@ BOTHP="[log][show=fetch]" BOTHS="noprefetch&fetch=disk" locreset () { - rm -f ./tmp ./errtmp + rm -f ./tmp_testurl ./errtmp_testurl } buildurl () { @@ -58,8 +58,8 @@ echo "***Testing url prefix parameters" buildurl $PREFIX "" # Invoke ncdump to extract the URL echo "command: ${NCDUMP} -h $url" -${NCDUMP} -h "$url" >./tmp 2> ./errtmp -if test "x${SHOW}" = x1 ; then cat ./tmp ; fi +${NCDUMP} -h "$url" >./tmp_testurl 2> ./errtmp_testurl +if test "x${SHOW}" = x1 ; then cat ./tmp_testurl ; fi fi locreset @@ -68,8 +68,8 @@ echo "***Testing url suffix parameters" buildurl "" $SUFFIX # Invoke ncdump to extract the URL echo "command: ${NCDUMP} -h $url" -${NCDUMP} -h "$url" >./tmp 2> ./errtmp -if test "x${SHOW}" = x1 ; then cat ./tmp ; fi +${NCDUMP} -h "$url" >./tmp_testurl 2> ./errtmp_testurl +if test "x${SHOW}" = x1 ; then cat ./tmp_testurl ; fi fi locreset @@ -78,8 +78,8 @@ echo "***Testing url prefix+suffix parameters" buildurl $BOTHP $BOTHS # Invoke ncdump to extract the URL echo "command: ${NCDUMP} -h $url" -${NCDUMP} -h "$url" >./tmp 2> ./errtmp -if test "x${SHOW}" = x1 ; then cat ./tmp ; fi +${NCDUMP} -h "$url" >./tmp_testurl 2> ./errtmp_testurl +if test "x${SHOW}" = x1 ; then cat ./tmp_testurl ; fi fi locreset diff --git a/ncdap_test/tst_remote.sh b/ncdap_test/tst_remote.sh index 23042ff5c..64789b1f7 100755 --- a/ncdap_test/tst_remote.sh +++ b/ncdap_test/tst_remote.sh @@ -187,7 +187,7 @@ PARAMS="${PARAMS}[netcdf3]" XFAILTESTS="$XFAILTESTS3" SVCFAILTESTS="$SVCFAILTESTS3" -RESULTSDIR="./results" +RESULTSDIR="./results_tst_remote" # Locate some tools if test "x$leakcheck" = x1 ; then VALGRIND="valgrind -q --error-exitcode=2 --leak-check=full" @@ -325,6 +325,7 @@ cd .. done +rm -fr ${RESULTSDIR} totalcount=`expr $passcount + $failcount + $xfailcount + $svcfailcount` okcount=`expr $passcount + $xfailcount + $svcfailcount` diff --git a/ncdap_test/tst_special.sh b/ncdap_test/tst_special.sh index fd15c5455..4451ad0d9 100755 --- a/ncdap_test/tst_special.sh +++ b/ncdap_test/tst_special.sh @@ -62,7 +62,7 @@ d055.nc;http://ilikai.soest.hawaii.edu/cgi-bin/nph-dods/fast/d055.nc \ # Temporarily suppress XFAILTESTS="qscat_high_wind totalAagg world-unfilter-monthly.nc duacs_global_nrt_msla_merged_h_lr 500m" -RESULTSDIR="./results" +RESULTSDIR="./results_tst_special" # Locate some tools if test "x$leakcheck" = x1 ; then VALGRIND="valgrind -q --error-exitcode=2 --leak-check=full" @@ -134,6 +134,7 @@ done cd .. done +rm -fr ${RESULTSDIR} totalcount=`expr $passcount + $failcount + $xfailcount` okcount=`expr $passcount + $xfailcount` diff --git a/ncdap_test/tst_tds.sh b/ncdap_test/tst_tds.sh index b098b530a..de8ff1d23 100755 --- a/ncdap_test/tst_tds.sh +++ b/ncdap_test/tst_tds.sh @@ -84,7 +84,7 @@ TESTSET="${TDSTESTS1}" # Temporarily suppress XFAILTESTS="tst-Surface-METAR.nc" -RESULTSDIR="./results" +RESULTSDIR="./results_tst_tds" expected3="${srcdir}/expecttds3" # Locate some tools @@ -157,6 +157,7 @@ for t in ${TESTSET} ; do done cd .. +rm -fr ${RESULTSDIR} totalcount=`expr $passcount + $failcount + $xfailcount` okcount=`expr $passcount + $xfailcount` diff --git a/ncdump/CMakeLists.txt b/ncdump/CMakeLists.txt index 174bba6d6..5f086ad46 100644 --- a/ncdump/CMakeLists.txt +++ b/ncdump/CMakeLists.txt @@ -104,11 +104,10 @@ ENDIF() add_sh_test(ncdump tst_64bit) add_bin_test_no_prefix(ref_ctest) add_bin_test_no_prefix(ref_ctest64) - add_sh_test(ncdump tst_ctest) add_sh_test(ncdump tst_output) add_sh_test(ncdump tst_lengths) add_sh_test(ncdump tst_calendars) - add_bin_test_no_prefix(tst_utf8) + build_bin_test_no_prefix(tst_utf8) add_sh_test(ncdump run_utf8_tests) IF(USE_NETCDF4) add_sh_test(ncdump run_utf8_nc4_tests) @@ -145,22 +144,22 @@ ENDIF() ENDIF(BUILD_DISKLESS) IF(USE_NETCDF4) - add_bin_test_no_prefix(tst_create_files) - add_bin_test_no_prefix(tst_group_data) - add_bin_test_no_prefix(tst_enum_data) - add_bin_test_no_prefix(tst_opaque_data) - add_bin_test_no_prefix(tst_string_data) - add_bin_test_no_prefix(tst_vlen_data) - add_bin_test_no_prefix(tst_comp) - add_bin_test_no_prefix(tst_comp2) - add_bin_test_no_prefix(tst_nans) - add_bin_test_no_prefix(tst_h_scalar) + build_bin_test_no_prefix(tst_create_files) + build_bin_test_no_prefix(tst_group_data) + build_bin_test_no_prefix(tst_enum_data) + build_bin_test_no_prefix(tst_opaque_data) + build_bin_test_no_prefix(tst_string_data) + build_bin_test_no_prefix(tst_vlen_data) + build_bin_test_no_prefix(tst_comp) + build_bin_test_no_prefix(tst_comp2) + build_bin_test_no_prefix(tst_nans) + build_bin_test_no_prefix(tst_h_scalar) add_sh_test(ncdump tst_formatx4) # Add this test by hand, as it is also called from a script. # Editing the script would break autotools compatibility. - add_bin_test_no_prefix(tst_special_atts) - add_bin_test_no_prefix(tst_compress) - add_bin_test_no_prefix(tst_chunking) + build_bin_test_no_prefix(tst_special_atts) + build_bin_test_no_prefix(tst_compress) + build_bin_test_no_prefix(tst_chunking) ### @@ -179,9 +178,9 @@ ENDIF() build_bin_test_no_prefix(tst_h_rdc0) ENDIF() - add_bin_test_no_prefix(tst_unicode) + build_bin_test_no_prefix(tst_unicode) - add_bin_test_no_prefix(tst_fillbug) + build_bin_test_no_prefix(tst_fillbug) add_sh_test(ncdump_sh tst_fillbug) IF(NOT MSVC) diff --git a/ncdump/Makefile.am b/ncdump/Makefile.am index 05c0ac7ec..c82756897 100644 --- a/ncdump/Makefile.am +++ b/ncdump/Makefile.am @@ -10,7 +10,6 @@ LDADD = ${top_builddir}/liblib/libnetcdf.la # Note which tests depend on other tests. Necessary for make -j check. TEST_EXTENSIONS = .sh -TESTS_ENVIRONMENT=CC=${CC} XFAIL_TESTS="" # This is the program we're building, and it's sources. @@ -46,20 +45,16 @@ check_PROGRAMS = rewrite-scalar ref_ctest ref_ctest64 ncdump tst_utf8 \ bom tst_dimsizes nctrunc # Tests for classic and 64-bit offset files. -TESTS = tst_inttags.sh run_tests.sh tst_64bit.sh ref_ctest \ -ref_ctest64 tst_ctest.sh tst_output.sh tst_lengths.sh \ -tst_calendars.sh run_utf8_tests.sh tst_nccopy3.sh \ -tst_nccopy3_subset.sh tst_charfill.sh tst_iter.sh tst_formatx3.sh \ -tst_bom.sh tst_dimsizes.sh run_ncgen_tests.sh tst_ncgen4_classic.sh +TESTS = tst_inttags.sh run_tests.sh tst_64bit.sh ref_ctest \ +ref_ctest64 tst_output.sh tst_lengths.sh tst_calendars.sh \ +run_utf8_tests.sh tst_nccopy3.sh tst_nccopy3_subset.sh \ +tst_charfill.sh tst_iter.sh tst_formatx3.sh tst_bom.sh \ +tst_dimsizes.sh run_ncgen_tests.sh tst_ncgen4_classic.sh -# Record dependencies between classic test scripts. +# The tst_nccopy3.sh test uses output from a bunch of other +# tests. This records the dependency so parallel builds work. tst_nccopy3.log: tst_calendars.log run_utf8_tests.log tst_output.log \ tst_64bit.log run_tests.log tst_lengths.log -run_ncgen_tests.log: tst_output.log tst_nccopy3.log -tst_ctest.log: ref_ctest.log ref_ctest64.log -tst_output.log: tst_ctest.log -tst_ncgen4_classic.log: tst_formatx3.log tst_output.log \ -tst_nccopy3.log run_ncgen_tests.log TESTS += tst_null_byte_padding.sh if USE_STRICT_NULL_BYTE_HEADER_PADDING @@ -85,15 +80,10 @@ tst_grp_spec.sh tst_mud.sh tst_h_scalar.sh tst_formatx4.sh \ run_utf8_nc4_tests.sh run_back_comp_tests.sh run_ncgen_nc4_tests.sh \ tst_ncgen4.sh -# Record dependencies between netcdf-4 test scripts. -tst_netcdf4.log: run_ncgen_tests.log tst_output.log tst_ncgen4.log \ -tst_formatx4.log -tst_nccopy4.log: tst_netcdf4.log tst_fillbug.log tst_netcdf4_4.log \ -tst_h_scalar.log tst_ctest.log -run_ncgen_nc4_tests.log: run_ncgen_tests.log tst_output.log \ -tst_nccopy3.log -run_utf8_nc4_tests.log: run_utf8_tests.log -tst_ncgen4.log: tst_ncgen4_classic.log tst_formatx4.log +# The tst_nccopy4.sh test script depends on the output of a bunch of +# other tests. Record dependencies so parallel builds work. +tst_nccopy4.log: run_ncgen_tests.log tst_output.log tst_ncgen4.log \ +tst_fillbug.log tst_netcdf4_4.log tst_h_scalar.log endif #!USE_NETCDF4 # Add diskless checks if needed. @@ -128,17 +118,18 @@ tst_charfill.cdl tst_charfill.sh tst_iter.sh tst_mud.sh \ ref_tst_mud4.cdl ref_tst_mud4-bc.cdl ref_tst_mud4_chars.cdl \ inttags.cdl inttags4.cdl ref_inttags.cdl ref_inttags4.cdl \ ref_tst_ncf213.cdl tst_h_scalar.sh run_utf8_nc4_tests.sh \ -tst_formatx3.sh tst_formatx4.sh ref_tst_utf8_4.cdl ref_tst_nc4_utf8_4.cdl \ -tst_inttags.sh tst_inttags4.sh CMakeLists.txt XGetopt.c tst_bom.sh \ -tst_inmemory_nc3.sh tst_dimsizes.sh tst_inmemory_nc4.sh \ -tst_fileinfo.sh run_ncgen_tests.sh ref_test_360_day_1900.nc \ -ref_test_365_day_1900.nc ref_test_366_day_1900.nc \ -ref_test_360_day_1900.cdl ref_test_365_day_1900.cdl \ -ref_test_366_day_1900.cdl tst_hdf5_offset.sh run_ncgen_nc4_tests.sh \ -tst_nccopy3_subset.sh ref_nccopy3_subset.nc ref_test_corrupt_magic.nc \ -tst_ncgen_shared.sh tst_ncgen4.sh tst_ncgen4_classic.sh \ -tst_ncgen4_diff.sh tst_ncgen4_cycle.sh tst_ctest.sh \ -tst_null_byte_padding.sh ref_null_byte_padding_test.nc +tst_formatx3.sh tst_formatx4.sh ref_tst_utf8_4.cdl \ +ref_tst_nc4_utf8_4.cdl tst_inttags.sh tst_inttags4.sh CMakeLists.txt \ +XGetopt.c tst_bom.sh tst_inmemory_nc3.sh tst_dimsizes.sh \ +tst_inmemory_nc4.sh tst_fileinfo.sh run_ncgen_tests.sh \ +ref_test_360_day_1900.nc ref_test_365_day_1900.nc \ +ref_test_366_day_1900.nc ref_test_360_day_1900.cdl \ +ref_test_365_day_1900.cdl ref_test_366_day_1900.cdl \ +tst_hdf5_offset.sh run_ncgen_nc4_tests.sh tst_nccopy3_subset.sh \ +ref_nccopy3_subset.nc ref_test_corrupt_magic.nc tst_ncgen_shared.sh \ +tst_ncgen4.sh tst_ncgen4_classic.sh tst_ncgen4_diff.sh \ +tst_ncgen4_cycle.sh tst_null_byte_padding.sh \ +ref_null_byte_padding_test.nc # The L512.bin file is file containing exactly 512 bytes each of value 0. # It is used for creating hdf5 files with varying offsets for testing. @@ -148,11 +139,12 @@ EXTRA_DIST += L512.bin SUBDIRS = cdl expected CLEANFILES = tst_*.nc tmp*.nc test*.nc iter.* tmp*.cdl \ -test1_ncdump.cdl test2_ncdump.cdl test1.cdl ctest1.cdl test1_cdf5.cdl \ -test2_cdf5.cdl test1_offset.cdl test2_offset.cdl ctest0.nc \ -ctest0_64.nc c1.cdl c1_4.cdl ctest1_64.cdl c0.nc c0_4.nc small.nc \ -small2.nc c0tmp.nc c1.ncml utf8.cdl utf8_64.cdl utf8.nc utf8_64.nc \ -nc4_utf8.cdl nc4_utf8.nc \ +tst_output_*.cdl tst_output_*.c tst_utf8_*.cdl tst_tst8.cdl \ +tst_netcdf4_*.cdl test1_ncdump.cdl test2_ncdump.cdl test1.cdl \ +ctest1.cdl test1_cdf5.cdl test2_cdf5.cdl test1_offset.cdl \ +test2_offset.cdl ctest0.nc ctest0_64.nc c1.cdl c1_4.cdl ctest1_64.cdl \ +c0.nc c0_4.nc small.nc small2.nc c0tmp.nc c1.ncml utf8.cdl \ +utf8_64.cdl utf8.nc utf8_64.nc nc4_utf8.cdl nc4_utf8.nc \ tst_unicode.cdl tst_group_data.cdl tst_compounds2.cdl tst_comp.cdl \ tst_enum_data.cdl tst_small.cdl tst_times.cdl tst_solar_2.cdl \ tst_string_data.cdl tst_fillbug.cdl tst_opaque_data.cdl \ diff --git a/ncdump/run_ncgen_nc4_tests.sh b/ncdump/run_ncgen_nc4_tests.sh index 27e712265..c239fa729 100755 --- a/ncdump/run_ncgen_nc4_tests.sh +++ b/ncdump/run_ncgen_nc4_tests.sh @@ -16,7 +16,8 @@ if test "x$srcdir" = x ; then srcdir="."; fi # $ validateNC compound_datasize_test -k nc4 ## validateNC() { - BASENAME=$1 + ORIGNAME=$1 + BASENAME=tst_$1_run_ncgen_nc4_tests INFILE=$top_srcdir/ncgen/$1.cdl TMPFILE=tst_$2.cdl shift @@ -25,7 +26,7 @@ validateNC() { echo "*** generating $BASENAME.nc ***" ${NCGEN} $ARGS -o $BASENAME.nc $INFILE - ${NCDUMP} $BASENAME.nc | sed 's/e+0/e+/g' > $TMPFILE + ${NCDUMP} -n $ORIGNAME $BASENAME.nc | sed 's/e+0/e+/g' > $TMPFILE echo "*** comparing binary against source CDL file *** " diff -b -w $INFILE $TMPFILE } diff --git a/ncdump/run_ncgen_tests.sh b/ncdump/run_ncgen_tests.sh index 7238c20ad..eb516e12d 100755 --- a/ncdump/run_ncgen_tests.sh +++ b/ncdump/run_ncgen_tests.sh @@ -24,7 +24,8 @@ fi #VALGRIND="valgrind -q --error-exitcode=2 --leak-check=full" validateNC() { - BASENAME=$1 + ORIGNAME=$1 + BASENAME=tst_$1_run_ncgen_tests INFILE=$top_srcdir/ncgen/$1.cdl TMPFILE=tst_$2.cdl shift @@ -37,24 +38,24 @@ validateNC() { else ${VALGRIND} ${NCGEN} $ARGS -o $BASENAME.nc $INFILE fi - ${NCDUMP} $BASENAME.nc | sed 's/e+0/e+/g' > $TMPFILE + ${NCDUMP} -n $ORIGNAME $BASENAME.nc | sed 's/e+0/e+/g' > $TMPFILE echo "*** comparing $BASENAME.nc against $INFILE *** " diff -b -w $INFILE $TMPFILE } -echo "*** creating classic file c0.nc from c0.cdl..." +echo "*** creating classic file c0_run_ncgen_tests.nc from c0.cdl..." validateNC c0 c0 -b -echo "*** creating 64-bit offset file c0_64.nc from c0.cdl..." +echo "*** creating 64-bit offset file c0_64_run_ncgen_tests.nc from c0.cdl..." validateNC c0 "c0_64" -k 64-bit-offset -b if test "x$USE_CDF5" = x1 ; then echo "*** creating 64-bit data file c5.nc from c5.cdl..." - ${NCGEN} -k 64-bit-data -b -o c5.nc $top_srcdir/ncgen/c5.cdl - if [ ! -f c5.nc ]; then + ${NCGEN} -k 64-bit-data -b -o tst_c5_run_ncgen_tests.nc $top_srcdir/ncgen/c5.cdl + if [ ! -f tst_c5_run_ncgen_tests.nc ]; then echo "Failure." exit 1 fi diff --git a/ncdump/run_utf8_nc4_tests.sh b/ncdump/run_utf8_nc4_tests.sh index 39476e4de..1a595eac7 100755 --- a/ncdump/run_utf8_nc4_tests.sh +++ b/ncdump/run_utf8_nc4_tests.sh @@ -1,20 +1,18 @@ #!/bin/sh +# This script runs UTF-8 tests for netCDF-4. +# Ward Fisher, Dennis Heimbigner, Ed Hartnett -if test "x$srcdir" = x ; then srcdir=`pwd`; fi - +if test "x$srcdir" = x ; then srcdir=`pwd`; fi . ../test_common.sh - -# -# Moving some netcdf-4 only tests here, out of tst_nccopy and run_utf8_tests. -# Without this, the tests fail when netcdf-4 is disabled. - set -e echo "" +echo "*** Testing netcdf-4 file with utf8 characters..." -rm -f nc4_utf8.nc nc4_utf8.cdl -echo "*** creating enhanced file with utf8 characters..." -${NCGEN} -4 -b -o nc4_utf8.nc ${srcdir}/ref_tst_nc4_utf8_4.cdl -echo "*** dump and compare utf8 output..." -${NCDUMP} nc4_utf8.nc > nc4_utf8.cdl -diff -b -w nc4_utf8.cdl ${srcdir}/ref_tst_nc4_utf8_4.cdl +rm -f tst_utf8_nc4.nc tst_utf8_nc4.cdl +${NCGEN} -4 -b -o tst_utf8_nc4.nc ${srcdir}/ref_tst_utf8_4.cdl +${NCDUMP} -n 'utf8' tst_utf8_nc4.nc > tst_utf8_nc4.cdl +diff -b -w tst_utf8_nc4.cdl ${srcdir}/ref_tst_utf8_4.cdl + +echo "*** NetCDF-4 UTF8 testing passed!" +exit 0 diff --git a/ncdump/run_utf8_tests.sh b/ncdump/run_utf8_tests.sh index 35a7e985e..679f8b130 100755 --- a/ncdump/run_utf8_tests.sh +++ b/ncdump/run_utf8_tests.sh @@ -1,44 +1,43 @@ +# This shell script runs ncdump tests relating to the new UTF8 name stuff. +# Russ Rew, Dennis Heimbigner, Ward Fisher, Ed Hartnett #!/bin/sh if test "x$srcdir" = x ; then srcdir=`pwd`; fi . ../test_common.sh - -# This shell script runs ncdump tests relating to the new UTF8 name stuff. - set -e + echo "" echo "*** Testing ncgen and ncdump for UTF8 support..." # Run tst_utf8.c to produce test file tst_utf8.nc. ${execdir}/tst_utf8 -if test "x$builddir" = x ; then -builddir="." -fi -if test "x$srcdir" = x ; then -srcdir="." -fi +# if test "x$builddir" = x ; then +# builddir="." +# fi +# if test "x$srcdir" = x ; then +# srcdir="." +# fi -rm -f utf8.nc utf8.cdl +rm -f tst_utf8_nc3.nc tst_utf8_nc3.cdl echo "*** creating classic offset file with utf8 characters..." -${NCGEN} -b -o utf8.nc ${srcdir}/ref_tst_utf8.cdl +${NCGEN} -b -o tst_utf8_nc3.nc ${srcdir}/ref_tst_utf8.cdl echo "*** dump and compare utf8 output..." -${NCDUMP} utf8.nc > utf8.cdl -diff -b -w utf8.cdl ${srcdir}/ref_tst_utf8.cdl +${NCDUMP} -n utf8 tst_utf8_nc3.nc > tst_utf8_nc3.cdl +diff -b -w tst_utf8_nc3.cdl ${srcdir}/ref_tst_utf8.cdl -rm -f utf8.nc utf8.cdl +rm -f tst_utf8_64.nc tst_utf8_64.cdl echo "*** creating 64-bit offset file with utf8 characters..." -${NCGEN} -k 64-bit-offset -b -o utf8.nc ${srcdir}/ref_tst_utf8.cdl +${NCGEN} -k 64-bit-offset -b -o tst_utf8_64.nc ${srcdir}/ref_tst_utf8.cdl echo "*** (64 bit) dump and compare utf8 output..." -${NCDUMP} utf8.nc > utf8.cdl -diff -b -w utf8.cdl ${srcdir}/ref_tst_utf8.cdl +${NCDUMP} -n utf8 tst_utf8_64.nc > tst_utf8_64.cdl +diff -b -w tst_utf8_64.cdl ${srcdir}/ref_tst_utf8.cdl echo "*** dumping tst_utf8.nc to tst_utf8.cdl..." -rm -f tst8.cdl -sed -e 's/^netcdf tst_unicode/netcdf tst_utf8/' <${srcdir}/ref_tst_unicode.cdl >tst8.cdl -${NCDUMP} tst_utf8.nc > tst_utf8.cdl -echo "*** comparing tst_utf8.cdl with tst8.cdl..." -diff -b -w tst_utf8.cdl tst8.cdl -rm -f tst8.cdl result +rm -f tst_tst8.cdl tst_utf8_tst8.cdl +sed -e 's/^netcdf tst_unicode/netcdf tst_utf8/' <${srcdir}/ref_tst_unicode.cdl > tst_tst8.cdl +${NCDUMP} tst_utf8.nc > tst_utf8_tst8.cdl +echo "*** comparing tst_utf8_tst8.cdl with tst_tst8.cdl..." +diff -b -w tst_utf8_tst8.cdl tst_tst8.cdl echo "*** All utf8 tests of ncgen and ncdump passed!" exit 0 diff --git a/ncdump/tst_ctest.sh b/ncdump/tst_ctest.sh deleted file mode 100755 index 5f727deba..000000000 --- a/ncdump/tst_ctest.sh +++ /dev/null @@ -1,23 +0,0 @@ -#!/bin/sh -# This shell script tests that running ncgen can use c0.cdl and -# produce the correct code, which matches ref_ctest.c. -# Ed Hartnett - -if test "x$srcdir" = x ; then srcdir=`pwd`; fi -. ../test_common.sh - -set -e - -echo "" -echo "*** Testing that ncgen produces correct C code from c0.cdl." -${execdir}/ref_ctest -${NCGEN} -lc -o ctest0.nc $srcdir/../ncgen/c0.cdl > ctest.c -diff -b ctest.c $srcdir/ref_ctest.c - -echo "*** Testing that ncgen with c0.cdl for 64-bit offset format." -${execdir}/ref_ctest64 -${NCGEN} -k2 -lc -o ctest0_64.nc $srcdir/../ncgen/c0.cdl > ctest64.c -diff -b ctest64.c $srcdir/ref_ctest64.c - -echo "*** All tests of ncgen with ctest.c and ctest64.c passed!" -exit 0 diff --git a/ncdump/tst_h_rdc0.c b/ncdump/tst_h_rdc0.c index 7edf354a9..5a3c0606a 100644 --- a/ncdump/tst_h_rdc0.c +++ b/ncdump/tst_h_rdc0.c @@ -3,7 +3,10 @@ See COPYRIGHT file for conditions of use. Use HDF5 to read c0.nc, a file created by ncdump. This check was - added to detect a problem in the early HDF5 1.8.0 releases. + added to detect a problem in the early HDF5 1.8.0 releases. This + program is called from the test script tst_netcdf4.sh, which uses + ncgen to create the test file c0_tst_netcdf4.nc, which this program + reads with HDF5. Ed Hartnett */ @@ -11,7 +14,7 @@ #include "err_macros.h" #include -#define FILE_NAME "c0.nc" +#define FILE_NAME "tst_netcdf4_c0.nc" #define MAX_NAME 1024 int @@ -19,7 +22,6 @@ main() { printf("\n*** Checking HDF5 file c0.nc.\n"); printf("*** Checking HDF5 objcts..."); - { hid_t fileid, grpid; hsize_t num_obj, i; @@ -42,6 +44,5 @@ main() H5Fclose(fileid) < 0) ERR; } SUMMARIZE_ERR; - FINAL_RESULTS; } diff --git a/ncdump/tst_nccopy3.sh b/ncdump/tst_nccopy3.sh index 97911db89..1b023e549 100755 --- a/ncdump/tst_nccopy3.sh +++ b/ncdump/tst_nccopy3.sh @@ -1,10 +1,13 @@ #!/bin/sh +# For a netCDF-3 build, test nccopy on netCDF files in this +# directory. This test depends on a bunch of other ncdump tests +# running first, to produce the data files that are used to test +# nccopy. +# Dennis Heimbigner if test "x$srcdir" = x ; then srcdir=`pwd`; fi . ../test_common.sh -# For a netCDF-3 build, test nccopy on netCDF files in this directory - set -e echo "" @@ -20,8 +23,8 @@ else exit 1 fi -TESTFILES='c0 c0tmp ctest0 ctest0_64 test0_offset test1_offset - tst_calendars tst_mslp tst_mslp_64 tst_ncml tst_small tst_utf8 utf8' +TESTFILES='tst_output_c0 tst_output_c0tmp ctest0 ctest0_64 test0_offset test1_offset + tst_calendars tst_mslp tst_mslp_64 tst_ncml tst_small tst_utf8' if test "x$HAVE_CDF5" = x1 ; then TESTFILES="$TESTFILES small small2" diff --git a/ncdump/tst_ncgen4.sh b/ncdump/tst_ncgen4.sh index 2a59415ce..a5be263e7 100755 --- a/ncdump/tst_ncgen4.sh +++ b/ncdump/tst_ncgen4.sh @@ -1,9 +1,13 @@ #!/bin/sh +# Tests for ncgen4 using list of test cdl files from the cdl4 +# directory, and comparing output to expected results in the expected4 +# directory. Note that these tests are run for classic files in +# tst_ncgen4_classic.sh +# Dennis Heimbigner if test "x$srcdir" = x ; then srcdir=`pwd`; fi . ../test_common.sh -verbose=1 set -e # To add a new test, @@ -15,14 +19,9 @@ set -e # 4. Add the new files into cdl4/Makefile.am # and expected4/Makefile.am - +verbose=1 export verbose -KFLAG=1 ; export KFLAG -echo "*** Performing diff tests: k=1" -sh ${srcdir}/tst_ncgen4_diff.sh -echo "*** Performing cycle tests: k=1" -sh ${srcdir}/tst_ncgen4_cycle.sh KFLAG=3 ; export KFLAG echo "*** Performing diff tests: k=3" sh ${srcdir}/tst_ncgen4_diff.sh @@ -34,5 +33,6 @@ sh ${srcdir}/tst_ncgen4_diff.sh echo "*** Performing cycle tests: k=4" sh ${srcdir}/tst_ncgen4_cycle.sh rm -rf ${RESULTSDIR} -exit +echo "SUCCESS!!" +exit 0 diff --git a/ncdump/tst_ncgen4_classic.sh b/ncdump/tst_ncgen4_classic.sh index 357e82916..e72f3f4ab 100755 --- a/ncdump/tst_ncgen4_classic.sh +++ b/ncdump/tst_ncgen4_classic.sh @@ -1,4 +1,8 @@ #!/bin/sh +# Tests for ncgen4 using list of test cdl files from the cdl4 +# directory, and comparing output to expected results in the expected4 +# directory. Same as tst_ncgen4.sh but for classic format. +# Dennie Heimbigner if test "x$srcdir" = x ; then srcdir=`pwd`; fi . ../test_common.sh @@ -6,12 +10,13 @@ if test "x$srcdir" = x ; then srcdir=`pwd`; fi set -e echo "" verbose=0 - export verbose +echo "*** Performing diff/cycle tests for classic format: k=1" KFLAG=1 ; export KFLAG bash -x ${srcdir}/tst_ncgen4_diff.sh bash -x ${srcdir}/tst_ncgen4_cycle.sh +echo "SUCCESS!!" exit 0 diff --git a/ncdump/tst_ncgen4_cycle.sh b/ncdump/tst_ncgen4_cycle.sh index 88ee03407..6a3766ec7 100755 --- a/ncdump/tst_ncgen4_cycle.sh +++ b/ncdump/tst_ncgen4_cycle.sh @@ -35,18 +35,19 @@ for x in ${TESTSET} ; do echo "xfail test: ${x}: ignored" xfailcount=`expr $xfailcount + 1` else - rm -f ${x}.nc ${x}.dmp + rm -f ${x}_$$.nc ${x}_$$.dmp # step 1: use original cdl to build the .nc - ${NCGEN} -b -k${KFLAG} -o ${x}.nc ${cdl}/${x}.cdl + ${NCGEN} -b -k${KFLAG} -o ${x}_$$.nc ${cdl}/${x}.cdl # step 2: dump .nc file - ${NCDUMP} ${headflag} ${specflag} ${x}.nc > ${x}.dmp + ${NCDUMP} ${headflag} ${specflag} -n ${x} ${x}_$$.nc > ${x}_$$.dmp # step 3: use ncgen and the ncdump output to (re-)build the .nc - rm -f ${x}.nc - ${NCGEN} -b -k${KFLAG} -o ${x}.nc ${x}.dmp + rm -f ${x}_$$.nc + ${NCGEN} -b -k${KFLAG} -o ${x}_$$.nc ${x}_$$.dmp # step 4: dump .nc file again - ${NCDUMP} ${headflag} ${specflag} ${x}.nc > ${x}.dmp2 + ${NCDUMP} ${headflag} ${specflag} -n ${x} ${x}_$$.nc > ${x}_$$.dmp2 # compare the two ncdump outputs - if diff -b -w ${x}.dmp ${x}.dmp2 ; then ok=1; else ok=0; fi + if diff -b -w ${x}_$$.dmp ${x}_$$.dmp2 ; then ok=1; else ok=0; fi + rm -f ${x}_$$.nc ${x}_$$.dmp if test "x$ok" = "x1" ; then test "x$verbose" = x1 && echo "*** SUCCEED: ${x}" passcount=`expr $passcount + 1` diff --git a/ncdump/tst_ncgen4_diff.sh b/ncdump/tst_ncgen4_diff.sh index dfe5df8b9..044ee8e8b 100755 --- a/ncdump/tst_ncgen4_diff.sh +++ b/ncdump/tst_ncgen4_diff.sh @@ -36,10 +36,10 @@ for x in ${TESTSET} ; do if test "x${t}" = "x${x}" ; then isxfail=1; fi done rm -f ${x}.nc ${x}.dmp - ${NCGEN} -b -k${KFLAG} -o ${x}.nc ${cdl}/${x}.cdl + ${NCGEN} -b -k${KFLAG} -o ${x}_$$.nc ${cdl}/${x}.cdl # dump .nc file # if windows, we need to remove any leading 0's in exponents. - ${NCDUMP} ${headflag} ${specflag} ${x}.nc | sed 's/e+0/e+/g' > ${x}.dmp + ${NCDUMP} ${headflag} ${specflag} -n ${x} ${x}_$$.nc | sed 's/e+0/e+/g' > ${x}.dmp # compare the expected (silently if XFAIL) if test "x$isxfail" = "x1" -a "x$SHOWXFAILS" = "x" ; then if diff -b -bw ${expected}/${x}.dmp ${x}.dmp >/dev/null 2>&1; then ok=1; else ok=0; fi diff --git a/ncdump/tst_ncgen_shared.sh b/ncdump/tst_ncgen_shared.sh index a7b2a4f71..9bf84a2f9 100755 --- a/ncdump/tst_ncgen_shared.sh +++ b/ncdump/tst_ncgen_shared.sh @@ -144,4 +144,3 @@ passcount=0 xfailcount=0 rm -fr $RESULTSDIR -#mkdir $RESULTSDIR diff --git a/ncdump/tst_netcdf4.sh b/ncdump/tst_netcdf4.sh index 905cb0595..be7491123 100755 --- a/ncdump/tst_netcdf4.sh +++ b/ncdump/tst_netcdf4.sh @@ -8,87 +8,61 @@ if test "x$srcdir" = x ; then srcdir=`pwd`; fi set -e echo "" -echo "*** Testing ncgen and ncdump test output for netCDF-4 format." -# echo "*** creating netcdf-4 file c0_4.nc from c0_4.cdl..." -${NCGEN} -k nc4 -b -o c0_4.nc ${ncgenc04} -# echo "*** creating c1_4.cdl from c0_4.nc..." -${NCDUMP} -n c1 c0_4.nc | sed 's/e+0/e+/g' > c1_4.cdl -# echo "*** comparing c1_4.cdl with ref_ctest1_nc4.cdl..." -diff -b c1_4.cdl $srcdir/ref_ctest1_nc4.cdl +echo "*** Testing ncgen and ncdump for netCDF-4 format." +${NCGEN} -k nc4 -b -o tst_netcdf4_c0_4.nc ${ncgenc04} +${NCDUMP} -n c1 tst_netcdf4_c0_4.nc | sed 's/e+0/e+/g' > tst_netcdf4_c1_4.cdl +diff -b tst_netcdf4_c1_4.cdl $srcdir/ref_ctest1_nc4.cdl -echo "*** Testing ncgen and ncdump test output for netCDF-4 classic format." -# echo "*** creating netcdf-4 classic file c0.nc from c0.cdl..." -${NCGEN} -k nc7 -b -o c0.nc ${ncgenc0} -# echo "*** creating c1.cdl from c0.nc..." +echo "*** Creating test output tst_netcdf4_c0.nc." +${NCGEN} -k nc7 -b -o tst_netcdf4_c0.nc ${ncgenc0} -echo "*** Testing that program tst_h_rdc0 can read c0.cdl." +echo "*** Testing that program tst_h_rdc0 can read tst_netcdf4_c0.nc." ${execdir}/tst_h_rdc0 -# echo "*** comparing c1.cdl with ref_ctest1_nc4c.cdl..." -diff -b c1.cdl $srcdir/ref_ctest1_nc4c.cdl - echo "*** Running tst_create_files.c to create test files." ${execdir}/tst_create_files echo "*** Testing tst_create_files output for netCDF-4 features." ${NCDUMP} tst_solar_1.nc | sed 's/e+0/e+/g' > tst_solar_1.cdl -# echo "*** comparing tst_solar_1.cdl with ref_tst_solar_1.cdl..." diff -b tst_solar_1.cdl $srcdir/ref_tst_solar_1.cdl ${NCDUMP} tst_solar_2.nc | sed 's/e+0/e+/g' > tst_solar_2.cdl -# echo "*** comparing tst_solar_2.cdl with ref_tst_solar_2.cdl..." diff -b tst_solar_2.cdl $srcdir/ref_tst_solar_2.cdl echo "*** Running tst_group_data.c to create test files." ${execdir}/tst_group_data ${NCDUMP} tst_group_data.nc | sed 's/e+0/e+/g' > tst_group_data.cdl -# echo "*** comparing tst_group_data.cdl with ref_tst_group_data.cdl..." diff -b tst_group_data.cdl $srcdir/ref_tst_group_data.cdl -# Temporary hack to skip a couple tests that won't work in windows -# without changing the format of the string. See: -# -# http://www.mingw.org/wiki/Posix_path_conversion - -if [[ "$OSTYPE" != 'msys' ]]; then echo "*** Testing -v option with absolute name and groups..." ${NCDUMP} -v /g2/g3/var tst_group_data.nc | sed 's/e+0/e+/g' > tst_group_data.cdl -# echo "*** comparing tst_group_data.cdl with ref_tst_group_data_v23.cdl..." diff -b tst_group_data.cdl $srcdir/ref_tst_group_data_v23.cdl -fi echo "*** Testing -v option with relative name and groups..." ${NCDUMP} -v var,var2 tst_group_data.nc | sed 's/e+0/e+/g' > tst_group_data.cdl -# echo "*** comparing tst_group_data.cdl with ref_tst_group_data.cdl..." diff -b tst_group_data.cdl $srcdir/ref_tst_group_data.cdl echo "*** Running tst_enum_data.c to create test files." ${execdir}/tst_enum_data ${NCDUMP} tst_enum_data.nc | sed 's/e+0/e+/g' > tst_enum_data.cdl -# echo "*** comparing tst_enum_data.cdl with ref_tst_enum_data.cdl..." diff -b tst_enum_data.cdl $srcdir/ref_tst_enum_data.cdl echo "*** Running tst_opaque_data.c to create test files." ${execdir}/tst_opaque_data ${NCDUMP} tst_opaque_data.nc | sed 's/e+0/e+/g' > tst_opaque_data.cdl -# echo "*** comparing tst_opaque_data.cdl with ref_tst_opaque_data.cdl..." diff -b tst_opaque_data.cdl $srcdir/ref_tst_opaque_data.cdl echo "*** Running tst_vlen_data.c to create test files." ${execdir}/tst_vlen_data ${NCDUMP} tst_vlen_data.nc | sed 's/e+0/e+/g' > tst_vlen_data.cdl -# echo "*** comparing tst_vlen_data.cdl with ref_tst_vlen_data.cdl..." diff -b tst_vlen_data.cdl $srcdir/ref_tst_vlen_data.cdl echo "*** Running tst_comp.c to create test files." ${execdir}/tst_comp ${NCDUMP} tst_comp.nc | sed 's/e+0/e+/g' > tst_comp.cdl -# echo "*** comparing tst_comp.cdl with ref_tst_comp.cdl..." diff -b tst_comp.cdl $srcdir/ref_tst_comp.cdl -# echo "*** creating tst_nans.cdl from tst_nans.nc" echo "*** Running tst_nans.c to create test files." ${execdir}/tst_nans ${NCDUMP} tst_nans.nc | sed 's/e+0/e+/g' > tst_nans.cdl -# echo "*** comparing ncdump of generated file with ref_tst_nans.cdl ..." diff -b tst_nans.cdl $srcdir/ref_tst_nans.cdl # Do unicode test only if it exists => BUILD_UTF8 is true diff --git a/ncdump/tst_output.sh b/ncdump/tst_output.sh index c8a88679e..16594d095 100755 --- a/ncdump/tst_output.sh +++ b/ncdump/tst_output.sh @@ -10,19 +10,27 @@ set -e echo "" echo "*** Testing ncgen and ncdump test output for classic format." -echo "*** creating ctest1.cdl from ctest0.nc..." -${NCDUMP} -n c1 ${builddir}/ctest0.nc | sed 's/e+0/e+/g' > ctest1.cdl -echo "*** creating c0.nc from c0.cdl..." -${NCGEN} -b -o c0.nc ${ncgenc0} -echo "*** creating c1.cdl from c0.nc..." -${NCDUMP} -n c1 ${builddir}/c0.nc | sed 's/e+0/e+/g' > c1.cdl + +echo "*** Testing that ncgen produces correct C code from c0.cdl." +${execdir}/ref_ctest +${NCGEN} -lc -o ctest0.nc $srcdir/../ncgen/c0.cdl > tst_output_ctest.c +diff -b tst_output_ctest.c $srcdir/ref_ctest.c + +echo "*** creating ctest1.cdl from tst_output_ctest0.nc..." +${NCDUMP} -n c1 ${builddir}/ctest0.nc | sed 's/e+0/e+/g' > tst_output_ctest1.cdl +echo "*** creating tst_output_c0.nc from c0.cdl..." +${NCGEN} -b -o tst_output_c0.nc ${ncgenc0} +echo "*** creating tst_output_c1.cdl from tst_output_c0.nc..." +${NCDUMP} -n c1 ${builddir}/tst_output_c0.nc | sed 's/e+0/e+/g' > tst_output_c1.cdl +echo "*** comparing tst_output_c1.cdl with ref_ctest1_nc4c.cdl..." +diff -b tst_output_c1.cdl $srcdir/ref_ctest1_nc4c.cdl echo "*** comparing ncdump of C program output (ctest1.cdl) with c1.cdl..." -diff -b c1.cdl ctest1.cdl +diff -b tst_output_c1.cdl tst_output_ctest1.cdl echo "*** test output for ncdump -k" -KIND=`${NCDUMP} -k c0.nc` +KIND=`${NCDUMP} -k tst_output_c0.nc` test "$KIND" = "classic"; -${NCGEN} -k $KIND -b -o c0tmp.nc ${ncgenc0} -cmp c0tmp.nc c0.nc +${NCGEN} -k $KIND -b -o tst_output_c0tmp.nc ${ncgenc0} +cmp tst_output_c0tmp.nc tst_output_c0.nc echo "*** test output for ncdump -x" echo "*** creating tst_ncml.nc from tst_ncml.cdl" @@ -42,19 +50,24 @@ diff -b tst_format_att.cdl $srcdir/ref_tst_format_att.cdl echo "*** All ncgen and ncdump test output for classic format passed!" +echo "*** Testing that ncgen with c0.cdl for 64-bit offset format." +${execdir}/ref_ctest64 +${NCGEN} -k2 -lc -o ctest0_64.nc $srcdir/../ncgen/c0.cdl > tst_output_ctest64.c +diff -b tst_output_ctest64.c $srcdir/ref_ctest64.c + echo "*** Testing ncgen and ncdump test output for 64-bit offset format." echo "*** creating ctest1_64.cdl from test0_64.nc..." -${NCDUMP} -n c1 ctest0_64.nc | sed 's/e+0/e+/g' > ctest1_64.cdl -echo "*** creating c0.nc from c0.cdl..." -${NCGEN} -k nc6 -b -o c0.nc ${ncgenc0} -echo "*** creating c1.cdl from c0.nc..." -${NCDUMP} -n c1 c0.nc | sed 's/e+0/e+/g' > c1.cdl -echo "*** comparing ncdump of C program output (ctest1_64.cdl) with c1.cdl..." -diff -b c1.cdl ctest1_64.cdl +${NCDUMP} -n c1 ctest0_64.nc | sed 's/e+0/e+/g' > tst_output_ctest1_64.cdl +echo "*** creating tst_output_c0_64.nc from c0.cdl..." +${NCGEN} -k nc6 -b -o tst_output_c0_64.nc ${ncgenc0} +echo "*** creating tst_output_c1_64.cdl from tst_output_c0_64.nc..." +${NCDUMP} -n c1 tst_output_c0_64.nc | sed 's/e+0/e+/g' > tst_output_c1_64.cdl +echo "*** comparing ncdump of C program output (ctest1_64.cdl) with tst_output_c1_64.cdl..." +diff -b tst_output_c1_64.cdl tst_output_ctest1_64.cdl echo "*** test output for ncdump -k" -test "`${NCDUMP} -k c0.nc`" = "64-bit offset"; -${NCGEN} -k nc6 -b -o c0tmp.nc ${ncgenc0} -cmp c0tmp.nc c0.nc +test "`${NCDUMP} -k tst_output_c0_64.nc`" = "64-bit offset"; +${NCGEN} -k nc6 -b -o tst_output_c0_64_tmp.nc ${ncgenc0} +cmp tst_output_c0_64_tmp.nc tst_output_c0_64.nc echo "*** test output for ncdump -s" echo "*** creating tst_mslp_64.nc from tst_mslp.cdl" diff --git a/ncgen/cvt.c b/ncgen/cvt.c index 39e965cf4..3b57cf9df 100644 --- a/ncgen/cvt.c +++ b/ncgen/cvt.c @@ -648,7 +648,6 @@ convertFilterID(const char* id) { unsigned int nid = 0; int ok = 0; - struct FilterID* f; /* for now, must be an integer */ ok = sscanf(id,"%u",&nid); diff --git a/nctest/driver.c b/nctest/driver.c index af5fb69fd..c87417321 100644 --- a/nctest/driver.c +++ b/nctest/driver.c @@ -57,7 +57,6 @@ main(int argc, char **argv) char testfile[NC_MAX_NAME]; int format[MAX_NUM_FORMATS]; int num_formats; - int f = 0; int i, nerrs = 0; ncopts &= ~NC_FATAL; /* make errors nonfatal */ diff --git a/oc2/ocnode.c b/oc2/ocnode.c index a233dba38..de099d0fb 100644 --- a/oc2/ocnode.c +++ b/oc2/ocnode.c @@ -6,8 +6,6 @@ #include "occompile.h" #include "ocdebug.h" -static const unsigned int MAX_UINT = 0xffffffff; - static OCerror mergedas1(OCnode* dds, OCnode* das); static OCerror mergedods1(OCnode* dds, OCnode* das); static OCerror mergeother1(OCnode* root, OCnode* das); diff --git a/oc2/ocread.c b/oc2/ocread.c index fa5d82fde..81485316d 100644 --- a/oc2/ocread.c +++ b/oc2/ocread.c @@ -204,9 +204,7 @@ static int readfile(const char* path, const char* suffix, NCbytes* packet) { int stat = OC_NOERR; - char buf[1024]; char filename[1024]; - int flags = 0; /* check for leading file:/// */ if(ocstrncmp(path,"file://",7)==0) path += 7; /* assume absolute path*/ if(!occopycat(filename,sizeof(filename),2,path,(suffix != NULL ? suffix : "")))