Skip to content

Commit 117587e

Browse files
committed
[c++/m] Validate File Function
Closes #126 Adds the validate file function to the c++ and Matlab side adds a rudimentary test as well.
1 parent 78c36b1 commit 117587e

File tree

5 files changed

+67
-6
lines changed

5 files changed

+67
-6
lines changed

+nix/File.m

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,10 @@
3838
mode = nix_mx('File::fileMode', obj.nix_handle);
3939
end
4040

41+
function res = validate(obj)
42+
res = nix_mx('File::validate', obj.nix_handle);
43+
end
44+
4145
% ----------------
4246
% Block methods
4347
% ----------------

nix_mx.cc

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,7 @@ void mexFunction(int nlhs,
118118
.reg("sectionCount", GETTER(nix::ndsize_t, nix::File, sectionCount))
119119
.reg("isOpen", GETTER(bool, nix::File, isOpen));
120120
methods->add("File::fileMode", nixfile::fileMode);
121+
methods->add("File::validate", nixfile::validate);
121122

122123
classdef<nix::Block>("Block", methods)
123124
.desc(&nixblock::describe)

src/nixfile.cc

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,31 @@
1111
#include "mex.h"
1212

1313
#include <nix.hpp>
14+
#include <nix/valid/validate.hpp>
1415

1516
#include "handle.h"
1617
#include "arguments.h"
1718
#include "struct.h"
1819

20+
// helper function
21+
mxArray *message(std::vector<nix::valid::Message> mes) {
22+
const mwSize size = static_cast<mwSize>(mes.size());
23+
mxArray *list = mxCreateCellArray(1, &size);
24+
25+
for (size_t i = 0; i < mes.size(); i++) {
26+
27+
nix::valid::Message curr = mes[i];
28+
29+
struct_builder msb({ 1 }, { "id", "msg" });
30+
msb.set(curr.id);
31+
msb.set(curr.msg);
32+
33+
mxSetCell(list, i, msb.array());
34+
}
35+
36+
return list;
37+
}
38+
1939
namespace nixfile {
2040

2141
void open(const extractor &input, infusor &output) {
@@ -51,6 +71,26 @@ namespace nixfile {
5171
output.set(0, omode);
5272
}
5373

74+
void validate(const extractor &input, infusor &output) {
75+
nix::File f = input.entity<nix::File>(1);
76+
nix::valid::Result res = f.validate();
77+
78+
std::vector<nix::valid::Message> err = res.getErrors();
79+
mxArray *err_list = message(err);
80+
81+
std::vector<nix::valid::Message> warn = res.getWarnings();
82+
mxArray *warn_list = message(warn);
83+
84+
struct_builder sb({ 1 }, { "ok", "hasErrors", "hasWarnings", "errors", "warnings" });
85+
sb.set(res.ok());
86+
sb.set(res.hasErrors());
87+
sb.set(res.hasWarnings());
88+
sb.set(err_list);
89+
sb.set(warn_list);
90+
91+
output.set(0, sb.array());
92+
}
93+
5494
mxArray *describe(const nix::File &fd) {
5595
struct_builder sb({ 1 }, { "format", "version", "location", "createdAt", "updatedAt" });
5696
sb.set(fd.format());

src/nixfile.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@ namespace nixfile {
1717

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

20+
void validate(const extractor &input, infusor &output);
21+
2022
mxArray *describe(const nix::File &f);
2123

2224
} // namespace nixfile

tests/TestFile.m

Lines changed: 20 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
funcs{end+1} = @test_overwrite;
1717
funcs{end+1} = @test_is_open;
1818
funcs{end+1} = @test_file_mode;
19+
funcs{end+1} = @test_validate;
1920
funcs{end+1} = @test_create_block;
2021
funcs{end+1} = @test_block_count;
2122
funcs{end+1} = @test_create_section;
@@ -32,28 +33,28 @@
3233

3334
%% Test: Open HDF5 file in ReadOnly mode
3435
function [] = test_read_only( varargin )
35-
f = nix.File(fullfile(pwd,'tests','test.h5'), nix.FileMode.ReadOnly);
36+
f = nix.File(fullfile(pwd, 'tests', 'test.h5'), nix.FileMode.ReadOnly);
3637
end
3738

3839
%% Test: Open HDF5 file in ReadWrite mode
3940
function [] = test_read_write( varargin )
40-
f = nix.File(fullfile(pwd,'tests','testRW.h5'), nix.FileMode.ReadWrite);
41+
f = nix.File(fullfile(pwd, 'tests', 'testRW.h5'), nix.FileMode.ReadWrite);
4142
end
4243

4344
%% Test: Open HDF5 file in Overwrite mode
4445
function [] = test_overwrite( varargin )
45-
f = nix.File(fullfile(pwd,'tests','testRW.h5'), nix.FileMode.Overwrite);
46+
f = nix.File(fullfile(pwd, 'tests', 'testRW.h5'), nix.FileMode.Overwrite);
4647
end
4748

4849
%% Test: File is open
4950
function [] = test_is_open( varargin )
50-
f = nix.File(fullfile(pwd,'tests','testRW.h5'), nix.FileMode.ReadOnly);
51+
f = nix.File(fullfile(pwd, 'tests', 'testRW.h5'), nix.FileMode.ReadOnly);
5152
assert(f.is_open());
5253
end
5354

54-
%% Test: File is open
55+
%% Test: File mode
5556
function [] = test_file_mode( varargin )
56-
testFile = fullfile(pwd,'tests','testRW.h5');
57+
testFile = fullfile(pwd, 'tests', 'testRW.h5');
5758
f = nix.File(testFile, nix.FileMode.ReadOnly);
5859
assert(f.file_mode() == nix.FileMode.ReadOnly);
5960

@@ -66,6 +67,19 @@
6667
assert(f.file_mode() == nix.FileMode.Overwrite);
6768
end
6869

70+
%% Test: Validate
71+
function [] = test_validate( varargin )
72+
testFile = fullfile(pwd, 'tests', 'testRW.h5');
73+
f = nix.File(testFile, nix.FileMode.Overwrite);
74+
validation = f.validate();
75+
76+
assert(validation.ok());
77+
assert(~validation.hasErrors());
78+
assert(~validation.hasWarnings());
79+
assert(~size(validation.errors, 1));
80+
assert(~size(validation.warnings, 1));
81+
end
82+
6983
%% Test: Create Block
7084
function [] = test_create_block( varargin )
7185
test_file = nix.File(fullfile(pwd,'tests','testRW.h5'), nix.FileMode.Overwrite);

0 commit comments

Comments
 (0)