Skip to content

Commit 509af90

Browse files
committed
normalize: only native needed
no speed advantage to other backends moved to example/
1 parent bbd36fc commit 509af90

File tree

8 files changed

+42
-66
lines changed

8 files changed

+42
-66
lines changed

+stdlib/+native/normalize.m

Lines changed: 0 additions & 36 deletions
This file was deleted.

+stdlib/Backend.m

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@
8383
end
8484
case 'perl'
8585
switch functionName
86-
case {'get_uid', 'normalize'}
86+
case {'get_uid'}
8787
if ispc(), continue, end
8888
end
8989
case 'python'

+stdlib/normalize.m

Lines changed: 26 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -5,26 +5,40 @@
55
%
66
%%% Inputs
77
% * p: path to normalize
8-
% * backend: backend to use
98
%%% Outputs
10-
% * c: normalized path
11-
% * b: backend used
9+
% * n: normalized path
1210

13-
function [n, b] = normalize(file, backend)
11+
function n = normalize(apath)
1412
arguments
15-
file string
16-
backend (1,:) string = ["native", "python", "perl"]
13+
apath (1,1) string
1714
end
1815

19-
o = stdlib.Backend(mfilename(), backend);
20-
21-
if isscalar(file)
22-
n = o.func(file);
16+
parts = split(apath, ["/", filesep]);
17+
i0 = 1;
18+
if startsWith(apath, "/" | filesep)
19+
n = extractBefore(apath, 2);
20+
elseif ispc() && strlength(apath) >= 2 && ~stdlib.strempty(stdlib.root_name(apath))
21+
n = parts(1);
22+
i0 = 2;
2323
else
24-
n = arrayfun(o.func, file);
24+
n = "";
25+
end
26+
27+
for i = i0:length(parts)
28+
if ~ismember(parts(i), [".", ""])
29+
if n == ""
30+
n = parts(i);
31+
elseif ismember(n, ["/", filesep])
32+
n = n + parts(i);
33+
else
34+
n = n + "/" + parts(i);
35+
end
36+
end
2537
end
2638

27-
b = o.backend;
39+
if stdlib.strempty(n)
40+
n = ".";
41+
end
2842

2943

3044
end

+stdlib/+perl/normalize.m renamed to example/+perl/normalize.m

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
%% PERL.NORMALIZE normalize path
22
%
3-
% Note: on Windows, walks up ".." despite specification and not doing so on Unix,
3+
% Note: on Windows, walks up ".." despite specification and not doing so on Unix,
44
% so we only allow this backend on Unix-like systems
55

66
function n = normalize(apath)
File renamed without changes.

example/private/init_backend.m

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,4 +9,8 @@
99

1010
backends = cellstr(stdlib.Backend().select(funcName));
1111

12+
if isempty(backends)
13+
error('Did not find any backends for function %s', funcName)
14+
end
15+
1216
end

test/TestNormalize.m

Lines changed: 6 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,6 @@
33
TestNormalize < matlab.unittest.TestCase
44

55
properties (TestParameter)
6-
p
7-
d
8-
backend
9-
end
10-
11-
12-
methods (TestParameterDefinition, Static)
13-
function p = init_norm()
14-
156
p = {
167
{"", "."}, ...
178
{"a/..", "a/.."}, ...
@@ -25,9 +16,12 @@
2516
{"./a/.", "a"}, ...
2617
{"../a", "../a"}
2718
};
28-
19+
d
2920
end
3021

22+
23+
methods (TestParameterDefinition, Static)
24+
3125
function d = init_drop_slash()
3226
d = {...
3327
{"", ""}, ...
@@ -52,17 +46,13 @@
5246

5347
end
5448

55-
function backend = setupBackends()
56-
backend = init_backend("normalize");
57-
end
58-
5949
end
6050

6151

6252
methods (Test)
6353

64-
function test_normalize(tc, p, backend)
65-
c = stdlib.normalize(p{1}, backend);
54+
function test_normalize(tc, p)
55+
c = stdlib.normalize(p{1});
6656

6757
tc.verifyEqual(c, p{2}, ...
6858
sprintf("normalize(%s)", p{1}))

test/private/init_backend.m

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,4 +9,8 @@
99

1010
backends = cellstr(stdlib.Backend().select(funcName));
1111

12+
if isempty(backends)
13+
error('Did not find any backends for function %s', funcName)
14+
end
15+
1216
end

0 commit comments

Comments
 (0)