Skip to content

Commit 5823bba

Browse files
committed
bugfix: h5save write scalar new. add: h5save write int8, int16
1 parent fc3210e commit 5823bba

File tree

5 files changed

+47
-4
lines changed

5 files changed

+47
-4
lines changed

+stdlib/+hdf5nc/h5save.m

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,7 @@ function new_file(filename, varname, A, sizeA)
7272
if isempty(sizeA)
7373
if isscalar(A)
7474
h5_write_scalar(filename, varname, A)
75+
return
7576
elseif isvector(A)
7677
h5create(filename, varname, length(A), 'DataType', class(A))
7778
else
@@ -81,6 +82,7 @@ function new_file(filename, varname, A, sizeA)
8182
if isscalar(sizeA)
8283
if sizeA == 0
8384
h5_write_scalar(filename, varname, A)
85+
return
8486
else
8587
h5create(filename, varname, sizeA, 'DataType', class(A))
8688
end

+stdlib/+hdf5nc/private/coerce_ds.m

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,11 +25,19 @@
2525
if ~isa(A, 'single')
2626
A = single(A);
2727
end
28-
case {'int32'}
28+
case 'int8'
29+
if ~isa(A, 'int8')
30+
A = int8(A);
31+
end
32+
case 'int16'
33+
if ~isa(A, 'int16')
34+
A = int16(A);
35+
end
36+
case 'int32'
2937
if ~isa(A, 'int32')
3038
A = int32(A);
3139
end
32-
case {'int64'}
40+
case 'int64'
3341
if ~isa(A, 'int64')
3442
A = int64(A);
3543
end

+stdlib/+hdf5nc/private/h5_write_scalar.m

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,12 @@
11
function h5_write_scalar(filename, varname, A)
22
%% write HDF5 scalar as a scalar
33
% h5create doesn't support scalars
4+
arguments
5+
filename (1,1) string {mustBeNonzeroLengthText}
6+
varname (1,1) string {mustBeNonzeroLengthText}
7+
A (1,1)
8+
end
9+
410
dcpl = 'H5P_DEFAULT';
511

612
if isfile(filename)

+stdlib/TestHDF5.m

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
end
66

77
properties (TestParameter)
8-
type = {'single', 'double', 'int32', 'int64'}
8+
type = {'single', 'double', 'int8', 'int16', 'int32', 'int64'}
99
vars = {'A0', 'A1', 'A2', 'A3', 'A4'}
1010
str = {"string", 'char'}
1111
end
@@ -239,6 +239,27 @@ function test_rewrite(tc)
239239
tc.verifyEqual(h5read(basic, '/A2'), 3*magic(4))
240240
end
241241

242+
function test_int8(tc)
243+
import stdlib.hdf5nc.h5save
244+
basic = tc.TestData.basic;
245+
246+
h5save(basic, "/i1", int8(127))
247+
248+
a = h5read(basic, "/i1");
249+
tc.verifyEqual(a, int8(127))
250+
251+
% test rewrite
252+
h5save(basic, "/i1", int8(-128))
253+
254+
a = h5read(basic, "/i1");
255+
tc.verifyEqual(a, int8(-128))
256+
257+
% test int8 array
258+
h5save(basic, "/Ai1", int8([1, 2]))
259+
a = h5read(basic, "/Ai1");
260+
tc.verifyEqual(a, int8([1;2]))
261+
end
262+
242263
function test_string(tc, str)
243264
import stdlib.hdf5nc.h5save
244265
basic = tc.TestData.basic;
@@ -247,6 +268,12 @@ function test_string(tc, str)
247268

248269
a = h5read(basic, "/"+str);
249270
tc.verifyEqual(a, char(str))
271+
272+
% test rewrite
273+
h5save(basic, "/"+str, str+"hi")
274+
275+
a = h5read(basic, "/"+str);
276+
tc.verifyEqual(a, char(str+"hi"))
250277
end
251278

252279
function test_name_only(tc)

codemeta.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
"license": "https://spdx.org/licenses/MIT",
55
"codeRepository": "https://github.com/geospace-code/matlab-stdlib",
66
"contIntegration": "https://github.com/geospace-code/matlab-stdlib/actions",
7-
"dateModified": "2022-04-25",
7+
"dateModified": "2022-05-19",
88
"downloadUrl": "https://github.com/geospace-code/matlab-stdlib/releases",
99
"issueTracker": "https://github.com/geospace-code/matlab-stdlib/issues",
1010
"name": "matlab-stdlib",

0 commit comments

Comments
 (0)