* Bug 16508: csvTextScan did not handle well complex data.
[scilab.git] / scilab / modules / ast / tests / unit_tests / insert.dia.ref
1 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
2 // Copyright (C) 2012 - Scilab Enterprises - Antoine ELIAS
3 //
4 // Copyright (C) 2012 - 2016 - Scilab Enterprises
5 //
6 // This file is hereby licensed under the terms of the GNU GPL v2.0,
7 // pursuant to article 5.3.4 of the CeCILL v.2.1.
8 // This file was originally licensed under the terms of the CeCILL v2.1,
9 // and continues to be available under such terms.
10 // For more information, see the COPYING file which you should have received
11 // along with this program.
12 //
13 //
14 // <-- CLI SHELL MODE -->
15 oldFuncProt = funcprot(0);
16 ref = [0 0 0 ; 0 1 4 ; 0 2 5];
17 a = zeros(3,3);a(:) = 1:9;
18 b(2:3, 2:3) = a(1:2,1:2);
19 assert_checkequal(b, ref);
20 a=2;
21 a.b=3;
22 assert_checkequal(a.b, 3);
23 a.b.c=4;
24 assert_checkequal(a.b.c, 4);
25 clear a
26 a.b = 2;
27 a.c = 3;
28 a.d = 4;
29 e.f = 7;
30 e.d = 55;
31 e.g = 12;
32 a(2) = e;
33 assert_checkequal(fieldnames(a(1)), fieldnames(a(2)));
34 assert_checkequal(a(1).d, 4);
35 assert_checkequal(a(2).d, 55);
36 clear a;
37 clear e;
38 a.a.a = -2;
39 assert_checkequal(a.a.a, -2);
40 a(2, 1:3, [2 6 7]).b = 12;
41 computed = a.b;
42 expected = list();
43 for i=1:(2*3*7)
44     expected(i) = [];
45 end
46 expected(8)  = 12;
47 expected(10) = 12;
48 expected(12) = 12;
49 expected(32) = 12;
50 expected(34) = 12;
51 expected(36) = 12;
52 expected(38) = 12;
53 expected(40) = 12;
54 expected(42) = 12;
55 assert_checkequal(a.b, expected);
56 clear a;
57 a(1,3).b = 2;
58 assert_checkequal(size(a), [1 3]);
59 a(5).b = 2;
60 assert_checkequal(size(a), [1 5]);
61 a(2,3).b = 2;
62 assert_checkequal(size(a), [2 5]);
63 clear a;
64 st.f.e = 22;
65 st.f(3).e = 112;
66 assert_checkequal(st.f.e, list(22, [], 112));
67 st.f(2).j = 1124;
68 assert_checkequal(st.f.j, list([], 1124, []));
69 st.f.e = 5;
70 assert_checkequal(st.f.e, list(5, 5, 5));
71 clear st;
72 //tlist
73 tl=tlist(["myTlist" "gg"], 22);
74 tll=tlist(["myTlOfTl" "tt"],tl);
75 a.b=tll;
76 a.b.tt(2) = 4;
77 assert_checkequal(a.b.tt(2), 4);
78 assert_checkequal(a.b.tt.gg, 4);
79 a.b.tt.gg = 5;
80 assert_checkequal(a.b.tt(2), 5);
81 assert_checkequal(a.b.tt.gg, 5);
82 clear a;
83 rl = rlist(%s,2);
84 a.b = [rl rl rl];
85 a.b(2) = [4 4 4];
86 assert_checkequal(a.b.num, [4 4 4]);
87 assert_checkequal(a.b.den, [2 2 2]);
88 clear a;
89 a.b = [rl rl rl];
90 %r_6 = %r_e;
91 a.b(1,2).num = 14;
92 assert_checkequal(a.b.num, [%s 14 %s]);
93 assert_checkequal(a.b.den, [2 2 2]);
94 a(2).b = [rl rl rl] * %s;
95 assert_checkequal(size(a), [2 1]);
96 assert_checkequal(a(2).b.num, [%s**2 %s**2 %s**2]);
97 err = execstr("a.b(1,3).num = 5;", "errcatch");
98 assert_checktrue(err <> 0);
99 a(3).b.num = 12;
100 assert_checkequal(a(3).b.num, 12);
101 execstr("a.b(1,1).num = -9;", "errcatch");
102 assert_checktrue(err <> 0);
103 clear a;
104 tt = tlist(["toto" "gg" "ff"] , 12, 13);
105 tt(3).c = 23;
106 assert_checkequal(tt.ff.c, 23);
107 tt(2).c = 22;
108 assert_checkequal(tt.gg.c, 22);
109 err = execstr("tt([2 3]).d = 99;", "errcatch");
110 assert_checktrue(err <> 0);
111 err = execstr("tt([2 3]).d.e = 98;", "errcatch");
112 assert_checktrue(err <> 0);
113 err = execstr("tt([2 3]).d(3).e = 78;", "errcatch");
114 assert_checktrue(err <> 0);
115 tt(2).d.e(4) = 12;
116 assert_checkequal(tt(2).d.e, [0; 0; 0; 12]);
117 tt(2).d(2).o = 15;
118 err = execstr("tt(2).d.e(4) = 16;", "errcatch");
119 assert_checktrue(err <> 0);
120 clear tt;
121 tl=tlist(["toto" "gg"],11);
122 function tutu(tl)
123     tl.gg = 12;
124     assert_checkequal(tl.gg, 12);
125 endfunction
126 tutu(tl);
127 assert_checkequal(tl.gg, 11);
128 clear tl;
129 // mlist
130 function varargout=%toto_e(varargin)
131     args = varargin(1);
132     ml = varargin($);
133     varargout = list();
134     for i=args
135         if i == 1
136             varargout($+1) = ["toto" "gg" "ff"];
137         elseif i == 2
138             varargout($+1) = ml.gg;
139         elseif i == 3
140             varargout($+1) = ml.ff;
141         end
142     end
143 endfunction
144 %toto_6 = %toto_e;
145 function r=%l_i_toto(varargin)
146     args = varargin(1);
147     l = varargin($-1);
148     r = varargin($);
149     for i=1:size(args, "*")
150         if args(i) == 2
151             r.gg = l(i);
152         elseif args(i) == 3
153             r.ff = l(i);
154         end
155     end
156 endfunction
157 function r=%st_i_toto(varargin)
158     args = varargin(1);
159     st = varargin($-1);
160     r = varargin($);
161     for i=args
162         if i == 2
163             r.gg = st;
164         elseif i == 3
165             r.ff = st;
166         end
167     end
168 endfunction
169 mm = tlist(["toto" "gg" "ff"] , 12, 13);
170 mm(3).c = 23;
171 assert_checkequal(mm.ff.c, 23);
172 mm(2).c = 22;
173 assert_checkequal(mm.gg.c, 22);
174 err = execstr("mm([2 3]).d = 99;", "errcatch");
175 assert_checktrue(err <> 0);
176 err = execstr("mm([2 3]).d.e = 98;", "errcatch");
177 assert_checktrue(err <> 0);
178 err = execstr("mm([2 3]).d(3).e = 78;", "errcatch");
179 assert_checktrue(err <> 0);
180 mm(2).d.e(4) = 12;
181 assert_checkequal(mm(2).d.e, [0; 0; 0; 12]);
182 mm(2).d(2).o = 15;
183 err = execstr("mm(2).d.e(4) = 16;", "errcatch");
184 assert_checktrue(err <> 0);
185 clear mm;
186 ml = mlist(["tutu" "t"], 12);
187 std=struct("d", 5);
188 stc=struct("c", 6);
189 a=std;
190 assert_checkequal(a, std);
191 a=stc;
192 assert_checkequal(a, stc);
193 ml.t = std;
194 assert_checkequal(ml.t.d, 5);
195 ml.t = stc;
196 assert_checkequal(ml.t.c, 6);
197 ml = mlist(["tutu" "t"], 12);
198 ml.t = 21;
199 assert_checkequal(ml.t, 21);
200 function r=%s_i_tutu(varargin)
201     s1=varargin($-1);
202     s2=varargin($);
203     r=s2;
204     r.t = s1;
205 endfunction
206 function r=%tutu_e(varargin)
207     r=varargin($).t;
208 endfunction
209 function r=%st_i_tutu(varargin)
210     s1=varargin($-1);
211     s2=varargin($);
212     //s2(i,j)=s1 s1 is a struct
213     r=s2;
214     r.t = s1;
215 endfunction
216 %tutu_6 = %tutu_e;
217 a.b = ml;
218 assert_checkequal(a.b(2), 21);
219 a.b(2) = stc;
220 assert_checkequal(a.b(2), stc);
221 a.b(2).c=44;
222 assert_checkequal(a.b(2).c, 44);
223 clear a;
224 //tlist/mlist
225 tl =tlist(["toto" "gg"], tlist(["tutu" "tt" "ee"], 22, 23));
226 tl(2)(3)=12;
227 assert_checkequal(tl.gg.ee, 12);
228 tl(2)(3)(4)=88;
229 assert_checkequal(tl.gg.ee, [12; 0; 0; 88]);
230 function r=%tata_e(varargin)
231     r=varargin($).ff;
232 endfunction
233 %tata_6 = %tata_e;
234 function r=%toto_i_tata(varargin)
235     s1=varargin($-1);
236     s2=varargin($);
237     r=s2;
238     r.ff = s1;
239 endfunction
240 ml = mlist(["tata" "ff"], tl);
241 assert_checkequal(ml.ff.gg.ee, [12; 0; 0; 88]);
242 ml(2)(2)(3) = 44;
243 assert_checkequal(ml.ff.gg.ee, 44);
244 clear tl;
245 // List
246 l=list();
247 // call insertion overload
248 err = execstr("l.x = 2;","errcatch");
249 assert_checkequal(err, 999);
250 st.l = list([1 2 3], "toto");
251 st.l = 44;
252 assert_checkequal(st.l, 44);
253 st.l = list([1 2 3], "toto");
254 st.l(3) = 55;
255 assert_checkequal(st.l(3), 55);
256 st.l(1)(2) = -2;
257 assert_checkequal(st.l(1), [1 -2 3]);
258 st.l(3) = tlist(["toto", "gg"], 112);
259 function r=%l_6(varargin)
260     r=[]
261     for in = varargin(2)
262         if type(in) == 16 // tlist
263             if find(varargin(1) == in(1)) <> [] // search field in tlist
264                 r = in(varargin(1));
265             end
266         end
267     end
268 endfunction
269 function l=%st_i_l(varargin)
270     l=list();
271     pos = 0;
272     for in = varargin(3)
273         pos = pos + 1;
274         if type(in) == 16 // tlist
275             in((varargin(1))) = varargin(2);
276         end
277         l(pos) = in;
278     end
279 endfunction
280 st.l.gg.c = 12;
281 assert_checkequal(st.l(1), [1 -2 3]);
282 assert_checkequal(st.l(2), "toto");
283 assert_checkequal(st.l(3).gg, struct("c", 12));
284 clear st;
285 st.l = list([1 2 3], "toto");
286 function r=%s_i_l(varargin)
287     r=struct(varargin(1), varargin(2)) ;
288 endfunction
289 st.l.c = 24;
290 assert_checkequal(st.l, struct("c", 24));
291 clear st;
292 // check error overload
293 errmsg = msprintf(gettext("%s: Affection of a string in a matrix of numbers is not implemented.\n"), "%c_i_s");
294 assert_checkerror("a=1;a(1,1)=""d""", errmsg);
295 // list delete
296 tl = tlist(["toto" "gg" "ff" "uu"], 45, 89, 87);
297 tl(2) = null();
298 assert_checkequal(tl(1), ["toto" "gg" "ff" "uu"]);
299 assert_checkequal(tl(2), 89);
300 assert_checkequal(tl(3), 87);
301 tl = tlist(["toto" "gg" "ff" "uu"], 45, 89, 87);
302 // call overload
303 err = execstr("tl.gg = null();","errcatch");
304 assert_checkequal(err, 999);
305 function l=%0_i_toto(varargin)
306     idx = find(varargin(3)(1) == varargin(1));
307     l = varargin(3);
308     l(idx) = null();
309 endfunction
310 tl.gg = null();
311 assert_checkequal(tl(1), ["toto" "gg" "ff" "uu"]);
312 assert_checkequal(tl(2), 89);
313 assert_checkequal(tl(3), 87);
314 clear tl;
315 l = list(["toto" "gg" "ff" "uu"], 45, 89, 87);
316 l(2) = null();
317 assert_checkequal(l(1), ["toto" "gg" "ff" "uu"]);
318 assert_checkequal(l(2), 89);
319 assert_checkequal(l(3), 87);
320 l = list(["toto" "gg" "ff" "uu"], 45, 89, 87);
321 // call overload
322 err = execstr("l.gg = null();","errcatch");
323 assert_checkequal(err, 999);
324 clear l;
325 // cell
326 function varargout=%toto_e(varargin)
327     args = varargin(1);
328     ml = varargin($);
329     varargout = list();
330     for i=args
331         if i == 1
332             varargout($+1) = ["toto" "ff"];
333         elseif i == 2
334             varargout($+1) = ml.ff;
335         end
336     end
337 endfunction
338 %toto_6 = %toto_e;
339 function ml=%s_i_toto(varargin)
340     args = varargin(1);
341     s = varargin($-1);
342     ml = varargin($);
343     for i=1:size(args, "*")
344         if args(i) == 2
345             ml.ff = s;
346         end
347     end
348 endfunction
349 tl = tlist(["tutu" "gg"], 12);
350 ml = mlist(["toto" "ff"], 22);
351 a{2} = 2;
352 assert_checkequal(a{2}, 2);
353 a{1,3} = tl;
354 assert_checkequal(a{5}(1), ["tutu" "gg"]);
355 assert_checkequal(a{5}(2), 12);
356 a{[3 6]} = ml;
357 assert_checkequal(a{3}(1), ["toto" "ff"]);
358 assert_checkequal(a{3}(2), 22);
359 assert_checkequal(a{6}(1), ["toto" "ff"]);
360 assert_checkequal(a{6}(2), 22);
361 a{2}.c = 123;
362 assert_checkequal(a{2}.c, 123);
363 a{2}(3).e = 12;
364 assert_checkequal(a{2}.e, list([], [], 12));
365 assert_checkequal(a{2}.c, list(123, [], []));
366 a{2}.b = 12;
367 assert_checkequal(a{2}.b, list(12, 12, 12));
368 a{2}.e = 99;
369 assert_checkequal(a{2}.e, list(99, 99, 99));
370 a{6}(2) = 8;
371 assert_checkequal(a{6}(1), ["toto" "ff"]);
372 assert_checkequal(a{6}(2), 8);
373 a{1, [1 3]}.gg = 14;
374 assert_checkequal(a{1}.gg, 14);
375 assert_checkequal(a{5}.gg, 14);
376 a{1:2, [1 3], 2}.g = "A string";
377 assert_checkequal(a{7}.g, "A string");
378 assert_checkequal(a{8}.g, "A string");
379 assert_checkequal(a{11}.g, "A string");
380 assert_checkequal(a{12}.g, "A string");
381 clear a;
382 a{1,3}.b = 2;
383 assert_checkequal(size(a), [1 3]);
384 a{5}.b = 2;
385 assert_checkequal(size(a), [1 5]);
386 a{2,3}.b = 2;
387 assert_checkequal(size(a), [2 5]);
388 clear a;
389 a{1,3} = 2;
390 assert_checkequal(size(a), [1 3]);
391 a{5} = 2;
392 assert_checkequal(size(a), [1 5]);
393 a{2,3} = 2;
394 assert_checkequal(size(a), [2 5]);
395 clear a;
396 tl = tlist(["mytlist", "f1"], 12);
397 ml = mlist(["mymlist", "f"], tl);
398 mml = mlist(["mymmlist", "ff1"], ml);
399 mml(list("ff1", "f", 2)) = 14;
400 assert_checkequal(tl.f1, 12);
401 assert_checkequal(ml.f.f1, 12);
402 assert_checkequal(mml.ff1.f.f1, 14);
403 funcprot(oldFuncProt);
404 // multiple insertion in struct
405 function r = initst()
406     r.f.e = list()
407     r.f(3).e = 3
408 endfunction
409 st=initst();
410 st.f(:).e = 5;
411 assert_checkequal(st.f.e, list(5,5,5));
412 st=initst();
413 st.f(1:4).e = 5;
414 assert_checkequal(st.f.e, list(5,5,5,5));
415 st=initst();
416 err=execstr("st.f(1:2).e(2) = 5;", "errcatch");
417 assert_checktrue(err <> 0);
418 st=initst();
419 err=execstr("st(1:2).f(1:4).e = 5;", "errcatch");
420 assert_checktrue(err <> 0);
421 // insert without arguments
422 errmsg = msprintf(gettext("Wrong insertion : Cannot insert without arguments."));
423 assert_checkerror("a()=1;", errmsg);
424 assert_checkerror("a{}=1;", errmsg);
425 a=1;
426 assert_checkerror("a()=1;", errmsg);