Mercurial > forge
view main/netcdf/src/test_netcdf_package.m @ 11812:35593745a664 octave-forge
low-level group support
author | abarth93 |
---|---|
date | Mon, 17 Jun 2013 13:05:27 +0000 |
parents | 1a28cb60f1c2 |
children | 2747c3cad27d |
line wrap: on
line source
import_netcdf libver = netcdf.inqLibVers(); fname = [tempname '-octave-netcdf.nc']; ncid = netcdf.create(fname,'NC_CLOBBER'); assert(strcmp(netcdf.inqFormat(ncid),'FORMAT_CLASSIC')); unlimdimIDs = netcdf.inqUnlimDims(ncid); assert(isempty(unlimdimIDs)); assert(netcdf.getConstant('NC_NOWRITE') == 0) assert(netcdf.getConstant('NC_WRITE') == 1) assert(netcdf.getConstant('NC_64BIT_OFFSET') == ... netcdf.getConstant('64BIT_OFFSET')) assert(netcdf.getConstant('NC_64BIT_OFFSET') == ... netcdf.getConstant('64bit_offset')) netcdf.getConstantNames(); n = 10; m = 5; dimid_lon = netcdf.defDim(ncid,'lon',m); dimid = netcdf.defDim(ncid,'time',n); varidd = netcdf.defVar(ncid,'double_var','double',[dimid_lon,dimid]); varid = netcdf.defVar(ncid,'byte_var','byte',[dimid]); varidf = netcdf.defVar(ncid,'float_var','float',[dimid]); varidi = netcdf.defVar(ncid,'int_var','int',[dimid]); varids = netcdf.defVar(ncid,'short_var','short',[dimid]); assert(varidd == netcdf.inqVarID(ncid,'double_var')) [numdims, numvars, numglobalatts, unlimdimID] = netcdf.inq(ncid); assert(numvars == 5) [varname,xtype,dimids,natts] = netcdf.inqVar(ncid,varidd); assert(strcmp(varname,'double_var')); [dimname,len] = netcdf.inqDim(ncid,dimid); assert(len == n); assert(strcmp(dimname,'time')); types = {'double','float','byte','short','int'}; for i=1:length(types) vid{i} = netcdf.defVar(ncid,[types{i} '_variable'],types{i},[dimid_lon,dimid]); end netcdf.putAtt(ncid,varidd,'toto',int8(123)); netcdf.putAtt(ncid,varidd,'toto32',int32(123)); %netcdf.putAtt(ncid,varidd,'toto64',int64(123)); % does not work in octave and matlab netcdf.putAtt(ncid,varidd,'add_offset',single(123123.123)); netcdf.putAtt(ncid,varidd,'_FillValue',double(123123.123)); netcdf.putAtt(ncid,varidd,'name','this is a name'); assert(isequal(netcdf.getAtt(ncid,varidd,'add_offset'),single(123123.123))); netcdf.endDef(ncid) z = randn(m,n); netcdf.putVar(ncid,varidd,z); varf = randn(n,1); netcdf.putVar(ncid,varidf,varf); vari = floor(randn(n,1)); netcdf.putVar(ncid,varidi,vari); netcdf.putVar(ncid,varids,[1:n]) z2 = netcdf.getVar(ncid,varidd); assert(all(all(abs(z2 - z) < 1e-5))) z2 = netcdf.getVar(ncid,varidd,[0 0]); assert(z2 == z(1,1)) z2 = netcdf.getVar(ncid,varidd,[2 2],[3 5]); assert(isequal(z2,z(3:5,3:7))) z2 = netcdf.getVar(ncid,varidd,[2 2],[3 4],[1 2]); assert(isequal(z2,z(3:5,3:2:9))) netcdf.putVar(ncid,varidd,[0 0],123.); z(1,1) = 123; z2 = netcdf.getVar(ncid,varidd); assert(isequal(z,z2)) netcdf.putVar(ncid,varidd,[2 2],[3 3],ones(3,3)); z(3:5,3:5) = 1; z2 = netcdf.getVar(ncid,varidd); assert(isequal(z,z2)) netcdf.putVar(ncid,varidd,[0 0],[3 5],[2 2],zeros(3,5)); z(1:2:5,1:2:9) = 0; z2 = netcdf.getVar(ncid,varidd); assert(isequal(z,z2)) z2 = netcdf.getVar(ncid,varidf); assert(all(z2 - varf < 1e-5)) vari2 = netcdf.getVar(ncid,varidi); assert(all(vari2 == vari)) netcdf.close(ncid); delete(fname); test_netcdf_package_type('byte','int8'); test_netcdf_package_type('ubyte','uint8'); test_netcdf_package_type('short','int16'); test_netcdf_package_type('ushort','uint16'); test_netcdf_package_type('int','int32'); test_netcdf_package_type('uint','uint32'); test_netcdf_package_type('int64','int64'); test_netcdf_package_type('uint64','uint64'); test_netcdf_package_type('double','double'); test_netcdf_package_type('float','single'); test_netcdf_package_type('char','char'); test_scalar_variable % test one unlimited dimensions fname = [tempname '-octave-netcdf-unlimdim.nc']; ncid = netcdf.create(fname,'NC_CLOBBER'); dimID = netcdf.defDim(ncid,'time',netcdf.getConstant('NC_UNLIMITED')); unlimdimIDs = netcdf.inqUnlimDims(ncid); assert(dimID == unlimdimIDs); netcdf.close(ncid); delete(fname) % test two unlimited dimensions fname = [tempname '-octave-netcdf-2unlimdim.nc']; mode = bitor(netcdf.getConstant('NC_CLOBBER'),netcdf.getConstant('NC_NETCDF4')); ncid = netcdf.create(fname,mode); dimID = netcdf.defDim(ncid,'time',netcdf.getConstant('NC_UNLIMITED')); dimID2 = netcdf.defDim(ncid,'time2',netcdf.getConstant('NC_UNLIMITED')); unlimdimIDs = netcdf.inqUnlimDims(ncid); assert(isequal(sort([dimID,dimID2]),sort(unlimdimIDs))); netcdf.close(ncid); delete(fname); % deflate for 64bit_offset files fname = [tempname '-octave-netcdf-deflate.nc']; ncid = netcdf.create(fname,'64BIT_OFFSET'); dimids = [netcdf.defDim(ncid,'x',123) netcdf.defDim(ncid,'y',12)]; varid = netcdf.defVar(ncid,'double_var','double',dimids); [shuffle,deflate,deflateLevel] = netcdf.inqVarDeflate(ncid,varid); assert(shuffle == 0) assert(deflate == 0) assert(deflateLevel == 0) netcdf.close(ncid); %system(['ncdump -h ' fname]) delete(fname); % deflate fname = [tempname '-octave-netcdf-deflate.nc']; ncid = netcdf.create(fname,'NC_NETCDF4'); dimids = [netcdf.defDim(ncid,'x',123) netcdf.defDim(ncid,'y',12)]; varid = netcdf.defVar(ncid,'double_var','double',dimids); netcdf.defVarDeflate(ncid,varid,true,true,9); [shuffle,deflate,deflateLevel] = netcdf.inqVarDeflate(ncid,varid); assert(shuffle) assert(deflate) assert(deflateLevel == 9) netcdf.close(ncid); %system(['ncdump -h ' fname]) delete(fname); % chunking - contiguous storage fname = [tempname '-octave-netcdf-chunking.nc']; ncid = netcdf.create(fname,'NC_NETCDF4'); dimids = [netcdf.defDim(ncid,'x',123) netcdf.defDim(ncid,'y',12)]; varid = netcdf.defVar(ncid,'double_var','double',dimids); netcdf.defVarChunking(ncid,varid,'contiguous'); [storage,chunksize] = netcdf.inqVarChunking(ncid,varid); assert(strcmp(storage,'contiguous')) assert(isempty(chunksize)) netcdf.close(ncid); %system(['ncdump -h ' fname]) delete(fname); % chunking - chunked storage fname = [tempname '-octave-netcdf-chunking.nc']; ncid = netcdf.create(fname,'NC_NETCDF4'); dimids = [netcdf.defDim(ncid,'x',123) netcdf.defDim(ncid,'y',12)]; varid = netcdf.defVar(ncid,'double_var','double',dimids); netcdf.defVarChunking(ncid,varid,'chunked',[3 4]); [storage,chunksize] = netcdf.inqVarChunking(ncid,varid); assert(strcmp(storage,'chunked')) assert(isequal(chunksize,[3 4])) netcdf.close(ncid); %system(['ncdump -h ' fname]) delete(fname); % variable fill fname = [tempname '-octave-netcdf-fill.nc']; ncid = netcdf.create(fname,'NC_NETCDF4'); dimids = [netcdf.defDim(ncid,'x',123) netcdf.defDim(ncid,'y',12)]; varid = netcdf.defVar(ncid,'double_var','double',dimids); netcdf.defVarFill(ncid,varid,false,-99999.); [nofill,fillval] = netcdf.inqVarFill(ncid,varid); assert(isequal(nofill,false)) assert(fillval == -99999.) netcdf.close(ncid); %system(['ncdump -h ' fname]) delete(fname); % variable fill single fname = [tempname '-octave-netcdf-fill.nc']; ncid = netcdf.create(fname,'NC_NETCDF4'); dimids = [netcdf.defDim(ncid,'x',123) netcdf.defDim(ncid,'y',12)]; varid = netcdf.defVar(ncid,'single_var','float',dimids); netcdf.defVarFill(ncid,varid,false,single(-99999.)); [nofill,fillval] = netcdf.inqVarFill(ncid,varid); assert(isequal(nofill,false)) assert(fillval == -99999.) netcdf.close(ncid); %system(['ncdump -h ' fname]) delete(fname); % variable fill char fname = [tempname '-octave-netcdf-fill-char.nc']; ncid = netcdf.create(fname,'NC_NETCDF4'); dimids = [netcdf.defDim(ncid,'x',123) netcdf.defDim(ncid,'y',12)]; varid = netcdf.defVar(ncid,'double_var','char',dimids); netcdf.defVarFill(ncid,varid,false,'X'); [fill,fillval] = netcdf.inqVarFill(ncid,varid); assert(~fill) assert(fillval == 'X') netcdf.close(ncid); delete(fname); % check default state of fill fname = [tempname '-octave-netcdf-fill.nc']; ncid = netcdf.create(fname,'NC_NETCDF4'); dimids = [netcdf.defDim(ncid,'x',123) netcdf.defDim(ncid,'y',12)]; varid = netcdf.defVar(ncid,'double_var','double',dimids); [nofill,fillval] = netcdf.inqVarFill(ncid,varid); assert(isequal(nofill,false)) netcdf.close(ncid); %system(['ncdump -h ' fname]) delete(fname); % create groups fname = [tempname '-octave-netcdf-groups.nc']; ncid = netcdf.create(fname,'NC_NETCDF4'); id1 = netcdf.defGrp(ncid,'group1'); id2 = netcdf.defGrp(ncid,'group2'); id3 = netcdf.defGrp(id1,'subgroup'); ids = netcdf.inqGrps(ncid); assert(isequal(sort([id1,id2]),sort(ids))); id4 = netcdf.inqNcid(ncid,'group1'); assert(id1 == id4) netcdf.close(ncid); %system(['ncdump -h ' fname]) delete(fname); test_netcdf_hl