Add support for multiple return values to the ERRSET macro
[maxima.git] / tests / rtest_mset.mac
blobbb2a4cdee2a144370a797756748a53325acd0ecd
1 (kill (all), 0);
2 0;
4 (x : 123, y : abc, 0);
5 0;
7 defstruct (f (x, y, z));
8 '[f (x, y, z)];
10 myrecord : new (f);
11 '(f (x, y, z));
13 myrecord@y : 45;
14 45;
16 myrecord;
17 '(f (x, 45, z));
19 [x, y, z, myrecord@x, myrecord@y, myrecord@z];
20 '[123, abc, z, myrecord@x, 45, myrecord@z];
22 ('(myrecord@y), [op (%%), args (%%)]);
23 '["@", [myrecord, y]];
25 (kill (y), myrecord@y);
26 45;
28 [kill (f), errcatch (new (f)), errcatch (myrecord@x)];
29 [done, [], [f(x, 45, z)@x]];
31 defstruct (f (x, y=3.14159, z));
32 '[f(x, 3.14159, z)];
34 ff : new (f);
35 '(f (x, 3.14159, z));
37 (ff@y : 2.71828, ff);
38 '(f (x, 2.71828, z));
40 k : h (g (aa, bb), cc);
41 '(h (g (aa, bb), cc));
43 errcatch (k@1@2 : dd);
44 [];
46 defstruct (h (xx, yy), g (uu, vv));
47 '[h (xx, yy), g (uu, vv)];
49 (k@1@2 : dd, k);
50 '(h (g (aa, dd), cc));
52 x : new (h);
53 '(h (xx, yy));
55 x@yy : new (g);
56 g (uu, vv);
59 h (xx, g (uu, vv));
61 x@yy@vv : 123;
62 123;
65 h (xx, g (uu, 123));
67 (yy : %i, vv : 1/2, 0);
70 [x@yy, x@yy@vv];
71 '[g (uu, 123), 123];
73 string ('(x@yy + x@yy@vv));
74 "x@yy@vv+x@yy";
76 (kill (x@yy@vv), [x, x@yy, x@yy@vv]);
77 '[h (xx, g (uu, vv)), g (uu, vv), x@yy@vv];
79 (kill (x@yy), [x, x@yy]);
80 '[h (xx, yy), x@yy];
82 (kill (x), x);
83 'x;
85 block ([uu0 : 123, vv0 : 456], x : new (h (new (g), new (g (uu0, vv0)))));
86 '(h (g (uu, vv), g (123, 456)));
88 ([a00, a01, b00, b01] : [123, 456, 789, 987],
89  block ([a0 : '(a00 + a01), b0 : '(b00 + b01)], defstruct (foo (a = a0, b = b0))));
90 '[foo (a00 + a01, b00 + b01)];
92 y : new (foo);
93 '(foo (a00 + a01, b00 + b01));
95 ev (y);
96 foo (123 + 456, 789 + 987);
98 /* IN FOLLOWING EXAMPLES QUOTE SHOULD BE UNNECESSARY !!
99  * CHANGE $EV CODE TO MAKE IT WORK OK WITHOUT QUOTE !!
100  */
102 ev (sin (x@xx + 1), '(x@xx)=%e);
103 sin (%e + 1);
105 ev (sin (x@yy@uu + 1), '(x@yy@uu)=%i);
106 sin (%i + 1);
109 '(h (g (uu, vv), g (123, 456)));
111 (kill (all), 0);
114 [a, b, c]: [x, y, z];
115 [x, y, z];
117 [x, y, z]: [11, 22, 33];
118 [11, 22, 33];
120 [''a, ''b, ''c];
121 [11, 22, 33];
123 [x, y, z]: x*y*z;
124 [7986, 7986, 7986];
126 [x, y, z];
127 [7986, 7986, 7986];
129 (kill (a, b), [a, b]: [b, 2*a]);
130 '[b, 2*a];
132 [a, b]: [b, 2*a];
133 '[2*a, 2*b];
135 [a, b]: [b, 2*a];
136 '[2*b, 4*a];
138 [a, b]: [b, 2*a];
139 '[4*a, 4*b];
141 [a, b]: [b, 2*a];
142 '[4*b, 8*a];
144 (kgcd(a, b) := (while b#0 do [a, b]: [b, remainder(a, b)], abs(a)), kgcd(11*7*5*3, 17*13*11*7));
145 ''(gcd (11*7*5*3, 17*13*11*7));
147 (i:10, j:20, [i, j] : [j, i]);
148 [20, 10];
150 [i, j];
151 [20, 10];
153 /* QUESTIONABLE. MAYBE THIS ONE SHOULD CAUSE AN ERROR */
154 [i, i] : [1, 2];
155 [1, 2];
157 /* QUESTIONABLE. MAYBE PRECEDING ASSIGNMENT SHOULD HAVE FAILED */
161 a : [1, 2, 3, 4];
162 [1, 2, 3, 4];
164 (i : 2, [i, a[i]] : [4, 11]);
165 [4, 11];
168 [1, 11, 3, 4];
170 [ a[1], a[2] ] : [ a[3], a[4] ];
171 [3, 4];
174 [3, 4, 3, 4];
176 (a : [1, 2, 3, 4], i:0, [ a[i : i + 1], a[i : i + 1] ] : [ a[i : i + 1], a[i : i + 1] ]);
177 [1, 2];
180 [1, 2, 1, 2];
182 [a, [b, c], [[d, e], f]] : [1, [2, 3], [[4, 5], 6]];
183 [1, [2, 3], [[4, 5], 6]];
185 [a, b, c, d, e, f];
186 [1, 2, 3, 4, 5, 6];
188 /* NEED TESTS FOR :: HERE */
190 (L : '[a, b, c], L :: [11, 22, 33], [a, b, c]);
191 [11, 22, 33];
193 /* example from mailing list 2014-02-27 "assigning to a list of structure fields does not work" */
195 (kill (P, N, D, Quot), defstruct(Quot(N,D=1)), P:new(Quot));
196 Quot(N, 1);
198 [P@N,P@D]:[3,7];
199 [3, 7];
202 Quot(3, 7);
204 /* some more tests */
206 kill (x, y, z, a, b, c, d);
207 done;
209 (x : [a, b], y : [c, d], 0);
212 [x, y] :: [[1, 2], [3, 4]];
213 [[1, 2], [3, 4]];
215 [a, b, c, d];
216 [1, 2, 3, 4];
218 [x[1], y[1]] :: [11, 22];
219 [11, 22];
221 [x, y, a, b, c, d];
222 [[a, b], [c, d], 11, 2, 22, 4];
224 [x[1], y[1]] : [33, 44];
225 [33, 44];
227 [x, y, a, b, c, d];
228 [[33, b], [44, d], 11, 2, 22, 4];
230 (kill (foo), defstruct (foo (a, b)));
231 [foo (a, b)];
233 z : new (foo (-1, -2));
234 foo (-1, -2);
236 [z@b, z@a] : [-3, -4];
237 [-3, -4];
240 foo (-4, -3);
242 kill (a, b);
243 done;
245 [a[123], b[456]] : [17, 29];
246 [17, 29];
251 a[123];
254 [arrayinfo (a), listarray (a)];
255 [[hashed, 1, [123]], [17]];
257 [arrayinfo (b), listarray (b)];
258 [[hashed, 1, [456]], [29]];
260 [c[321], d[654]] : [19, 31];
261 [19, 31];
263 [c, d];
264 [22, 4];
266 [arrayinfo (c), arrayinfo (d)];
267 [[hashed, 1, [321]], [hashed, 1, [654]]];
269 [listarray ('c), listarray ('d)];
270 [[19], [31]];
272 [a, [b, [c, [d, [x, [y, [z]]]]]]] : [-1, [-2, [-3, [-4, [-5, [-6, [-7]]]]]]];
273 [-1, [-2, [-3, [-4, [-5, [-6, [-7]]]]]]];
275 [a, b, c, d, x, y, z];
276 [-1, -2, -3, -4, -5, -6, -7];
278 (hash_assign (e, x) := ?marrayset (x, ?meval (first (e)), ?meval (second (e))),
279  translate (hash_assign), /* mset extension op must be a Lisp function */
280  infix ("hash_get"),
281  ?putprop (verbify ("hash_get"), 'hash_assign, '?mset_extension_operator),
282  0);
285 (foo [bar] : 123,
286  foo hash_get bar : 456,
287  foo [bar]);
288 456;
290 [foo hash_get baz] : 789;
291 [789];
293 foo [baz];
294 789;
296 /* bug reported to mailing list 2017-02-02: "Structs broken?" */
298 (kill (all),
299  reset (),
300  defstruct (foo (a, b)),
301  bar : new (foo),
302  aa : make_array (fixnum, 6),
303  bar@a : aa,
304  0);
307 (bar@a[4] : 123,
308  listarray (aa));
309 [0, 0, 0, 0, 123, 0];
311 ?arrayp (bar@a);
312 true;
314 listarray (bar@a);
315 [0, 0, 0, 0, 123, 0];
317 (bb : make_array (fixnum, 6),
318  f(i) := if i = 1 then aa elseif i = 2 then bb,
319  0);
322 (f(2)[5] : 456,
323  listarray (bb));
324 [0, 0, 0, 0, 0, 456];
326 ?arrayp (f(2));
327 true;
329 listarray (f(2));
330 [0, 0, 0, 0, 0, 456];
332 (l : [aa, bb],
333  0);
336 (l[2][1] : 789,
337  listarray (bb));
338 [0, 789, 0, 0, 0, 456];
340 ?arrayp (l[2]);
341 true;
343 listarray (l[2]);
344 [0, 789, 0, 0, 0, 456];
346 (h1[mumble] : aa,
347  h1[blurf] : bb,
348  0);
351 (h1[mumble][3] : 333,
352  listarray (aa));
353 [0, 0, 0, 333, 123, 0];
355 ?arrayp (h1[mumble]);
356 true;
358 listarray (h1[mumble]);
359 [0, 0, 0, 333, 123, 0];
361 (use_fast_arrays : true,
362  h2[mumble] : aa,
363  h2[blurf] : bb,
364  0);
367 (h2[blurf][2] : 555,
368  listarray (bb));
369 [0, 789, 555, 0, 0, 456];
371 ?arrayp (h2[blurf]);
372 true;
374 listarray (h2[blurf]);
375 [0, 789, 555, 0, 0, 456];
377 (reset(use_fast_arrays),1);