Skip to content

Commit 08db927

Browse files
committed
samepath: choose_method
1 parent a7e84f9 commit 08db927

File tree

17 files changed

+193
-176
lines changed

17 files changed

+193
-176
lines changed

+stdlib/cpu_arch.m

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,4 +12,3 @@
1212

1313
end
1414

15-
%!assert(!isempty(cpu_arch()))

+stdlib/get_shell.m

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,5 +19,3 @@
1919
end
2020

2121
end
22-
23-
%!assert(ischar(get_shell()))

+stdlib/private/choose_method.m

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@
6060

6161
has = true;
6262

63-
if endsWith(name, "is_char_device")
63+
if endsWith(name, ["is_char_device", "samepath"])
6464
if ispc(), continue, end
6565
end
6666

+stdlib/samepath.m

Lines changed: 7 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -12,25 +12,17 @@
1212
%%% Inputs
1313
% * path1, path2: paths to compare
1414

15-
function y = samepath(path1, path2)
15+
function y = samepath(path1, path2, method)
1616
arguments
1717
path1 {mustBeTextScalar}
1818
path2 {mustBeTextScalar}
19+
method (1,:) string = ["python", "java", "sys", "native"]
1920
end
2021

22+
% For this function, Python is over 10x faster than Java
2123

22-
if stdlib.has_python()
23-
% For this function, Python is over 10x faster than Java
24-
y = stdlib.python.samepath(path1, path2);
25-
elseif stdlib.has_java()
26-
y = stdlib.java.samepath(path1, path2);
27-
elseif isunix()
28-
y = stdlib.sys.samepath(path1, path2);
29-
else
30-
% string comparison is not preferred
31-
y = stdlib.native.samepath(path1, path2);
32-
end
24+
fun = choose_method(method, "samepath");
25+
26+
y = fun(path1, path2);
3327

34-
%!assert(samepath(".", "."))
35-
%!assert(samepath(".", "./"))
36-
%!assert(!samepath("not-exist", "not-exist/.."))
28+
end

.github/workflows/composite-check/action.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,4 +18,4 @@ runs:
1818
uses: actions/upload-artifact@v4
1919
with:
2020
name: ${{ matrix.release }}-${{ runner.os }}-codeissues
21-
path: CodeIssues.sarif
21+
path: release/CodeIssues.sarif

.github/workflows/composite-nomex/action.yml

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ runs:
2727
uses: matlab-actions/run-build@v2
2828
with:
2929
startup-options: ${{ matrix.startup-options }}
30-
tasks: test:java
30+
tasks: test:java test:java_exe
3131

3232

3333
- name: Java Test (< R2024b)
@@ -44,9 +44,8 @@ runs:
4444
if: ${{ matrix.release < 'R2022b' }}
4545
uses: matlab-actions/run-command@v2
4646
with:
47-
command: run('test/test_main.m')
47+
command: test_main
4848
startup-options: -logfile ${{ matrix.release }}-${{ runner.os }}-test.log
49-
# test/test_main.m adds path internally
5049

5150
- name: upload logfile
5251
if: ${{ hashFiles(matrix.release-runner.os-test.log) != '' }}

Readme.md

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,13 +31,12 @@ Matlab R2022b..R2024a, inclusive:
3131

3232
```matlab
3333
buildtool test_main
34-
buildtool test_java
3534
```
3635

3736
Matlab older than R2022b:
3837

3938
```matlab
40-
run('test/test_main.m')
39+
test_main
4140
```
4241

4342
## Java-based functions

buildfile.m

Lines changed: 49 additions & 110 deletions
Original file line numberDiff line numberDiff line change
@@ -3,137 +3,100 @@
33

44
plan = buildplan(localfunctions);
55

6-
if isMATLABReleaseOlderThan("R2023b")
7-
plan("clean") = matlab.buildtool.Task();
8-
else
9-
plan("clean") = matlab.buildtool.tasks.CleanTask;
10-
end
11-
12-
cnomex = ~HasTag("exe") & ~HasTag("mex") & ~HasTag("java") & ~HasTag("python");
6+
cnomex = ~HasTag("exe") & ~HasTag("mex") & ~HasTag("java") & ~HasTag("java_exe") & ~HasTag("python");
137
if ispc()
148
cnomex = cnomex & ~HasTag("unix");
159
else
1610
cnomex = cnomex & ~HasTag("windows");
1711
end
1812

19-
% cmex = HasTag("mex");
20-
21-
cjava = HasTag("java") & ~HasTag("exe");
22-
2313
pkg_root = fullfile(plan.RootFolder, "+stdlib");
2414
test_root = fullfile(plan.RootFolder, "test");
2515

26-
if isMATLABReleaseOlderThan("R2023b")
27-
plan("test_exe") = matlab.buildtool.Task(Actions=@(context) legacy_test(context, HasTag("exe")), Dependencies="exe");
28-
elseif isMATLABReleaseOlderThan("R2024b")
29-
plan("test_exe") = matlab.buildtool.tasks.TestTask(test_root, Tag="exe", Dependencies="exe");
16+
17+
if ~isMATLABReleaseOlderThan("R2023b")
18+
plan("clean") = matlab.buildtool.tasks.CleanTask;
3019
end
3120

