Skip to content

Commit 2af657a

Browse files
committed
use Matlab package layout for robustness
1 parent d6687b2 commit 2af657a

16 files changed

+97
-65
lines changed

test_hdf5.m renamed to +hdf5nc/+tests/test_hdf5.m

Lines changed: 21 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -8,36 +8,36 @@
88
A4(:,:,:,5) = A3;
99

1010
basic = [tempname, '.h5'];
11+
% create test data first, so that parallel tests works
12+
hdf5nc.h5save(basic, '/A0', A0)
13+
hdf5nc.h5save(basic, '/A1', A1)
14+
hdf5nc.h5save(basic, '/A2', A2)
15+
hdf5nc.h5save(basic, '/A3', A3)
16+
hdf5nc.h5save(basic, '/A4', A4)
1117
%% test_auto_chunk_size
12-
assert(isequal(auto_chunk_size([1500,2500,1000,500,100]), [12,20,8,8,2]), '5D chunk fail')
13-
assert(isequal(auto_chunk_size([15,250,100]), [2,32,25]), '3D chunk fail')
14-
assert(isequal(auto_chunk_size([15,250]), [15,250]), '2D small chunk fail')
15-
%% test_write_basic
16-
h5save(basic, '/A0', A0)
17-
h5save(basic, '/A1', A1)
18-
h5save(basic, '/A2', A2)
19-
h5save(basic, '/A3', A3)
20-
h5save(basic, '/A4', A4)
18+
assert(isequal(hdf5nc.auto_chunk_size([1500,2500,1000,500,100]), [12,20,8,8,2]), '5D chunk fail')
19+
assert(isequal(hdf5nc.auto_chunk_size([15,250,100]), [2,32,25]), '3D chunk fail')
20+
assert(isequal(hdf5nc.auto_chunk_size([15,250]), [15,250]), '2D small chunk fail')
2121
%% test_get_variables
22-
vars = h5variables(basic);
22+
vars = hdf5nc.h5variables(basic);
2323
assert(isequal(sort(vars),{'A0', 'A1', 'A2', 'A3', 'A4'}), 'missing variables')
2424
%% test_exists
25-
assert(h5exists(basic, '/A3'), 'A3 exists')
26-
assert(~h5exists(basic, '/oops'), 'oops not exist')
25+
assert(hdf5nc.h5exists(basic, '/A3'), 'A3 exists')
26+
assert(~hdf5nc.h5exists(basic, '/oops'), 'oops not exist')
2727
%% test_size
28-
s = h5size(basic, '/A0');
28+
s = hdf5nc.h5size(basic, '/A0');
2929
assert(isscalar(s) && s==1, 'A0 shape')
3030

31-
s = h5size(basic, '/A1');
31+
s = hdf5nc.h5size(basic, '/A1');
3232
assert(isscalar(s) && s==2, 'A1 shape')
3333

34-
s = h5size(basic, '/A2');
34+
s = hdf5nc.h5size(basic, '/A2');
3535
assert(isvector(s) && isequal(s, [4,4]), 'A2 shape')
3636

37-
s = h5size(basic, '/A3');
37+
s = hdf5nc.h5size(basic, '/A3');
3838
assert(isvector(s) && isequal(s, [4,3,2]), 'A3 shape')
3939

40-
s = h5size(basic, '/A4');
40+
s = hdf5nc.h5size(basic, '/A4');
4141
assert(isvector(s) && isequal(s, [4,3,2,5]), 'A4 shape')
4242
%% test_read
4343
s = h5read(basic, '/A0');
@@ -55,13 +55,13 @@
5555
s = h5read(basic, '/A4');
5656
assert(ndims(s)==4 && isequal(s, A4), 'A4 read')
5757
%% test_coerce
58-
h5save(basic, '/int32', A0, [], 'int32')
59-
h5save(basic, '/int64', A0, [], 'int64')
60-
h5save(basic, '/float32', A0, [], 'float32')
58+
hdf5nc.h5save(basic, '/int32', A0, [], 'int32')
59+
hdf5nc.h5save(basic, '/int64', A0, [], 'int64')
60+
hdf5nc.h5save(basic, '/float32', A0, [], 'float32')
6161

6262
assert(isa(h5read(basic, '/int32'), 'int32'), 'int32')
6363
assert(isa(h5read(basic, '/int64'), 'int64'), 'int64')
6464
assert(isa(h5read(basic, '/float32'), 'single'), 'float32')
6565
%% test_rewrite
66-
h5save(basic, '/A2', 3*magic(4))
66+
hdf5nc.h5save(basic, '/A2', 3*magic(4))
6767
assert(isequal(h5read(basic, '/A2'), 3*magic(4)), 'rewrite 2D fail')

