function test_dim_inq ( ncfile )
% TEST_DIM_INQ
%
% Tests number of dimensions, variables, global attributes, record dimension for
% foo.nc.  
%
% Tests bad ncid as well.
%
% Test 1:  Normal inquiry
% Test 2:  Bad ncid.
% Test 3:  Empty set ncid.
% Test 4:  Bad dimid.
% Test 5:  Empty set dimid.
% Test 6:  character dimname

if nargin < 1
	ncfile = 'foo.nc';
end

create_test_file(ncfile);
test_normal(ncfile);          % #1
test_bad_ncid(ncfile);        % #2
test_empty_set_ncid(ncfile);  % #3
test_bad_dimid(ncfile);       % #4
test_empty_set_dimid(ncfile); % #5
test_char_dimname(ncfile);    % #6

fprintf ( 1, 'DIMINQ succeeded\n' );

%--------------------------------------------------------------------------
function create_test_file(ncfile)

% Create a oct_netcdf file with
[ncid, status] = oct_mexnc ( 'create', ncfile, nc_clobber_mode );
if ( status ~= 0 )
	error ( 'CREATE failed' );
end


%
% DIMDEF
[xdimid, status] = oct_mexnc ( 'def_dim', ncid, 'x', 20 );
if ( status ~= 0 )
	error ( 'DEF_DIM failed on X' );
end
[ydimid, status] = oct_mexnc ( 'def_dim', ncid, 'y', 24 );
if ( status ~= 0 )
	error ( 'DEF_DIM failed on y' );
end
[zdimid, status] = oct_mexnc ( 'def_dim', ncid, 'z', 32 );
if ( status ~= 0 )
	error ( 'DEF_DIM failed on z' );
end


%
% ENDEF
[status] = oct_mexnc ( 'enddef', ncid );
if ( status ~= 0 )
	error ( 'ENDEF failed with write' );
end

oct_mexnc('close',ncid);


%--------------------------------------------------------------------------
function test_normal(ncfile)

ncid = oct_mexnc('open',ncfile);

xdimid = oct_mexnc('dimid',ncid,'x');

%
% dimension 0 should have name 'x', length 20
% Test 1:  Normal inquiry
[name, length, status] = oct_mexnc('DIMINQ', ncid, xdimid);
if ( status ~= 0 )
	error('failed');
end

if ~strcmp ( name, 'x' )
	error ( 'DIMINQ returned ''%s'' as a name, but it should have been ''x''', name );
end
if ( length ~= 20 )
	error ( 'DIMINQ returned %d as x''s length, but it should have been 20', length );
end

oct_mexnc('close',ncid);





%--------------------------------------------------------------------------
function test_bad_ncid(ncfile)

ncid = oct_mexnc('open',ncfile);
xdimid = oct_mexnc('dimid',ncid,'x');


% Test 2:  Bad ncid.
testid = 'Test 2';
[name, length, status] = oct_mexnc('DIMINQ', -5, xdimid);
if ( status >= 0 )
	error('failed');
end


oct_mexnc('close',ncid);


%--------------------------------------------------------------------------
function test_empty_set_ncid(ncfile)

ncid = oct_mexnc('open',ncfile);
xdimid = oct_mexnc('dimid',ncid,'x');

testid = 'Test 2';
try
	error('failed')
end

oct_mexnc('close',ncid);


%--------------------------------------------------------------------------
function test_bad_dimid(ncfile)

ncid = oct_mexnc('open',ncfile);
xdimid = oct_mexnc('dimid',ncid,'x');


% Test 4:  Bad dimid.
testid = 'Test 4';
[name, length, status] = oct_mexnc('DIMINQ', ncid, -5000);
if ( status >= 0 )
	error('failed');
end

oct_mexnc('close',ncid);


%--------------------------------------------------------------------------
function test_empty_set_dimid(ncfile)

ncid = oct_mexnc('open',ncfile);
xdimid = oct_mexnc('dimid',ncid,'x');

% Test 5:  Empty set dimid.
testid = 'Test 5';
try
	[name, length, status] = oct_mexnc('DIMINQ', ncid, []);
	error('failed');
catch
	% ok
end


status = oct_mexnc ( 'close', ncid );
if ( status ~= 0 )
	error ( 'CLOSE failed on nowrite' );
end


return





%--------------------------------------------------------------------------
function test_char_dimname(ncfile)

ncid = oct_mexnc('open',ncfile);
xdimid = oct_mexnc('dimid',ncid,'x');

[name, length, status] = oct_mexnc('DIMINQ', ncid, 'x');
if status < 0
	error ( 'char dim name inquiry failed' );
end

if ~strcmp ( name, 'x' )
	error ( 'DIMINQ returned ''%s'' as a name, but it should have been ''x''', name );
end
if ( length ~= 20 )
	error ( 'DIMINQ returned %d as x''s length, but it should have been 20', length );
end


status = oct_mexnc ( 'close', ncid );
if ( status ~= 0 )
	error ( 'CLOSE failed on nowrite' );
end


return












