* Bug 15308 fixed: evstr(['1;2' '3;4']) was not accepted, unlike ['1 2';'3 4']
[scilab.git] / scilab / modules / string / tests / unit_tests / evstr.tst
1 // =============================================================================
2 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3 // Copyright (C) 2010 - DIGITEO - Allan CORNET
4 // Copyright (C) 2017 - Samuel GOUGEON
5 //
6 //  This file is distributed under the same license as the Scilab package.
7 // =============================================================================
8 //
9 // <-- CLI SHELL MODE -->
10 // <-- NO CHECK REF -->
11 //
12 // =============================================================================
13 // unit tests evstr
14 // =============================================================================
15 a = 1;
16 b = 2;
17 Z = ["a","b"];
18 res = evstr(Z);
19 assert_checkequal(res(1), a);
20 assert_checkequal(res(2), b);
21 // =============================================================================
22 a = 1;
23 b = 2;
24 Z = list(["%(1)","%(1)-%(2)"], ["a+1","b+1"]);
25 res = evstr(Z);
26 assert_checkequal(res, [2 -1]);
27 // =============================================================================
28 assert_checktrue(isnan(evstr(%nan)));
29 assert_checktrue(isinf(evstr(%inf)));
30 assert_checktrue(isnan(evstr("%nan")));
31 assert_checktrue(isinf(evstr("%inf")));
32 assert_checktrue(isnan(evstr("Nan")));
33 assert_checktrue(isinf(evstr("Inf")));
34 assert_checktrue(isnan(evstr("NaN")));
35 assert_checktrue(isinf(evstr(-%inf)));
36 assert_checktrue(isinf(evstr("-%inf")));
37 assert_checktrue(isinf(evstr("-Inf")));
38 // =============================================================================
39 Scilab_value = 3;
40 assert_checkequal(Scilab_value, evstr("Scilab_value"));
41 // =============================================================================
42 clear toto;
43 assert_checkfalse(execstr("evstr(''toto'')", "errcatch") == 0);
44 assert_checkfalse(execstr("evstr(toto)", "errcatch") == 0);
45 // =============================================================================
46 s = rand(3,3,3);
47 assert_checkequal(execstr("evstr(s)", "errcatch"), 0);
48 // =============================================================================
49 function foo(), endfunction
50 assert_checkequal(execstr("evstr(''foo'')", "errcatch"), 0);
51 // =============================================================================
52 assert_checkequal(evstr(""), []);
53 // =============================================================================
54 // With some concatenations:
55 assert_checkequal(evstr("1 2 3"), 1:3);
56 assert_checkequal(evstr(["1 2" "3" "4 5"]), 1:5);
57 assert_checkequal(evstr("1 ; 2 ; 3"), [1;2;3]);
58 assert_checkequal(evstr(["1;2" ; "3" ; "4;5"]), (1:5)');
59
60 assert_checkequal(evstr(["1 2" ; "3 4"]), [1 2 ; 3 4]);
61 assert_checkequal(evstr(["1;2" "3;4"]), [1 3 ; 2 4]);
62
63 // =============================================================================
64 // With some comments or "//" substrings
65 //  Scalar expression
66 assert_checkequal(evstr("// test"), []);
67 assert_checkequal(evstr("1 // test"), 1);
68 assert_checkequal(evstr("1 2 // test"), [1 2]);
69 assert_checkequal(evstr("[1 2] // test"), [1 2]);
70 assert_checkequal(evstr("1 ; 2 // test"), [1 ; 2]);
71 assert_checkequal(evstr("[1;2] // test"), [1 ; 2]);
72 assert_checkequal(evstr("""//"" // A''b"), "//");
73 assert_checkequal(evstr(" ""//"" // A''b"), "//");
74 assert_checkequal(evstr(" "" //"" // A''b // c""d "), " //");
75
76 //  Column of expressions:
77 assert_checkequal(evstr(["// test" ; "// test line 2"]), []);
78 assert_checkequal(evstr(["1 2"; "// test" ; "3 4"]), [1 2; 3 4]);
79 assert_checkequal(evstr(["1 // abc"; "// no result" ; "3 // def"]), [1 ; 3]);
80 assert_checkequal(evstr(["1 // abc"; " // no result" ; "3 // def"]), [1 ; 3]);
81 assert_checkequal(evstr(["1 // abc"; "[] // no result" ; "3 // def"]), [1 ; 3]);
82 res = ["abc"; "http://a.b" ; "def"];
83 assert_checkequal(evstr(["""abc"""; """http://a.b""" ; """def"""]), res);
84 assert_checkequal(evstr(["""abc"""; """http://a.b"" // test" ; """def"""]), res);
85 assert_checkequal(evstr(["""abc"""; """http://a.b""// test" ; """def"""]), res);
86 assert_checkequal(evstr(["""abc"""; "''http://a.b'' // test" ; """def"""]), res);
87
88 res = ["abc"; "//a.b" ; "def"];
89 assert_checkequal(evstr(["""abc"""; """//a.b""" ; """def"""]), res);
90 assert_checkequal(evstr(["""abc"" // test"; """//a.b""" ; """def"""]), res);
91 assert_checkequal(evstr(["""abc // test"""]), "abc // test");
92 assert_checkequal(evstr(["""abc // test"" // comment"]), "abc // test");
93
94 //  Row of expressions:
95 assert_checkequal(evstr(["// test", "// test line 2"]), []);
96 assert_checkequal(evstr(["1 2", "// test", "3 4"]), [1 2 3 4]);
97 assert_checkequal(evstr(["1 // abc", "// no result", "3 // def"]), [1 3]);
98 assert_checkequal(evstr(["1 // abc", " // no result", "3 // def"]), [1 3]);
99 assert_checkequal(evstr(["1 // abc", "[] // no result", "3 // def"]), [1 3]);
100
101 ab = """ab""";
102 ht = """http://a.b""";
103 res = ["ab", "http://a.b", "ab // cd"];
104 assert_checkequal(evstr([ab, ht, """ab // cd"""]), res);
105 assert_checkequal(evstr([ab, ht+" // test", "''ab // cd''"]), res);
106 assert_checkequal(evstr([ab, ht+"// test", """ab // cd"""]), res);
107 assert_checkequal(evstr([ab, "''http://a.b'' // test", "''ab // cd''"]), res);
108 assert_checkequal(evstr(["// ab", """3"" // http://a.b", """ab // cd"""]), ["3" "ab // cd"]);
109 assert_checkequal(evstr(["// ab", """3"" ""//"" ""http://a.b""", """ab // cd"""]), ..
110   ["3" "//" "http://a.b" "ab // cd"]);
111 assert_checkequal(evstr([ab, ht, """ab // cd"""]), res);
112
113 //  Matrix of expressions:
114 assert_checkequal(evstr(["1;2 // A", "3;4 // B //"]), [1 3 ; 2 4]);
115 assert_checkequal(evstr(["1 2 // A"; "3 4 // B //"]), [1 2 ; 3 4]);
116 assert_checkequal(evstr(["1;2 // A", "3;4 // B //"; "5// C" "6// D"]), [1 3 ; 2 4 ; 5 6]);
117 assert_checkequal(evstr(["1 // un", "2 // deux"; "3 // trois", "4 // quatre"]), [1 2 ; 3 4]);
118
119 // Can't be easily fixed (but very permissive):
120 in = [" ""a""; ""b"" // A''b", " ""c""; ""d"" // E''F"];
121 assert_checkfalse(evstr(in)==["a" "c";"b" "d"]);
122 assert_checkequal(evstr(in), ["a" ; "b"]);