test_netcdf.m renamed to +hdf5nc/+tests/test_netcdf.m

Lines changed: 19 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -9,35 +9,35 @@
99

1010
basic = [tempname, '.nc'];
1111

12-
if isoctave
12+
if hdf5nc.isoctave
1313
pkg('load','netcdf')
1414
end
15-
%% test_write_basic
16-
ncsave(basic, 'A0', A0)
17-
ncsave(basic, 'A1', A1)
18-
ncsave(basic, 'A2', A2, {'x2', size(A2,1), 'y2', size(A2,2)})
19-
ncsave(basic, 'A3', A3, {'x3', size(A3,1), 'y3', size(A3,2), 'z3', size(A3,3)})
20-
ncsave(basic, 'A4', A4, {'x4', size(A4,1), 'y4', size(A4,2), 'z4', size(A4,3), 'w4', size(A4,4)})
15+
% create test data first, so that parallel tests works
16+
hdf5nc.ncsave(basic, 'A0', A0)
17+
hdf5nc.ncsave(basic, 'A1', A1)
18+
hdf5nc.ncsave(basic, 'A2', A2, {'x2', size(A2,1), 'y2', size(A2,2)})
19+
hdf5nc.ncsave(basic, 'A3', A3, {'x3', size(A3,1), 'y3', size(A3,2), 'z3', size(A3,3)})
20+
hdf5nc.ncsave(basic, 'A4', A4, {'x4', size(A4,1), 'y4', size(A4,2), 'z4', size(A4,3), 'w4', size(A4,4)})
2121
%% test_get_variables
22-
vars = ncvariables(basic);
22+
vars = hdf5nc.ncvariables(basic);
2323
assert(isequal(sort(vars),{'A0', 'A1', 'A2', 'A3', 'A4'}), 'missing variables')
2424
%% test_exists
25-
assert(ncexists(basic, 'A3'), 'A3 exists')
26-
assert(~ncexists(basic, 'oops'), 'oops not exist')
25+
assert(hdf5nc.ncexists(basic, 'A3'), 'A3 exists')
26+
assert(~hdf5nc.ncexists(basic, 'oops'), 'oops not exist')
2727
%% test_size
28-
s = ncsize(basic, 'A0');
28+
s = hdf5nc.ncsize(basic, 'A0');
2929
assert(isscalar(s) && s==1, 'A0 shape')
3030

31-
s = ncsize(basic, 'A1');
31+
s = hdf5nc.ncsize(basic, 'A1');
3232
assert(isscalar(s) && s==2, 'A1 shape')
3333

34-
s = ncsize(basic, 'A2');
34+
s = hdf5nc.ncsize(basic, 'A2');
3535
assert(isvector(s) && isequal(s, [4,4]), 'A2 shape')
3636

37-
s = ncsize(basic, 'A3');
37+
s = hdf5nc.ncsize(basic, 'A3');
3838
assert(isvector(s) && isequal(s, [4,3,2]), 'A3 shape')
3939

40-
s = ncsize(basic, 'A4');
40+
s = hdf5nc.ncsize(basic, 'A4');
4141
assert(isvector(s) && isequal(s, [4,3,2,5]), 'A4 shape')
4242
%% test_read
4343
s = ncread(basic, '/A0');
@@ -55,13 +55,13 @@
5555
s = ncread(basic, '/A4');
5656
assert(ndims(s)==4 && isequal(s, A4), 'A4 read')
5757
%% test_coerce
58-
ncsave(basic, 'int32', A0, [], 'int32')
59-
ncsave(basic, 'int64', A0, [], 'int64')
60-
ncsave(basic, 'float32', A0, [], 'float32')
58+
hdf5nc.ncsave(basic, 'int32', A0, [], 'int32')
59+
hdf5nc.ncsave(basic, 'int64', A0, [], 'int64')
60+
hdf5nc.ncsave(basic, 'float32', A0, [], 'float32')
6161

6262
assert(isa(ncread(basic, 'int32'), 'int32'), 'int32')
6363
assert(isa(ncread(basic, 'int64'), 'int64'), 'int64')
6464
assert(isa(ncread(basic, 'float32'), 'single'), 'float32')
6565
%% test_rewrite
66-
ncsave(basic, 'A2', 3*magic(4))
66+
hdf5nc.ncsave(basic, 'A2', 3*magic(4))
6767
assert(isequal(ncread(basic, 'A2'), 3*magic(4)), 'rewrite 2D fail')
File renamed without changes.
File renamed without changes.