3221
if isMATLABReleaseOlderThan("R2024b")
3322

34-
plan("test_java") = matlab.buildtool.Task(Actions=@(context) legacy_test(context, cjava));
35-
plan("test_main") = matlab.buildtool.Task(Actions=@(context) legacy_test(context, cnomex));
23+
plan("test_main") = matlab.buildtool.Task(Actions=@(context) test_main(context, cnomex));
24+
25+
if isMATLABReleaseOlderThan('R2023b')
26+
return
27+
end
28+
29+
plan("test_java") = matlab.buildtool.tasks.TestTask(test_root, Tag="java");
30+
plan("test_exe") = matlab.buildtool.tasks.TestTask(test_root, Tag="exe", Dependencies="exe");
3631

3732
elseif isMATLABReleaseOlderThan("R2025a")
38-
% Matlab == R2024b
39-
plan("test:java") = matlab.buildtool.Task(Actions=@(context) legacy_test(context, cjava));
40-
plan("test:exe") = matlab.buildtool.tasks.TestTask(test_root, Tag="exe", Dependencies="exe");
41-
plan("test:main") = matlab.buildtool.Task(Actions=@(context) legacy_test(context, cnomex));
42-
% plan("test:mex") = matlab.buildtool.Task(Actions=@(context) legacy_test(context, cmex), Dependencies="mex");
33+
34+
plan("test:main") = matlab.buildtool.Task(Actions=@(context) test_main(context, cnomex));
4335

4436
else
45-
% Matlab >= R2025a
46-
plan("test:exe") = matlab.buildtool.tasks.TestTask(test_root, Tag="exe", Description="test subprocess",...
47-
SourceFiles=[pkg_root, test_root + ["/*.cpp", "/*.c", "/*.f90"]], ...
48-
RunOnlyImpactedTests=true,...
49-
Dependencies="exe", TestResults="TestResults_exe.xml", Strict=true);
50-
51-
plan("test:main") = matlab.buildtool.tasks.TestTask(test_root, Description="Test non-MEX targets",...
52-
Selector=cnomex, ...
53-
SourceFiles=pkg_root, RunOnlyImpactedTests=true,...
54-
TestResults="TestResults_nomex.xml", Strict=true);
55-
56-
% plan("test:mex") = matlab.buildtool.tasks.TestTask(test_root, Description="Test mex targts",...
57-
% Selector=cmex, ...
58-
% SourceFiles=[pkg_root, plan.RootFolder + "/src"], RunOnlyImpactedTests=true,...
59-
% Dependencies="mex", TestResults="TestResults_mex.xml", Strict=true);
60-
61-
plan("test:java") = matlab.buildtool.tasks.TestTask(test_root, Description="test Java targets", ...
62-
Selector=cjava, ...
63-
SourceFiles=pkg_root, RunOnlyImpactedTests=true,...
64-
TestResults="TestResults_java.xml", Strict=true);
37+
38+
plan("test:main") = matlab.buildtool.tasks.TestTask(...
39+
test_root, Description="Test non-MEX targets",...
40+
Selector=cnomex, ...
41+
SourceFiles=pkg_root, RunOnlyImpactedTests=true,...
42+
TestResults="release/TestResults_nomex.xml", Strict=true);
43+
44+
end
45+
46+
47+
if ~isMATLABReleaseOlderThan('R2024b')
48+
49+
plan("test:exe") = matlab.buildtool.tasks.TestTask(test_root, Tag="exe", Dependencies="exe");
50+
51+
plan("test:python") = matlab.buildtool.tasks.TestTask(...
52+
test_root, Description="test Python targets", ...
53+
Tag = "python", ...
54+
TestResults="release/TestResults_java.xml", Strict=true);
55+
56+
plan("test:java") = matlab.buildtool.tasks.TestTask(...
57+
test_root, Description="test Java targets", ...
58+
Tag = "java", ...
59+
TestResults="release/TestResults_java.xml", Strict=true);
60+
61+
plan("test:java_exe") = matlab.buildtool.tasks.TestTask(...
62+
test_root, Description="test Java exe targets", ...
63+
Tag = "java_exe", Dependencies="exe", ...
64+
TestResults="release/TestResults_java_exe.xml", Strict=true);
6565

6666
addons = matlab.addons.installedAddons;
67-
if contains(addons.Name, "Matlab Test")
67+
if any(ismember(addons.Name, "MATLAB Test"))
6868
plan("coverage") = matlab.buildtool.tasks.TestTask(test_root, ...
6969
Description="code coverage", ...
7070
Dependencies="exe", ...
7171
SourceFiles=pkg_root, ...
72-
Selector=cnomex | HasTag("java") | HasTag("exe") | HasTag("python"), ...
73-
Strict=false).addCodeCoverage(matlabtest.plugins.codecoverage.StandaloneReport("coverage-report.html"));
72+
Strict=false).addCodeCoverage(...
73+
matlabtest.plugins.codecoverage.StandaloneReport("release/coverage-report.html"));
7474
end
7575

