Skip to content

Commit 7059707

Browse files
committed
[Matlab] Refactor MultiTag index use
1 parent dc7acb7 commit 7059707

File tree

2 files changed

+46
-38
lines changed

2 files changed

+46
-38
lines changed

+nix/MultiTag.m

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -52,17 +52,21 @@
5252
r = nix.Utils.open_entity(obj, 'openReferences', id_or_name, @nix.DataArray);
5353
end
5454

55-
function r = open_reference_idx(obj, idx)
55+
function r = open_reference_idx(obj, index)
56+
idx = nix.Utils.handle_index(index);
5657
r = nix.Utils.open_entity(obj, 'openReferenceIdx', idx, @nix.DataArray);
5758
end
5859

59-
function r = retrieve_data(obj, pos_idx, id_or_name)
60+
function r = retrieve_data(obj, position_idx, id_or_name)
61+
pos_idx = nix.Utils.handle_index(position_idx);
6062
fname = strcat(obj.alias, '::retrieveData');
6163
data = nix_mx(fname, obj.nix_handle, pos_idx, id_or_name);
6264
r = nix.Utils.transpose_array(data);
6365
end
6466

65-
function r = retrieve_data_idx(obj, pos_idx, ref_idx)
67+
function r = retrieve_data_idx(obj, position_idx, reference_idx)
68+
pos_idx = nix.Utils.handle_index(position_idx);
69+
ref_idx = nix.Utils.handle_index(reference_idx);
6670
fname = strcat(obj.alias, '::retrieveDataIdx');
6771
data = nix_mx(fname, obj.nix_handle, pos_idx, ref_idx);
6872
r = nix.Utils.transpose_array(data);
@@ -99,17 +103,21 @@
99103
r = nix.Utils.open_entity(obj, 'openFeature', id_or_name, @nix.Feature);
100104
end
101105

102-
function r = open_feature_idx(obj, idx)
106+
function r = open_feature_idx(obj, index)
107+
idx = nix.Utils.handle_index(index);
103108
r = nix.Utils.open_entity(obj, 'openFeatureIdx', idx, @nix.Feature);
104109
end
105110

106-
function r = retrieve_feature_data(obj, pos_idx, id_or_name)
111+
function r = retrieve_feature_data(obj, position_idx, id_or_name)
112+
pos_idx = nix.Utils.handle_index(position_idx);
107113
fname = strcat(obj.alias, '::featureRetrieveData');
108114
data = nix_mx(fname, obj.nix_handle, pos_idx, id_or_name);
109115
r = nix.Utils.transpose_array(data);
110116
end
111117

112-
function r = retrieve_feature_data_idx(obj, pos_idx, feat_idx)
118+
function r = retrieve_feature_data_idx(obj, position_idx, feature_idx)
119+
pos_idx = nix.Utils.handle_index(position_idx);
120+
feat_idx = nix.Utils.handle_index(feature_idx);
113121
fname = strcat(obj.alias, '::featureRetrieveDataIdx');
114122
data = nix_mx(fname, obj.nix_handle, pos_idx, feat_idx);
115123
r = nix.Utils.transpose_array(data);

tests/TestMultiTag.m

Lines changed: 32 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -431,9 +431,9 @@
431431
t.add_feature(f2, nix.LinkType.Untagged);
432432
t.add_feature(f3, nix.LinkType.Indexed);
433433

434-
assert(f.blocks{1}.multiTags{1}.open_feature_idx(0).linkType == nix.LinkType.Tagged);
435-
assert(f.blocks{1}.multiTags{1}.open_feature_idx(1).linkType == nix.LinkType.Untagged);
436-
assert(f.blocks{1}.multiTags{1}.open_feature_idx(2).linkType == nix.LinkType.Indexed);
434+
assert(f.blocks{1}.multiTags{1}.open_feature_idx(1).linkType == nix.LinkType.Tagged);
435+
assert(f.blocks{1}.multiTags{1}.open_feature_idx(2).linkType == nix.LinkType.Untagged);
436+
assert(f.blocks{1}.multiTags{1}.open_feature_idx(3).linkType == nix.LinkType.Indexed);
437437
end
438438

439439
%% Test: Open reference by ID or name
@@ -470,9 +470,9 @@
470470
t.add_reference(r2);
471471
t.add_reference(r3);
472472

