* Bugs 15260 16124 fixed: sci2exp() for non-scalar structures or {}
[scilab.git] / scilab / modules / string / tests / nonreg_tests / bug_15260.tst
1 // =============================================================================
2 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3 // Copyright (C) 2017, 2019 - Samuel GOUGEON
4 //
5 //  This file is distributed under the same license as the Scilab package.
6 // =============================================================================
7 //
8 // <-- CLI SHELL MODE -->
9 // <-- NO CHECK REF -->
10 // <-- Non-regression test for bug 15260 -->
11 //
12 // <-- Bugzilla URL -->
13 // http://bugzilla.scilab.org/15260
14 //
15 // <-- Short Description -->
16 // sci2exp() was broken for all types of hypermatrix, simple structure or
17 //  arrays of structures, and simple cell or arrays of cells.
18
19 // Hypermatrix of booleans
20 b = rand(4,5,3,2)<0.5;
21 tb = sci2exp(b);
22 assert_checkequal(evstr(tb), b);
23
24 // Hypermatrix of encoded integers
25 i = int8(rand(4,5,3,2)*100);
26 ti = sci2exp(i);
27 assert_checkequal(evstr(ti), i);
28
29 // Hypermatrix of complex numbers
30 c = rand(4,5,3,2) + rand(4,5,3,2)*%i;
31 tc = sci2exp(c);
32 assert_checkalmostequal(evstr(tc), c, 1e-7, 1e-7);
33
34 // Hypermatrix of complex polynomials
35 p = (rand(4,5,3) + rand(4,5,3)*%i - %z).^fix(rand(4,5,3)*4);
36 tp = sci2exp(p);
37 z = %z;
38 rp = evstr(tp);
39 r = clean(rp-p, 1e-7);
40 assert_checkequal(sum(abs(r)),0*%z);
41
42 // Hypermatrix of strings
43 s = string(rand(4,5,3,2)*100);
44 ts = sci2exp(s);
45 assert_checkequal(evstr(ts), s);
46
47 // Array of cells
48 c = {1,%t,"A",%z,%i,0,list(2,"B"),"B",%f,3.1415,"abc",list(%i,"cat")};
49 c = matrix(c, [2 3 1 2]);
50 tc = sci2exp(c);
51 z = %z;
52 rc = evstr(tc);
53 assert_checkequal(rc,c);
54
55 // Structures:
56 // ----------
57 // Scalar:
58 s = struct("r",1.234-5.6*%i,"b",%f,"t","Hello","i",int8([123 -76]),"l",list(4,,%i));
59 ss = sci2exp(s);
60 ssref = "struct(""r"",1.234-%i*5.6, ""b"",%f, ""t"",""Hello"", ""i"",int8([123,-76]), ""l"",list(4,,%i))";
61 assert_checkequal(ss, ssref);
62 assert_checkequal(evstr(ss), s);
63 // Array:
64 s = struct("à", {3.1415,%t,"abc";%z,1-1/%s,%i}, "é",{2.7183,3,"test"; %z^2,list(,7),-%i});
65 ssref = "matrix(struct(""à"",{3.1415,%z,%t,rlist(-1+%s,%s),""abc"",%i}, ""é"",{2.7183,%z^2,3,list(,7),""test"",-%i}),[2 3])";
66 assert_checkequal(sci2exp(s), ssref);
67 assert_checkequal(evstr(ssref), s);