function test_inq_dim ( ncfile ) % TEST_INQ_DIM % % Tests number of dimensions, variables, global attributes, record dimension for % foo.nc. Also tests helper routines, "nc_inq_dimlen", "nc_inq_dimname". % % Test 1: INQ_DIM: Normal retrieval % Test 2: INQ_DIM: Bad ncid. % Test 3: INQ_DIM: Empty set ncid. % Test 4: INQ_DIM: Non numeric ncid % Test 5: INQ_DIM: Bad dimid. % Test 6: INQ_DIM: Empty set dimid. % Test 7: INQ_DIM: Non numeric dimid % Test 11: INQ_DIMLEN: Normal retrieval % Test 12: INQ_DIMLEN: Bad ncid. % Test 13: INQ_DIMLEN: Empty set ncid. % Test 14: INQ_DIMLEN: Non numeric ncid % Test 15: INQ_DIMLEN: Bad dimid. % Test 16: INQ_DIMLEN: Empty set dimid. % Test 17: INQ_DIMLEN: Non numeric dimid % Test 21: INQ_DIMNAME: Normal retrieval % Test 22: INQ_DIMNAME: Bad ncid. % Test 23: INQ_DIMNAME: Empty set ncid. % Test 24: INQ_DIMNAME: Non numeric ncid % Test 25: INQ_DIMNAME: Bad dimid. % Test 26: INQ_DIMNAME: Empty set dimid. % Test 27: INQ_DIMNAME: Non numeric dimid error_condition = 0; % % Create a netcdf file with [ncid, status] = mexnc ( 'create', ncfile, nc_clobber_mode ); if ( status ~= 0 ) error ( 'CREATE failed' ); end % % DIMDEF [xdimid, status] = mexnc ( 'def_dim', ncid, 'x', 20 ); if ( status ~= 0 ) error ( 'DEF_DIM failed on X' ); end [ydimid, status] = mexnc ( 'def_dim', ncid, 'y', 24 ); if ( status ~= 0 ) error ( 'DEF_DIM failed on y' ); end [zdimid, status] = mexnc ( 'def_dim', ncid, 'z', 32 ); if ( status ~= 0 ) error ( 'DEF_DIM failed on z' ); end % % ENDEF [status] = mexnc ( 'enddef', ncid ); if ( status ~= 0 ) error ( 'ENDEF failed with write' ); end [status] = mexnc ( 'sync', ncid ); if ( status ~= 0 ) msg = sprintf ( 'SYNC failed with write, %s', mexnc ( 'strerror', status ) ); error ( msg ); end % % dimension 0 should have name 'x', length 20 % Test 1: Normal retrieval testid = 'Test 1'; [name, length, status] = mexnc('INQ_DIM', ncid, xdimid); if ( status ~= 0 ) err_msg = sprintf ( '%s: %s, ''%s''\n', mfilename, test_id, ncerr ); error ( err_msg ); end if ~strcmp ( name, 'x' ) msg = sprintf ( 'INQ_DIM returned ''%s'' as a name, but it should have been ''x''', name ); error ( msg ); end if ( length ~= 20 ) msg = sprintf ( 'INQ_DIM returned %d as x''s length, but it should have been 20', length ); error ( msg ); end % Test 2: Bad ncid. testid = 'Test 2'; [name, length, status] = mexnc('INQ_DIM', -20000, xdimid); if ( status == 0 ) err_msg = sprintf ( '%s: %s: Succeeded when it should have failed\n', mfilename, testid ); error ( err_msg ); end % Test 3: Empty set ncid. testid = 'Test 3'; try [name, length, status] = mexnc('INQ_DIM', [], xdimid); error_condition = 1; end if error_condition == 1 err_msg = sprintf ( '%s: %s: Succeeded when it should have failed\n', mfilename, testid ); error ( err_msg ); end % Test 4: Non numeric ncid testid = 'Test 4'; try [name, length, status] = mexnc('INQ_DIM', 'ncid', xdimid); error_condition = 1; end if error_condition == 1 err_msg = sprintf ( '%s: %s: Succeeded when it should have failed\n', mfilename, testid ); error ( err_msg ); end % Test 5: Bad dimid. testid = 'Test 5'; [name, length, status] = mexnc('INQ_DIM', ncid, -20000); if ( status == 0 ) err_msg = sprintf ( '%s: %s: Succeeded when it should have failed\n', mfilename, testid ); error ( err_msg ); end % Test 6: Empty set dimid. testid = 'Test 6'; try [name, length, status] = mexnc('INQ_DIM', ncid, []); error_condition = 1; end if error_condition == 1 err_msg = sprintf ( '%s: %s: Succeeded when it should have failed\n', mfilename, testid ); error ( err_msg ); end % Test 7: Non numeric dimid testid = 'Test 7'; try [name, length, status] = mexnc('INQ_DIM', ncid, 'xdimid'); error_condition = 1; end if error_condition == 1 err_msg = sprintf ( '%s: %s: Succeeded when it should have failed\n', mfilename, testid ); error ( err_msg ); end fprintf ( 1, 'INQ_DIM succeeded\n' ); % % dimension 0 should have name 'x', length 20 % Test 11: Normal retrieval testid = 'Test 11'; [dimlen, status] = mexnc('INQ_DIMLEN', ncid, xdimid); if ( status ~= 0 ) err_msg = sprintf ( '%s: %s, ''%s''\n', mfilename, test_id, ncerr ); error ( err_msg ); end if ( dimlen ~= 20 ) msg = sprintf ( 'INQ_DIMLEN returned %d as x''s length, but it should have been 20', dimlen ); error ( msg ); end % Test 12: Bad ncid. testid = 'Test 12'; [dimlen, status] = mexnc('INQ_DIMLEN', -20000, xdimid); if ( status == 0 ) err_msg = sprintf ( '%s: %s: Succeeded when it should have failed\n', mfilename, testid ); error ( err_msg ); end % Test 13: Empty set ncid. testid = 'Test 13'; try [dimlen, status] = mexnc('INQ_DIMLEN', [], xdimid); error_condition = 1; end if error_condition == 1 err_msg = sprintf ( '%s: %s: Succeeded when it should have failed\n', mfilename, testid ); error ( err_msg ); end % Test 14: Non numeric ncid testid = 'Test 14'; try [dimlen, status] = mexnc('INQ_DIMLEN', 'ncid', xdimid); error_condition = 1; end if error_condition == 1 err_msg = sprintf ( '%s: %s: Succeeded when it should have failed\n', mfilename, testid ); error ( err_msg ); end % Test 15: Bad dimid. testid = 'Test 15'; [dimlen, status] = mexnc('INQ_DIMLEN', ncid, -20000); if ( status == 0 ) err_msg = sprintf ( '%s: %s: Succeeded when it should have failed\n', mfilename, testid ); error ( err_msg ); end % Test 16: Empty set dimid. testid = 'Test 16'; try [dimlen, status] = mexnc('INQ_DIMLEN', ncid, []); error_condition = 1; end if error_condition == 1 err_msg = sprintf ( '%s: %s: Succeeded when it should have failed\n', mfilename, testid ); error ( err_msg ); end % Test 17: Non numeric dimid testid = 'Test 17'; try [dimlen, status] = mexnc('INQ_DIMLEN', ncid, 'xdimid'); error_condition = 1; end if error_condition == 1 err_msg = sprintf ( '%s: %s: Succeeded when it should have failed\n', mfilename, testid ); error ( err_msg ); end fprintf ( 1, 'INQ_DIMLEN succeeded\n' ); % % dimension 0 should have name 'x', length 20 % Test 21: Normal retrieval testid = 'Test 21'; [name, status] = mexnc('INQ_DIMNAME', ncid, xdimid); if ( status ~= 0 ) err_msg = sprintf ( '%s: %s, ''%s''\n', mfilename, test_id, ncerr ); error ( err_msg ); end if ~strcmp ( name, 'x' ) msg = sprintf ( 'INQ_DIMNAME returned ''%s'' as a name, but it should have been ''x''', name ); error ( msg ); end % Test 22: Bad ncid. testid = 'Test 22'; [name, status] = mexnc('INQ_DIMNAME', -20000, xdimid); if ( status == 0 ) err_msg = sprintf ( '%s: %s: Succeeded when it should have failed\n', mfilename, testid ); error ( err_msg ); end % Test 23: Empty set ncid. testid = 'Test 23'; try [name, status] = mexnc('INQ_DIMNAME', [], xdimid); error_condition = 1; end if error_condition == 1 err_msg = sprintf ( '%s: %s: Succeeded when it should have failed\n', mfilename, testid ); error ( err_msg ); end % Test 24: Non numeric ncid testid = 'Test 24'; try [name, status] = mexnc('INQ_DIMNAME', 'ncid', xdimid); error_condition = 1; end if error_condition == 1 err_msg = sprintf ( '%s: %s: Succeeded when it should have failed\n', mfilename, testid ); error ( err_msg ); end % Test 25: Bad dimid. testid = 'Test 25'; [name, status] = mexnc('INQ_DIMNAME', ncid, -20000); if ( status == 0 ) err_msg = sprintf ( '%s: %s: Succeeded when it should have failed\n', mfilename, testid ); error ( err_msg ); end % Test 26: Empty set dimid. testid = 'Test 26'; try [name, status] = mexnc('INQ_DIMNAME', ncid, []); error_condition = 1; end if error_condition == 1 err_msg = sprintf ( '%s: %s: Succeeded when it should have failed\n', mfilename, testid ); error ( err_msg ); end % Test 27: Non numeric dimid testid = 'Test 27'; try [name, status] = mexnc('INQ_DIMNAME', ncid, 'xdimid'); error_condition = 1; end if error_condition == 1 err_msg = sprintf ( '%s: %s: Succeeded when it should have failed\n', mfilename, testid ); error ( err_msg ); end fprintf ( 1, 'INQ_DIMNAME succeeded\n' ); status = mexnc ( 'close', ncid ); if ( status < 0 ) error ( 'CLOSE failed on nowrite' ); end return