473-
assert(strcmp(f.blocks{1}.multiTags{1}.open_reference_idx(0).name, r1.name));
474-
assert(strcmp(f.blocks{1}.multiTags{1}.open_reference_idx(1).name, r2.name));
475-
assert(strcmp(f.blocks{1}.multiTags{1}.open_reference_idx(2).name, r3.name));
473+
assert(strcmp(f.blocks{1}.multiTags{1}.open_reference_idx(1).name, r1.name));
474+
assert(strcmp(f.blocks{1}.multiTags{1}.open_reference_idx(2).name, r2.name));
475+
assert(strcmp(f.blocks{1}.multiTags{1}.open_reference_idx(3).name, r3.name));
476476
end
477477

478478
%% Test: Feature count
@@ -696,17 +696,17 @@
696696

697697
% test invalid reference name
698698
try
699-
t.retrieve_data(0, 'I do not exist');
699+
t.retrieve_data(1, 'I do not exist');
700700
catch ME
701701
assert(~isempty(strfind(ME.message, 'no DataArray with the specified name or id')), ...
702702
'Invalid reference name failed');
703703
end
704704
assert(exist('ME') == 1, 'Invalid reference name fail, error not raised');
705705
clear ME;
706706

707-
assert(isequal(t.retrieve_data(0, d1.name), raw1(1:1)), 'Retrieve pos 1, ref 1 fail');
708-
assert(isequal(t.retrieve_data(1, d1.id), raw1(2, 2:4)), 'Retrieve pos 2, ref 1 fail');
709-
assert(isequal(t.retrieve_data(2, d2.id), raw2(1:2, 3:6)), 'Retrieve pos 3, ref 2 fail');
707+
assert(isequal(t.retrieve_data(1, d1.name), raw1(1:1)), 'Retrieve pos 1, ref 1 fail');
708+
assert(isequal(t.retrieve_data(2, d1.id), raw1(2, 2:4)), 'Retrieve pos 2, ref 1 fail');
709+
assert(isequal(t.retrieve_data(3, d2.id), raw2(1:2, 3:6)), 'Retrieve pos 3, ref 2 fail');
710710
end
711711

712712
%% Test: Retrieve reference data by index
@@ -749,23 +749,23 @@
749749

750750
% test invalid position idx
751751
try
752-
t.retrieve_data_idx(100, 0);
752+
t.retrieve_data_idx(100, 1);
753753
catch ME
754754
assert(~isempty(strfind(ME.message, 'ounds of positions or extents')), ...
755755
'Invalid position index failed');
756756
end
757757

758758
% test invalid reference idx
759759
try
760-
t.retrieve_data_idx(0, 100);
760+
t.retrieve_data_idx(1, 100);
761761
catch ME
762762
assert(~isempty(strfind(ME.message, 'out of bounds')), ...
763763
'Invalid reference index failed');
764764
end
765765

766-
assert(isequal(t.retrieve_data_idx(0, 0), raw1(1:1)), 'Retrieve pos 1, ref 1 fail');
767-
assert(isequal(t.retrieve_data_idx(1, 0), raw1(2, 2:4)), 'Retrieve pos 2, ref 1 fail');
768-
assert(isequal(t.retrieve_data_idx(2, 1), raw2(1:2, 3:6)), 'Retrieve pos 3, ref 2 fail');
766+
assert(isequal(t.retrieve_data_idx(1, 1), raw1(1:1)), 'Retrieve pos 1, ref 1 fail');
767+
assert(isequal(t.retrieve_data_idx(2, 1), raw1(2, 2:4)), 'Retrieve pos 2, ref 1 fail');
768+
assert(isequal(t.retrieve_data_idx(3, 2), raw2(1:2, 3:6)), 'Retrieve pos 3, ref 2 fail');
769769
end
770770

771771
%% Test: Retrieve feature data by id or name
@@ -817,7 +817,7 @@
817817

818818
% test invalid name or id
819819
try
820-
t.retrieve_feature_data(0, 'I do not exist');
820+
t.retrieve_feature_data(1, 'I do not exist');
821821
catch ME
822822
assert(~isempty(strfind(ME.message, 'no Feature with the specified name or id')), ...
823823
'Invalid reference name failed');
@@ -830,25 +830,25 @@
830830
assert(isequal(raw_feat1, retData), 'Untagged fail');
831831

832832
% test tagged properly applies position and extents
833-
retData = t.retrieve_feature_data(0, da_feat2.id);
833+
retData = t.retrieve_feature_data(1, da_feat2.id);
834834
assert(isequal(retData, [21]), 'Tagged pos 1 fail');
835835