expanduser.m renamed to +hdf5nc/expanduser.m

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
%!assert(ischar(expanduser('~')))
21
function expanded = expanduser(p)
32
% expanded = expanduser(path)
43
%
@@ -27,14 +26,8 @@
2726
return
2827
end
2928

30-
validateattributes(p, {'char'}, {'vector'})
31-
%% GNU Octave
32-
if isoctave
33-
expanded = tilde_expand(p);
34-
return
35-
end
29+
validateattributes(p, {'char'}, {'vector'}, 1)
3630

37-
%% Matlab
3831
expanded = p;
3932

4033
if strcmp(expanded(1), '~')

h5exists.m renamed to +hdf5nc/h5exists.m

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,6 @@
1010
validateattributes(filename, {'char'}, {'vector'}, 1)
1111
validateattributes(varname, {'char'}, {'vector'}, 2)
1212

13-
exists = any(strcmp(h5variables(filename), varname(2:end)));
13+
exists = any(strcmp(hdf5nc.h5variables(filename), varname(2:end)));
1414

1515
end % function

h5save.m renamed to +hdf5nc/h5save.m

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,7 @@ function h5save(filename, varname, A, sizeA, dtype)
55

66
narginchk(3, 5)
77

8-
% Matlab can't cope with tilde in many cases, especially on Windows
9-
filename = expanduser(filename);
8+
filename = hdf5nc.expanduser(filename);
109

1110
if nargin < 4 || isempty(sizeA)
1211
if isvector(A)
@@ -17,14 +16,14 @@ function h5save(filename, varname, A, sizeA, dtype)
1716
end
1817

1918
if nargin >= 5 && ~isempty(dtype)
20-
A = coerce_ds(A, dtype);
19+
A = hdf5nc.coerce_ds(A, dtype);
2120
end
2221
if ischar(A)
2322
A = string(A);
2423
sizeA = size(A);
2524
end
2625

27-
if isfile(filename) && h5exists(filename, varname)
26+
if isfile(filename) && hdf5nc.h5exists(filename, varname)
2827
exist_file(filename, varname, A, sizeA)
2928
else
3029
new_file(filename, varname, A, sizeA)
@@ -34,9 +33,10 @@ function h5save(filename, varname, A, sizeA, dtype)
3433

3534

3635
function exist_file(filename, varname, A, sizeA)
36+
3737
narginchk(4,4)
3838

39-
diskshape = h5size(filename, varname);
39+
diskshape = hdf5nc.h5size(filename, varname);
4040
if length(diskshape) >= 2
4141
% start is always a row vector, regardless of shape of array
4242
start = ones(1,ndims(A));
@@ -69,7 +69,8 @@ function new_file(filename, varname, A, sizeA)
6969
% enable Gzip compression--remember Matlab's dim order is flipped from
7070
% C / Python
7171
h5create(filename, varname, sizeA, 'DataType', class(A), ...
72-
'Deflate', 1, 'Fletcher32', true, 'Shuffle', true, 'ChunkSize', auto_chunk_size(sizeA))
72+
'Deflate', 1, 'Fletcher32', true, 'Shuffle', true, ...
73+
'ChunkSize', hdf5nc.auto_chunk_size(sizeA))
7374
end % if
7475

7576
h5write(filename, varname, A)

h5size.m renamed to +hdf5nc/h5size.m

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
validateattributes(filename, {'char'}, {'vector'}, 1)
1111
validateattributes(variable, {'char'}, {'vector'}, 2)
1212

13-
finf = h5info(expanduser(filename), variable);
13+
finf = h5info(hdf5nc.expanduser(filename), variable);
1414
fsize = finf.Dataspace.Size;
1515

1616
end % function

h5variables.m renamed to +hdf5nc/h5variables.m

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
11
function [names, groups] = h5variables(filename, group)
22
% get dataset names and groups in an HDF5 file
3+
34
narginchk(1,2)
45

56
names = [];
67
groups = [];
78

89
% use temporary variable to be R2017b OK
9-
finf = h5info(expanduser(filename));
10+
finf = h5info(hdf5nc.expanduser(filename));
1011
ds = finf.Datasets;
1112
if isempty(ds)
1213
return
File renamed without changes.

0 commit comments

Comments
 (0)