* Bug 15260 fixed: sci2exp broken for all cells structs and hypermats
[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 - 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 // Scalar structure:
56 s = struct("r",1.234-5.6*%i,"b",%f,"t","Hello","i",int8([123 -76]),"l",list(4,,%i));
57 ss = sci2exp(s);
58 ssref = "struct(""r"",1.234-%i*5.6, ""b"",%f, ""t"",""Hello"", ""i"",int8([123,-76]), ""l"",list(4,,%i))";
59 assert_checkequal(ss, ssref);
60 assert_checkequal(evstr(ss), s);
61
62 // Array of structures
63 // =======================================================================
64 // There is no longer any way to generate nand initialize from scratch any
65 //  non-scalar array of structures.
66 // =======================================================================
67 // This part shall be rewritten when struct(dims,field1,listOfValues1, ..)
68 // will have been implemented (= bug http://bugzilla.scilab.org/15264 fixed)
69 clear s
70 s.r = 1.2345;
71 s(1,2).r = %i;
72 s(2,2).r = 1-%i;
73 s(2,1).r = 2.345;
74 s.t = "A";
75 s(1,2).t = "C";
76 s(2,2).t = "D";
77 s(2,1).t = "B";
78 tmpref = mlist(["st","dims","r","t"],int32([2,2]),list(1.2345,2.345,%i,1-%i),list("A","B","C","D"));
79 ssref = "mlist([""st"",""dims"",""r"",""t""],int32([2,2]),list(1.2345,2.345,%i,1-%i),list(""A"",""B"",""C"",""D""))";
80 assert_checkequal(sci2exp(s), ssref);
81 assert_checkequal(evstr(sci2exp(s)), tmpref);