836-
retData = t.retrieve_feature_data(1, da_feat2.name);
836+
retData = t.retrieve_feature_data(2, da_feat2.name);
837837
assert(isequal(retData, [24]), 'Tagged pos 2 fail');
838838

839-
retData = t.retrieve_feature_data(2, da_feat2.id);
839+
retData = t.retrieve_feature_data(3, da_feat2.id);
840840
assert(isequal(retData, [26, 27, 28]), 'Tagged pos 3 fail');
841841

842842
% test indexed returns first and last index value
843-
retData = t.retrieve_feature_data(0, da_feat3.id);
843+
retData = t.retrieve_feature_data(1, da_feat3.id);
844844
assert(isequal(retData, raw_feat3(1)), 'Indexed first pos fail');
845845

846-
retData = t.retrieve_feature_data(7, da_feat3.name);
846+
retData = t.retrieve_feature_data(8, da_feat3.name);
847847
assert(isequal(retData, raw_feat3(end)), 'Indexed last pos fail');
848848

849849
% test indexed fail when accessing position > length of referenced array
850850
try
851-
t.retrieve_feature_data(size(raw_feat3, 2) + 1, da_feat3.id);
851+
t.retrieve_feature_data(size(raw_feat3, 2) + 2, da_feat3.id);
852852
catch ME
853853
assert(~isempty(strfind(ME.message, 'than the data stored in the feature')), ...
854854
'Indexed out of length fail');
@@ -896,17 +896,17 @@
896896

897897
% test invalid position idx
898898
try
899-
t.retrieve_feature_data_idx(100, 1);
899+
t.retrieve_feature_data_idx(100, 2);
900900
catch ME
901-
assert(isempty(strfind(ME.message, 'ounds of positions or extents')), ...
901+
assert(~isempty(strfind(ME.message, 'ounds of positions')), ...
902902
'Invalid position index failed');
903903
end
904904
assert(exist('ME') == 1, 'Invalid position index fail, error not raised');
905905
clear ME;
906906

907907
% test invalid feature idx
908908
try
909-
t.retrieve_feature_data_idx(0, 100);
909+
t.retrieve_feature_data_idx(1, 100);
910910
catch ME
911911
assert(~isempty(strfind(ME.message, 'out of bounds')), ...
912912
'Invalid reference index failed');
@@ -915,29 +915,29 @@
915915
clear ME;
916916

917917
% test untagged ignores position and returns full data
918-
retData = t.retrieve_feature_data_idx(100, 0);
918+
retData = t.retrieve_feature_data_idx(100, 1);
919919
assert(isequal(raw_feat1, retData), 'Untagged fail');
920920

921921
% test tagged properly applies position and extents
922-
retData = t.retrieve_feature_data_idx(0, 1);
922+
retData = t.retrieve_feature_data_idx(1, 2);
923923
assert(isequal(retData, [21]), 'Tagged pos 1 fail');
924924

925-
retData = t.retrieve_feature_data_idx(1, 1);
925+
retData = t.retrieve_feature_data_idx(2, 2);
926926
assert(isequal(retData, [24]), 'Tagged pos 2 fail');
927927

928-
retData = t.retrieve_feature_data_idx(2, 1);
928+
retData = t.retrieve_feature_data_idx(3, 2);
929929
assert(isequal(retData, [26, 27, 28]), 'Tagged pos 3 fail');
930930

931931
% test indexed returns first and last index value
932-
retData = t.retrieve_feature_data_idx(0, 2);
932+
retData = t.retrieve_feature_data_idx(1, 3);
933933
assert(isequal(retData, raw_feat3(1)), 'Indexed first pos fail');
934934

935-
retData = t.retrieve_feature_data_idx(7, 2);
935+
retData = t.retrieve_feature_data_idx(8, 3);
936936
assert(isequal(retData, raw_feat3(end)), 'Indexed last pos fail');
937937

938938
% test indexed fail when accessing position > length of referenced array
939939
try
940-
t.retrieve_feature_data_idx(size(raw_feat3, 2) + 1, 2);
940+
t.retrieve_feature_data_idx(size(raw_feat3, 2) + 2, 3);
941941
catch ME
942942
assert(~isempty(strfind(ME.message, 'than the data stored in the feature')), ...
943943
'Indexed out of length fail');

0 commit comments

Comments
 (0)