Skip to content

Commit b0bd322

Browse files
committed
[c++/m] Add Group multiple entities create
Adds dataArrays, tags, multiTags and sources multiple entity create methods to the Group entity and introduces tests for all added methods.
1 parent fdcd1dd commit b0bd322

File tree

5 files changed

+193
-0
lines changed

5 files changed

+193
-0
lines changed

+nix/Group.m

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,11 @@
4949
'nix.DataArray', 'Group::addDataArray');
5050
end;
5151

52+
function [] = add_data_arrays(obj, add_cell_array)
53+
nix.Utils.add_entity_array(obj, add_cell_array, ...
54+
'nix.DataArray', strcat(obj.alias, '::addDataArrays'));
55+
end
56+
5257
function delCheck = remove_data_array(obj, del)
5358
delCheck = nix.Utils.delete_entity(obj, del, ...
5459
'nix.DataArray', 'Group::removeDataArray');
@@ -63,6 +68,11 @@
6368
'nix.Tag', 'Group::addTag');
6469
end;
6570

71+
function [] = add_tags(obj, add_cell_array)
72+
nix.Utils.add_entity_array(obj, add_cell_array, ...
73+
'nix.Tag', strcat(obj.alias, '::addTags'));
74+
end
75+
6676
function hasTag = has_tag(obj, id_or_name)
6777
hasTag = nix_mx('Group::hasTag', obj.nix_handle, id_or_name);
6878
end;
@@ -90,6 +100,11 @@
90100
'nix.MultiTag', 'Group::addMultiTag');
91101
end;
92102

103+
function [] = add_multi_tags(obj, add_cell_array)
104+
nix.Utils.add_entity_array(obj, add_cell_array, ...
105+
'nix.MultiTag', strcat(obj.alias, '::addMultiTags'));
106+
end
107+
93108
function hasMTag = has_multi_tag(obj, id_or_name)
94109
hasMTag = nix_mx('Group::hasMultiTag', ...
95110
obj.nix_handle, id_or_name);

nix_mx.cc

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -188,9 +188,13 @@ void mexFunction(int nlhs,
188188
.reg("tagCount", GETTER(nix::ndsize_t, nix::Group, tagCount))
189189
.reg("multiTagCount", GETTER(nix::ndsize_t, nix::Group, multiTagCount));
190190
methods->add("Group::addDataArray", nixgroup::addDataArray);
191+
methods->add("Group::addDataArrays", nixgroup::addDataArrays);
191192
methods->add("Group::addSource", nixgroup::addSource);
193+
methods->add("Group::addSources", nixgroup::addSources);
192194
methods->add("Group::addTag", nixgroup::addTag);
195+
methods->add("Group::addTags", nixgroup::addTags);
193196
methods->add("Group::addMultiTag", nixgroup::addMultiTag);
197+
methods->add("Group::addMultiTags", nixgroup::addMultiTags);
194198

195199
classdef<nix::DataArray>("DataArray", methods)
196200
.desc(&nixdataarray::describe)

src/nixgroup.cc

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,19 +34,43 @@ namespace nixgroup {
3434
currObj.addDataArray(input.str(2));
3535
}
3636

37+
void addDataArrays(const extractor &input, infusor &output) {
38+
nix::Group currObj = input.entity<nix::Group>(1);
39+
std::vector<nix::DataArray> curr = input.entity_vec<nix::DataArray>(2);
40+
currObj.dataArrays(curr);
41+
}
42+
3743
void addSource(const extractor &input, infusor & output) {
3844
nix::Group currObj = input.entity<nix::Group>(1);
3945
currObj.addSource(input.str(2));
4046
}
4147

48+
void addSources(const extractor &input, infusor &output) {
49+
nix::Group currObj = input.entity<nix::Group>(1);
50+
std::vector<nix::Source> curr = input.entity_vec<nix::Source>(2);
51+
currObj.sources(curr);
52+
}
53+
4254
void addTag(const extractor &input, infusor &output) {
4355
nix::Group currObj = input.entity<nix::Group>(1);
4456
currObj.addTag(input.str(2));
4557
}
4658

59+
void addTags(const extractor &input, infusor &output) {
60+
nix::Group currObj = input.entity<nix::Group>(1);
61+
std::vector<nix::Tag> curr = input.entity_vec<nix::Tag>(2);
62+
currObj.tags(curr);
63+
}
64+
4765
void addMultiTag(const extractor &input, infusor &output) {
4866
nix::Group currObj = input.entity<nix::Group>(1);
4967
currObj.addMultiTag(input.str(2));
5068
}
5169

70+
void addMultiTags(const extractor &input, infusor &output) {
71+
nix::Group currObj = input.entity<nix::Group>(1);
72+
std::vector<nix::MultiTag> curr = input.entity_vec<nix::MultiTag>(2);
73+
currObj.multiTags(curr);
74+
}
75+
5276
} // namespace nixgroup

