function test_lfs ( ncfile )
% TEST_LFS:  test large file support


fprintf ( 1, 'Do you wish to test large file support?\n' );
fprintf ( 1, '\n' );
fprintf ( 1, 'If you choose to proceed, we will create a NetCDF file \n' );
fprintf ( 1, 'with a short int variable with two dimensions, one\n' );
fprintf ( 1, 'of which is a record dimension, the other of length 5,000,000.\n' );
fprintf ( 1, 'You will then be asked for the number of records to write.\n' );
fprintf ( 1, 'Each record will be about 10MB, so if you specify 500,\n' );
fprintf ( 1, 'you should end up with a 5GB file.  You need to specify at least\n' );
fprintf ( 1, '215 to adequately test large file support, and if your disk I/O\n' );
fprintf ( 1, 'is on the pokey side, you might as well go brew up a batch of \n' );
fprintf ( 1, 'coffee, check your stock quotes, and read up on Slashdot while \n' );
fprintf ( 1, 'you are waiting.  Make sure you have enough disk space for this! \n' );
fprintf ( 1, '\n' );
answer = input ( 'Do you wish to proceed? [y/n]\n', 's' );
if strcmp ( lower(answer), 'y' )
	;
else
	fprintf ( 1, 'Skipping LFS test.\n' );
	return;
end

fprintf ( 1, '\n' );
fprintf ( 1, '\n' );
answer = input ( 'How many records to you wish to write?  1 record == 10MB \n' );

num_recs =  answer;

fprintf ( 1, '\n' );

%
% ok, first create this baby.
[ncid, status] = oct_mexnc ( 'create', ncfile, bitor ( nc_clobber_mode, nc_64bit_offset_mode ) );
if ( status ~= 0 )
	ncerr_msg = oct_mexnc ( 'strerror', status );
	msg = sprintf ( '%s:  ''create'' failed on %s, error message '' %s ''\n', mfilename, ncfile, ncerr_msg );
	error ( msg );
end


%
% Create the unlimited dimension
[tdimid, status] = oct_mexnc ( 'def_dim', ncid, 't', 0 );
if ( status ~= 0 )
	ncerr_msg = oct_mexnc ( 'strerror', status );
	msg = sprintf ( '%s:  ''def_dim'' failed on dim t, file %s, error message '' %s ''\n', mfilename, ncfile, ncerr_msg );
	error ( msg );
end


%
% Create the fixed dimension.  
len_x = 5000000;
[xdimid, status] = oct_mexnc ( 'def_dim', ncid, 'x', len_x );
if ( status ~= 0 )
	ncerr_msg = oct_mexnc ( 'strerror', status );
	msg = sprintf ( '%s:  ''def_dim'' failed on dim x, file %s, error message '' %s ''\n', mfilename, ncfile, ncerr_msg );
	error ( msg );
end


%
% Each record will have 1MB of data.
[varid, status] = oct_mexnc ( 'def_var', ncid, 'bigboy', 'NC_SHORT', 2, [tdimid xdimid] );
if ( status ~= 0 )
	ncerr_msg = oct_mexnc ( 'strerror', status );
	msg = sprintf ( '%s:  ''def_var'' failed on var bigboy, file %s, error message '' %s ''\n', mfilename, ncfile, ncerr_msg );
	error ( msg );
end

status = oct_mexnc ( 'enddef', ncid );
if ( status ~= 0 )
	ncerr_msg = oct_mexnc ( 'strerror', status );
	msg = sprintf ( '%s:  ''enddef'' failed on file %s, error message '' %s ''\n', mfilename,  ncerr_msg );
	error ( msg );
end



for j = 0:num_recs-1
	data = j * ones(len_x,1);

	start_coord = [j 0];
	count_coord = [1 len_x];

	status = oct_mexnc ( 'put_vara_double', ncid, varid, start_coord, count_coord, data );
	if ( status ~= 0 )
		ncerr_msg = oct_mexnc ( 'strerror', status );
		msg = sprintf ( '%s:  ''put_vara_double'' failed on var bigboy, record %d, file %s, error message '' %s ''\n', mfilename, j, ncfile, ncerr_msg );
		error ( msg );
	end

	fprintf ( 1, '  Wrote record %d\n', j );

end


status = oct_mexnc ( 'close', ncid );
if ( status ~= 0 )
	ncerr_msg = oct_mexnc ( 'strerror', status );
	msg = sprintf ( '%s:  ''close'' failed on %s, error message '' %s ''\n', mfilename, ncfile, ncerr_msg );
	error ( msg );
end


fprintf ( 1, 'Large File Support test succeeded\n' );

return