76-
% plan("clean_mex") = matlab.buildtool.Task(Actions=@clean_mex, Description="Clean only MEX files to enable incremental tests");
7776
end
7877

79-
if isMATLABReleaseOlderThan("R2023a"), return, end
80-
8178
srcs = ["stdout_stderr_c.c", "stdin_cpp.cpp", "printenv.cpp", "sleep.cpp"];
82-
exes = ["stdout_stderr_c.exe", "stdin_cpp.exe", "printenv.exe", "sleep.exe"];
8379
if ~isempty(get_compiler("fortran"))
8480
srcs = [srcs, "stdout_stderr_fortran.f90", "stdin_fortran.f90"];
85-
exes = [exes, "stdout_stderr_fortran.exe", "stdin_fortran.exe"];
8681
end
82+
[~, exes] = fileparts(srcs);
83+
exes = exes + ".exe";
8784

8885
srcs = fullfile(test_root, srcs);
8986
exes = fullfile(test_root, exes);
9087

9188
plan("exe") = matlab.buildtool.Task(Inputs=srcs, Outputs=exes, Actions=@build_exe, ...
92-
Description="build test exe's for test subprocess");
89+
Description="build demo executables for testing java_run");
9390

9491
if ~isMATLABReleaseOlderThan("R2024a")
9592
plan("check") = matlab.buildtool.tasks.CodeIssuesTask(plan.RootFolder, ...
9693
IncludeSubfolders=true, ...
97-
WarningThreshold=0, Results="CodeIssues.sarif");
98-
end
99-
100-
101-
%% MexTask
102-
if ~isMATLABReleaseOlderThan("R2024b")
103-
% for s = get_mex_sources()
104-
% src = s{1};
105-
% [~, name] = fileparts(src(1));
106-
%
107-
% % name of MEX target function is name of first source file
108-
% plan("mex:" + name) = matlab.buildtool.tasks.MexTask(src, pkg_root, ...
109-
% Description="Build MEX target " + name, ...
110-
% Options=get_compiler_options());
111-
% end
94+
WarningThreshold=0, Results="release/CodeIssues.sarif");
11295
end
11396

11497
end
11598

11699

117-
% function clean_mex(context)
118-
% run(context.Plan, "clean", {"mex"});
119-
% end
120-
121-
122-
function legacy_test(context, sel)
123-
import matlab.unittest.TestSuite
124-
125-
suite = TestSuite.fromFolder(fullfile(context.Plan.RootFolder, 'test'));
126-
suite = suite.selectIf(sel);
127-
128-
runner = testrunner();
129-
130-
r = run(runner, suite);
131-
132-
assert(~isempty(r), "No tests were run")
133-
assertSuccess(r)
134-
end
135-
136-
137100
function publishTask(context)
138101
% publish HTML inline documentation strings to individual HTML files
139102
outdir = fullfile(context.Plan.RootFolder, 'docs');
@@ -143,27 +106,3 @@ function publishTask(context)
143106
"https://github.com/geospace-code/matlab-stdlib", ...
144107
outdir)
145108
end
146-
147-
148-
function srcs = get_mex_sources(build_all)
149-
arguments (Input)
150-
build_all (1,1) logical = false
151-
end
152-
arguments (Output)
153-
srcs cell
154-
end
155-
156-
srcs = {
157-
% "src/remove.cpp", ...
158-
%["src/normalize.cpp", "src/normalize_fs.cpp", "src/pure.cpp"], ...
159-
% "src/set_permissions.cpp"
160-
};
161-
162-
if ~stdlib.has_python() || build_all
163-
srcs{end+1} = "src/is_char_device.cpp";
164-
srcs{end+1} = ["src/is_admin.cpp", "src/admin_fs.cpp"];
165-
% srcs{end+1} = "src/disk_available.cpp";
166-
% srcs{end+1} = "src/disk_capacity.cpp";
167-
end
168-
169-
end

private/clean_mex.m

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
function clean_mex(context)
2+
run(context.Plan, "clean", {"mex"});
3+
end

private/get_mex_sources.m

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
function srcs = get_mex_sources(build_all)
2+
arguments (Input)
3+
build_all (1,1) logical = false
4+
end
5+
arguments (Output)
6+
srcs cell
7+
end
8+
9+
srcs = {
10+
% "src/remove.cpp", ...
11+
%["src/normalize.cpp", "src/normalize_fs.cpp", "src/pure.cpp"], ...
12+
% "src/set_permissions.cpp"
13+
};
14+
15+
if ~stdlib.has_python() || build_all
16+
srcs{end+1} = "src/is_char_device.cpp";
17+
srcs{end+1} = ["src/is_admin.cpp", "src/admin_fs.cpp"];
18+
% srcs{end+1} = "src/disk_available.cpp";
19+
% srcs{end+1} = "src/disk_capacity.cpp";
20+
end
21+
22+
end

0 commit comments

Comments
 (0)