src/nixgroup.h

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,20 @@ namespace nixgroup {
1717

1818
void addDataArray(const extractor &input, infusor &output);
1919

20+
void addDataArrays(const extractor &input, infusor &output);
21+
2022
void addSource(const extractor &input, infusor & output);
2123

24+
void addSources(const extractor &input, infusor & output);
25+
2226
void addTag(const extractor &input, infusor &output);
2327

28+
void addTags(const extractor &input, infusor &output);
29+
2430
void addMultiTag(const extractor &input, infusor &output);
2531

32+
void addMultiTags(const extractor &input, infusor &output);
33+
2634
} // namespace nixgroup
2735

2836
#endif

tests/TestGroup.m

Lines changed: 142 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,21 +11,25 @@
1111
funcs = {};
1212
funcs{end+1} = @test_attrs;
1313
funcs{end+1} = @test_add_data_array;
14+
funcs{end+1} = @test_add_data_arrays;
1415
funcs{end+1} = @test_get_data_array;
1516
funcs{end+1} = @test_remove_data_array;
1617
funcs{end+1} = @test_update_linked_data_array;
1718
funcs{end+1} = @test_data_array_count;
1819
funcs{end+1} = @test_add_tag;
20+
funcs{end+1} = @test_add_tags;
1921
funcs{end+1} = @test_has_tag;
2022
funcs{end+1} = @test_get_tag;
2123
funcs{end+1} = @test_remove_tag;
2224
funcs{end+1} = @test_tag_count;
2325
funcs{end+1} = @test_add_multi_tag;
26+
funcs{end+1} = @test_add_multi_tags;
2427
funcs{end+1} = @test_has_multi_tag;
2528
funcs{end+1} = @test_get_multi_tag;
2629
funcs{end+1} = @test_remove_multi_tag;
2730
funcs{end+1} = @test_multi_tag_count;
2831
funcs{end+1} = @test_add_source;
32+
funcs{end+1} = @test_add_sources;
2933
funcs{end+1} = @test_remove_source;
3034
funcs{end+1} = @test_has_source;
3135
funcs{end+1} = @test_fetch_sources;
@@ -93,6 +97,40 @@
9397
assert(strcmp(f.blocks{1}.groups{1}.dataArrays{1}.name, daName));
9498
end
9599

100+
%% Test: Add dataArrays by entity cell array
101+
function [] = test_add_data_arrays ( varargin )
102+
testFile = fullfile(pwd, 'tests', 'testRW.h5');
103+
f = nix.File(testFile, nix.FileMode.Overwrite);
104+
b = f.create_block('testBlock', 'nixBlock');
105+
g = b.create_group('testGroup', 'nixGroup');
106+
tmp = b.create_data_array('testDataArray1', 'nixDataArray', nix.DataType.Double, [2 3]);
107+
tmp = b.create_data_array('testDataArray2', 'nixDataArray', nix.DataType.Double, [2 3]);
108+
tmp = b.create_data_array('testDataArray3', 'nixDataArray', nix.DataType.Double, [2 3]);
109+
110+
assert(isempty(g.dataArrays));
111+
112+
try
113+
g.add_data_arrays('hurra');
114+
catch ME
115+
assert(strcmp(ME.message, 'Expected cell array'));
116+
end;
117+
assert(isempty(g.dataArrays));
118+
119+
try
120+
g.add_data_arrays({12, 13});
121+
catch ME
122+
assert(~isempty(strfind(ME.message, 'not a nix.DataArray')));
123+
end;
124+
assert(isempty(g.dataArrays));
125+
126+
g.add_data_arrays(b.dataArrays());
127+
assert(size(g.dataArrays, 1) == 3);
128+
129+
clear g tmp b f;
130+
f = nix.File(testFile, nix.FileMode.ReadOnly);
131+
assert(size(f.blocks{1}.groups{1}.dataArrays, 1) == 3);
132+
end
133+
96134
%% Test: Get nix.DataArray by id or name
97135
function [] = test_get_data_array( varargin )
98136
fileName = 'testRW.h5';
@@ -236,6 +274,40 @@
236274
assert(strcmp(f.blocks{1}.groups{1}.tags{2}.name, tagName2));
237275
end
238276

