# HG changeset patch # User abarth93 # Date 1455889514 0 # Node ID a4de85b2e6a0761951ec285885828e2cdd5ce3d8 # Parent be04cf3bc03bdb276eac3951b419c22690de3ceb fix bug 47014 and make test code work in matlab diff -r be04cf3bc03b -r a4de85b2e6a0 main/netcdf/DESCRIPTION --- a/main/netcdf/DESCRIPTION Mon Feb 15 20:43:15 2016 +0000 +++ b/main/netcdf/DESCRIPTION Fri Feb 19 13:45:14 2016 +0000 @@ -1,6 +1,6 @@ Name: netcdf -Version: 1.0.8 -Date: 2016-01-27 +Version: 1.0.9 +Date: 2016-02-19 Author: Alexander Barth Maintainer: Alexander Barth Title: netcdf diff -r be04cf3bc03b -r a4de85b2e6a0 main/netcdf/NEWS --- a/main/netcdf/NEWS Mon Feb 15 20:43:15 2016 +0000 +++ b/main/netcdf/NEWS Fri Feb 19 13:45:14 2016 +0000 @@ -1,3 +1,8 @@ +Summary of important user-visible changes for netcdf 1.0.9: +------------------------------------------------------------------- + + ** Fix bug #47014: writing NaNs + Summary of important user-visible changes for netcdf 1.0.8: ------------------------------------------------------------------- diff -r be04cf3bc03b -r a4de85b2e6a0 main/netcdf/inst/ncread.m --- a/main/netcdf/inst/ncread.m Mon Feb 15 20:43:15 2016 +0000 +++ b/main/netcdf/inst/ncread.m Fri Feb 19 13:45:14 2016 +0000 @@ -95,14 +95,22 @@ end end -if !isempty(factor) || !isempty(factor) || !isempty(offset) +netcdf_close(ncid); + +# the scaling does not make sense of characters +if xtype == netcdf_getConstant('char') || ... + xtype == netcdf_getConstant('string') + + return; +end + +if !isempty(fv) || !isempty(factor) || !isempty(offset) if !isa(x,'double') x = double(x); end end -if !isempty(fv) && xtype != netcdf_getConstant('char') && ... - xtype != netcdf_getConstant('string') +if !isempty(fv) x(x == fv) = NaN; end @@ -114,4 +122,3 @@ x = x + offset; end -netcdf_close(ncid); diff -r be04cf3bc03b -r a4de85b2e6a0 main/netcdf/inst/ncwrite.m --- a/main/netcdf/inst/ncwrite.m Mon Feb 15 20:43:15 2016 +0000 +++ b/main/netcdf/inst/ncwrite.m Fri Feb 19 13:45:14 2016 +0000 @@ -84,10 +84,6 @@ end end -if ~isempty(fv) - x(isnan(x)) = fv; -end - if ~isempty(offset) x = x - offset; end @@ -96,6 +92,10 @@ x = x / factor; end +if ~isempty(fv) + x(isnan(x)) = fv; +end + netcdf_putVar(gid,varid,start-1,count,stride,x); netcdf_close(ncid); diff -r be04cf3bc03b -r a4de85b2e6a0 main/netcdf/inst/private/bug_47014.m --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main/netcdf/inst/private/bug_47014.m Fri Feb 19 13:45:14 2016 +0000 @@ -0,0 +1,13 @@ +% test case for bug 47014 +% https://savannah.gnu.org/bugs/?func=detailitem&item_id=47014 + +fname = [tempname '-octave-netcdf.nc']; +nccreate(fname,'var','Dimensions',{'x',10},... + 'FillValue',-32767,'Datatype','int16') + +var = ones(10,1); +var(1) = NaN; +ncwrite(fname,'var',var); +var2 = ncread(fname,'var'); +assert(isequaln(var,var2)) +delete(fname) diff -r be04cf3bc03b -r a4de85b2e6a0 main/netcdf/inst/private/test_netcdf_high_level_interface.m --- a/main/netcdf/inst/private/test_netcdf_high_level_interface.m Mon Feb 15 20:43:15 2016 +0000 +++ b/main/netcdf/inst/private/test_netcdf_high_level_interface.m Fri Feb 19 13:45:14 2016 +0000 @@ -12,7 +12,7 @@ %% %% You should have received a copy of the GNU General Public License %% along with this program; If not, see . - +import_netcdf fname = [tempname '-octave-netcdf.nc']; @@ -101,9 +101,11 @@ %system(['ncdump -h ' fname]) data = zeros(10,10); data(1,2) = fv; -ncid = netcdf_open(fname,'NC_WRITE'); -varid = netcdf_inqVarID(ncid, 'flag'); -netcdf_putVar(ncid,varid,data); +ncid = netcdf.open(fname,'NC_WRITE'); +varid = netcdf.inqVarID(ncid, 'flag'); +netcdf.putVar(ncid,varid,data); +netcdf.close(ncid) + data2 = ncread(fname,'flag'); data(data == fv) = NaN; assert(isequaln(data,data2)) @@ -119,11 +121,17 @@ data = repmat('.',[10 10]); data(1,2) = fv; -ncid = netcdf_open(fname,'NC_WRITE'); -varid = netcdf_inqVarID(ncid, 'flag'); -netcdf_putVar(ncid,varid,data); +ncid = netcdf.open(fname,'NC_WRITE'); +varid = netcdf.inqVarID(ncid, 'flag'); +netcdf.putVar(ncid,varid,data); +netcdf.close(ncid) + data2 = ncread(fname,'flag'); - assert(isequal(data,data2)) delete(fname) + + +% test case for bug 47014 + +bug_47014 diff -r be04cf3bc03b -r a4de85b2e6a0 main/netcdf/inst/private/test_netcdf_low_level_interface.m --- a/main/netcdf/inst/private/test_netcdf_low_level_interface.m Mon Feb 15 20:43:15 2016 +0000 +++ b/main/netcdf/inst/private/test_netcdf_low_level_interface.m Fri Feb 19 13:45:14 2016 +0000 @@ -130,8 +130,8 @@ ncid = netcdf.create(fname,'NC_CLOBBER'); -sz = ones(ndims,1); -dimids = ones(ndims,1); +sz = ones(1,ndims); +dimids = ones(1,ndims); for i = 1:ndims sz(i) = 10+i; @@ -167,23 +167,23 @@ z2 = netcdf.getVar(ncid,varid,zeros(ndims,1)); assert(z2 == z(1)) -start = 2 * ones(ndims,1); -count = 5 * ones(ndims,1); +start = 2 * ones(1,ndims); +count = 5 * ones(1,ndims); z2 = netcdf.getVar(ncid,varid,start,count); idx = scs(start,count); assert(isequal(z2,z(idx{:}))) -start = 2 * ones(ndims,1); -count = 5 * ones(ndims,1); -stride = 2 * ones(ndims,1); +start = 2 * ones(1,ndims); +count = 5 * ones(1,ndims); +stride = 2 * ones(1,ndims); z2 = netcdf.getVar(ncid,varid,start,count,stride); idx = scs(start,count,stride); assert(isequal(z2,z(idx{:}))) % put with start -start = zeros(ndims,1); +start = zeros(1,ndims); netcdf.putVar(ncid,varid,start,123.); z(1) = 123; z2 = netcdf.getVar(ncid,varid); @@ -192,9 +192,14 @@ % put with start and count -start = 2 * ones(ndims,1); -count = 5 * ones(ndims,1); -netcdf.putVar(ncid,varid,start,count,ones(count)); +start = 2 * ones(1,ndims); +count = 5 * ones(1,ndims); +if ndims == 1 + data = ones(count,1); +else + data = ones(count); +end +netcdf.putVar(ncid,varid,start,count,data); idx = scs(start,count); z(idx{:}) = 1; z2 = netcdf.getVar(ncid,varid); @@ -202,10 +207,15 @@ % put with start, count and stride -start = 2 * ones(ndims,1); -count = 5 * ones(ndims,1); -stride = 2 * ones(ndims,1); -netcdf.putVar(ncid,varid,start,count,stride,zeros(count)); +start = 2 * ones(1,ndims); +count = 5 * ones(1,ndims); +stride = 2 * ones(1,ndims); +if ndims == 1 + data = zeros(count,1); +else + data = zeros(count); +end +netcdf.putVar(ncid,varid,start,count,stride,data); idx = scs(start,count,stride); z(idx{:}) = 0; z2 = netcdf.getVar(ncid,varid); diff -r be04cf3bc03b -r a4de85b2e6a0 main/netcdf/inst/private/test_netcdf_unlim.m --- a/main/netcdf/inst/private/test_netcdf_unlim.m Mon Feb 15 20:43:15 2016 +0000 +++ b/main/netcdf/inst/private/test_netcdf_unlim.m Fri Feb 19 13:45:14 2016 +0000 @@ -11,8 +11,8 @@ netcdf.close(ncid) -ncid = netcdf_open(fname,'NC_NOWRITE'); -varid = netcdf_inqVarID(ncid, 'time'); -x = netcdf_getVar(ncid,varid); +ncid = netcdf.open(fname,'NC_NOWRITE'); +varid = netcdf.inqVarID(ncid, 'time'); +x = netcdf.getVar(ncid,varid); netcdf.close(ncid) diff -r be04cf3bc03b -r a4de85b2e6a0 main/netcdf/inst/test_netcdf.m --- a/main/netcdf/inst/test_netcdf.m Mon Feb 15 20:43:15 2016 +0000 +++ b/main/netcdf/inst/test_netcdf.m Fri Feb 19 13:45:14 2016 +0000 @@ -9,13 +9,13 @@ 'test_netcdf_create'... 'test_netcdf_low_level_interface'... 'test_netcdf_unlim',... - 'test_netcdf_datatypes'... - 'test_netcdf_scalar_variable'... - 'test_netcdf_attributes'... - 'test_netcdf_high_level_interface'... - 'test_netcdf_ncwriteschema'... - 'test_netcdf_ncwriteschema_unlim'... - 'test_netcdf_ncwriteschema_chunking'... + 'test_netcdf_datatypes',... + 'test_netcdf_scalar_variable',... + 'test_netcdf_attributes',... + 'test_netcdf_high_level_interface',... + 'test_netcdf_ncwriteschema',... + 'test_netcdf_ncwriteschema_unlim',... + 'test_netcdf_ncwriteschema_chunking',... 'test_netcdf_ncwriteschema_group'... };