changeset 12711:a4de85b2e6a0 octave-forge

fix bug 47014 and make test code work in matlab
author abarth93
date Fri, 19 Feb 2016 13:45:14 +0000
parents be04cf3bc03b
children 7c272a2844d7
files main/netcdf/DESCRIPTION main/netcdf/NEWS main/netcdf/inst/ncread.m main/netcdf/inst/ncwrite.m main/netcdf/inst/private/bug_47014.m main/netcdf/inst/private/test_netcdf_high_level_interface.m main/netcdf/inst/private/test_netcdf_low_level_interface.m main/netcdf/inst/private/test_netcdf_unlim.m main/netcdf/inst/test_netcdf.m
diffstat 9 files changed, 86 insertions(+), 43 deletions(-) [+]
line wrap: on
line diff
--- 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 <barth.alexander@gmail.com>
 Maintainer: Alexander Barth <barth.alexander@gmail.com>
 Title: netcdf
--- 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:
 -------------------------------------------------------------------
 
--- 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);
--- 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);
--- /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)
--- 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 <http://www.gnu.org/licenses/>.
-
+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
--- 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);
--- 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)
 
--- 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'...
         };