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