277+
%% Test: Add tags by entity cell array
278+
function [] = test_add_tags ( varargin )
279+
testFile = fullfile(pwd, 'tests', 'testRW.h5');
280+
f = nix.File(testFile, nix.FileMode.Overwrite);
281+
b = f.create_block('testBlock', 'nixBlock');
282+
g = b.create_group('testGroup', 'nixGroup');
283+
tmp = b.create_tag('testTag1', 'nixTag', [1.0 1.2]);
284+
tmp = b.create_tag('testTag2', 'nixTag', [1.0 1.2]);
285+
tmp = b.create_tag('testTag3', 'nixTag', [1.0 1.2]);
286+
287+
assert(isempty(g.tags));
288+
289+
try
290+
g.add_tags('hurra');
291+
catch ME
292+
assert(strcmp(ME.message, 'Expected cell array'));
293+
end;
294+
assert(isempty(g.tags));
295+
296+
try
297+
g.add_tags({12, 13});
298+
catch ME
299+
assert(~isempty(strfind(ME.message, 'not a nix.Tag')));
300+
end;
301+
assert(isempty(g.tags));
302+
303+
g.add_tags(b.tags());
304+
assert(size(g.tags, 1) == 3);
305+
306+
clear g tmp b f;
307+
f = nix.File(testFile, nix.FileMode.ReadOnly);
308+
assert(size(f.blocks{1}.groups{1}.tags, 1) == 3);
309+
end
310+
239311
%% Test: has nix.Tag by id or name
240312
function [] = test_has_tag( varargin )
241313
fileName = 'testRW.h5';
@@ -363,6 +435,42 @@
363435
assert(strcmp(f.blocks{1}.groups{1}.multiTags{2}.name, tagName2));
364436
end
365437

438+
%% Test: Add multiTags by entity cell array
439+
function [] = test_add_multi_tags ( varargin )
440+
testFile = fullfile(pwd, 'tests', 'testRW.h5');
441+
f = nix.File(testFile, nix.FileMode.Overwrite);
442+
b = f.create_block('testBlock', 'nixBlock');
443+
g = b.create_group('testGroup', 'nixGroup');
444+
tmp = b.create_data_array(...
445+
'testDataArray', 'nixDataArray', nix.DataType.Double, [1 2]);
446+
tmp = b.create_multi_tag('testMultiTag1', 'nixMultiTag', b.dataArrays{1});
447+
tmp = b.create_multi_tag('testMultiTag2', 'nixMultiTag', b.dataArrays{1});
448+
tmp = b.create_multi_tag('testMultiTag3', 'nixMultiTag', b.dataArrays{1});
449+
450+
assert(isempty(g.multiTags));
451+
452+
try
453+
g.add_multi_tags('hurra');
454+
catch ME
455+
assert(strcmp(ME.message, 'Expected cell array'));
456+
end;
457+
assert(isempty(g.multiTags));
458+
459+
try
460+
g.add_multi_tags({12, 13});
461+
catch ME
462+
assert(~isempty(strfind(ME.message, 'not a nix.MultiTag')));
463+
end;
464+
assert(isempty(g.multiTags));
465+
466+
g.add_multi_tags(b.multiTags());
467+
assert(size(g.multiTags, 1) == 3);
468+
469+
clear g tmp b f;
470+
f = nix.File(testFile, nix.FileMode.ReadOnly);
471+
assert(size(f.blocks{1}.groups{1}.multiTags, 1) == 3);
472+
end
473+
366474
%% Test: has nix.MultiTag by id or name
367475
function [] = test_has_multi_tag( varargin )
368476
fileName = 'testRW.h5';
@@ -500,6 +608,40 @@
500608
assert(size(f.blocks{1}.groups{1}.sources, 1) == 2);
501609
end
502610

611+
%% Test: Add sources by entity cell array
612+
function [] = test_add_sources ( varargin )
613+
testFile = fullfile(pwd, 'tests', 'testRW.h5');
614+
f = nix.File(testFile, nix.FileMode.Overwrite);
615+
b = f.create_block('testBlock', 'nixBlock');
616+
g = b.create_group('sourceTest', 'nixGroup');
617+
tmp = b.create_source('testSource1', 'nixSource');
618+
tmp = b.create_source('testSource2', 'nixSource');
619+
tmp = b.create_source('testSource3', 'nixSource');
620+
621+
assert(isempty(g.sources));
622+
623+
try
624+
g.add_sources('hurra');
625+
catch ME
626+
assert(strcmp(ME.message, 'Expected cell array'));
627+
end;
628+
assert(isempty(g.sources));
629+
630+
try
631+
g.add_sources({12, 13});
632+
catch ME
633+
assert(~isempty(strfind(ME.message, 'not a nix.Source')));
634+
end;
635+
assert(isempty(g.sources));
636+
637+
g.add_sources(b.sources());
638+
assert(size(g.sources, 1) == 3);
639+
640+
clear g tmp b f;
641+
f = nix.File(testFile, nix.FileMode.ReadOnly);
642+
assert(size(f.blocks{1}.groups{1}.sources, 1) == 3);
643+
end
644+
503645
%% Test: Remove sources by entity and id
504646
function [] = test_remove_source ( varargin )
505647
test_file = nix.File(fullfile(pwd, 'tests', 'testRW.h5'), nix.FileMode.Overwrite);

0 commit comments

Comments
 (0)