root/trunk/tests/interpreter.md

Revision 243, 6.0 kB (checked in by JarrettBillingsley, 1 year ago)

--

Line 
1 module tests.interpreter;
2
3 class A
4 {
5     foo;
6
7     function opAdd() { return this; }
8     function opNeg() { return this; }
9     function opAddAssign() {}
10     function opAnd() { return this; }
11     function opCom() { return this; }
12     function opAndAssign() {}
13     function opCmp() { return 0; }
14     function opIn() { return true; }
15     function opLength() { return 0; }
16     function opSlice() { return this; }
17     function opSliceAssign() {}
18     function opCat() { return this; }
19     function opCatAssign() {}
20 }
21
22 class B
23 {
24     function opCmp() { return "NOWAI"; }
25 }
26
27 class C {}
28
29 // binOp
30 local x = 5;
31 local y = 10;
32 local z = x + y;
33 z = x - y;
34 z = x * y;
35 z = x / y;
36 z = x % y;
37 z = x + 1.0;
38 z = x - 1.0;
39 z = x * 1.0;
40 z = x / 1.0;
41 z = x % 1.0;
42 z = 1.0 * x;
43 z = toFloat(x) * 1.0;
44 try z = x / 0; catch(e){}
45 try z = x % 0; catch(e){}
46 z = A() + x;
47 try z = B() + x; catch(e){}
48
49 // unOp
50 z = -x;
51 z = -toFloat(x);
52 z = -A();
53 try z = -B(); catch(e){}
54
55 // reflOp
56 z = 0;
57 z += y;
58 z -= y;
59 z *= y;
60 z /= y;
61 z %= y;
62 z += 1.0;
63 z -= 1.0;
64 z *= 1.0;
65 z /= 1.0;
66 z %= 1.0;
67 z = 1.0;
68 z *= x;
69 z *= 1.0;
70 z = 1;
71 try z /= 0; catch(e){}
72 try z %= 0; catch(e){}
73 z = A();
74 z += 3;
75 z = B();
76 try z += x; catch(e){}
77
78 // binaryBinOp
79 x = 5;
80 y = 10;
81 z = x & y;
82 z = x | y;
83 z = x ^ y;
84 z = x << y;
85 z = x >> y;
86 z = x >>> y;
87 z = A() & x;
88 try z = B() & x; catch(e){}
89
90 // binaryUnOp
91 z = ~x;
92 z = ~A();
93 try z = ~B(); catch(e){}
94
95 // reflOp
96 z = 0;
97 z &= y;
98 z |= y;
99 z ^= y;
100 z <<= y;
101 z >>= y;
102 z >>>= y;
103 z = A();
104 z &= 3;
105 z = B();
106 try z &= x; catch(e){}
107
108 // comparison
109 x = 3;
110 y = 4.5;
111 z = x < 3;
112 z = x < y;
113 z = y < 3;
114 z = y < 3.5;
115 x = null;
116 z = x == null;
117 x = true;
118 z = x == true;
119 x = 'h';
120 z = x == 'h';
121 x = "hi";
122 z = x == "hi";
123 y = (x ~ "bye")[0 .. 2];
124 z = y == "hi";
125 x = A();
126 z = x == A();
127 z = x == 5;
128 x = B();
129 try z = x == B(); catch(e){}
130 try z = x == 5; catch(e){}
131 try z = C() == 5; catch(e){}
132
133 // in
134 x = "hello";
135 z = 'h' in x;
136 z = 'h' !in x;
137 try z = 5 in x; catch(e){}
138 x = [1, 2, 3];
139 z = 2 in x;
140 x = {x = 5};
141 z = "x" in x;
142 x = namespace foo { x = 5; };
143 z = "x" in x;
144 try z = 5 in x; catch(e){}
145 z = 5 in A();
146 try z = 5 in B(); catch(e){}
147
148 // length
149 x = "hi";
150 z = #x;
151 x = [1, 2, 3];
152 z = #x;
153 x = A();
154 z = #x;
155 try z = #A; catch(e){}
156
157 // index
158 x = [1, 2, 3];
159 z = x[0];
160 z = x[-1];
161 try z = x[10]; catch(e){}
162 try z = x['h']; catch(e){}
163 x = "hi";
164 z = x[0];
165 z = x[-1];
166 z = x[-1];
167 try z = x[10]; catch(e){}
168 try z = x['h']; catch(e){}
169 x = {x = 5};
170 z = x.x;
171 z = x.y;
172 x.opIndex = function(){};
173 z = x.y;
174 try z = x[null]; catch(e){}
175 x = A();
176 z = x.foo;
177 try z = x['h']; catch(e){}
178 try z = x.y; catch(e){}
179 x = A;
180 z = x.foo;
181 try z = x['h']; catch(e){}
182 try z = x.y; catch(e){}
183 x = namespace X { foo; };
184 z = x.foo;
185 try z = x['h']; catch(e){}
186 try z = x.y; catch(e){}
187 x = 5;
188 try z = x[5]; catch(e){}
189
190 // index assign
191 x = [1, 2, 3];
192 x[0] = 5;
193 x[-1] = 5;
194 try x[10] = 5; catch(e){}
195 try x['h'] = 5; catch(e){}
196 x = {x = 5};
197 x.x = 5;
198 x.y = 5;
199 x.y = null;
200 x.opIndexAssign = function(){};
201 x.y = 5;
202 try x[null] = 5; catch(e){}
203 x = A();
204 x.foo = 5;
205 try x['h'] = 5; catch(e){}
206 try x.y = 5; catch(e){}
207 x = A;
208 x.foo = 5;
209 try x['h'] = 5; catch(e){}
210 x = namespace X { foo; };
211 x.foo = 5;
212 try x['h'] = 5; catch(e){}
213 x = 5;
214 try x[5] = 5; catch(e){}
215
216 // slice
217 x = [1, 2, 3];
218 z = x[..];
219 z = x[..1];
220 z = x[-1..];
221 z = x[..-1];
222 try z = x['a'..]; catch(e){}
223 try z = x[..'a']; catch(e){}
224 try z = x[101259 .. 12058901]; catch(e){}
225 x = "hello";
226 z = x[..];
227 z = x[..1];
228 z = x[-1..];
229 z = x[..-1];
230 try z = x['a'..]; catch(e){}
231 try z = x[..'a']; catch(e){}
232 try z = x[101259 .. 12058901]; catch(e){}
233 x = A();
234 z = x[..];
235
236 // slice assign
237 x = [1, 2, 3];
238 x[..] = 5;
239 x[..1] = 5;
240 x[-1..] = 5;
241 x[..-1] = 5;
242 x[..] = [4, 5, 6];
243 try x['a'..] = 5; catch(e){}
244 try x[..'a'] = 5; catch(e){}
245 try x[101259 .. 12058901] = 5; catch(e){}
246 try x[..] = []; catch(e){}
247 x = A();
248 x[..] = 5;
249
250 // method lookup
251 x = A();
252 x.opIn();
253 try x.oasf(); catch(e){}
254 x = { function foo(){} };
255 x.foo();
256 try x.oasf(); catch(e){}
257 x = namespace X { function foo(){} };
258 x.foo();
259 try x.oasf(); catch(e){}
260 x = A;
261 x.opIn();
262 try x.oasf(); catch(e){}
263 x = 5;
264 try x.foo(); catch(e){}
265 x = [];
266 x.sort();
267
268 // cat
269 x = [1, 2, 3];
270 z = x ~ 5;
271 x = "hi";
272 try z = x ~ 5; catch(e){}
273 z = 3 ~ 4;
274 x = A();
275 z = x ~ 5;
276
277 // cat assign
278 x = [1, 2, 3];
279 x ~= 5;
280 x = "hi";
281 x ~= 'c';
282 try x ~= 5; catch(e){}
283 x = A();
284 x ~= 5;
285 x = B();
286 try x ~= 5; catch(e){}
287
288 // etc
289 global XX = 5;
290 XX = 10;
291 z = null;
292 z ?= 5;
293 z ?= 5;
294 try global XX = 10; catch(e){}
295 z = !x;
296 x = 5;
297 z = x < 10;
298 z = x <= 10;
299 z = x == 10;
300 z = x > 10;
301 z = x >= 10;
302 z = x != 10;
303 z = x <=> 10;
304 z = x is 10;
305 z = x !is 10;
306 if(x){}else{}
307 if(!x){}else{}
308
309 for(i: 0 .. 10, 3){}
310 for(i: 0 .. 10, -3){}
311 for(i: 10 .. 0){}
312 x = 0;
313 try for(i: 0 .. 10, x){} catch(e){}
314 x = null;
315 try for(i: x .. x){} catch(e){}
316
317 switch(5) { case 5: break; }
318 switch(5) { case 0: default: break; }
319 try switch(5) { case 3: break; } catch(e){}
320
321 try{}catch(e){}finally{}
322 try try throw "hi!"; finally{} catch(e){}
323
324 (function()
325 {
326     try
327         return 5;
328     finally {}
329 })();
330
331 (function()
332 {
333     try
334         try
335             return 5;
336         finally {}
337     finally {}
338 })();
339
340 function F(vararg)
341 {
342     local x, y = vararg;
343     return vararg;
344 }
345
346 A.opIn(F());
347 F(F(5));
348 F(with null);
349
350 x = [1, F(5)];
351 x = 5 ~ F(5);
352 x = [];
353 x ~= F(5);
354
355 x = class : A{};
356 try x = class : 5 {}; catch(e){}
357
358 x = namespace X {};
359 z = namespace Z : x {};
360 try z = namespace Z : 5 {}; catch(e){}
361
362 x = A();
363 z = x as A;
364 z = x as B;
365 y = 0;
366 try z = x as y; catch(e){}
367 z = x.super;
368 z = A.super;
369 try z = "hi".super; catch(e){}
370 z = x.class;
371 try z = "hi".class; catch(e){}
372
373 function Foo()
374 {
375     local asf = x;
376
377     function bar()
378     {
379         return asf + x;
380     }
381
382     return bar;
383 }
384
385 Foo();
386
387 x = coroutine function()
388 {
389     yield(5);
390     yield(F());
391 };
392
393 x();
394 x();
395
396 try y = coroutine 5; catch(e){}
397
398 x = coroutine function()
399 {
400     (class
401     {
402         function opIndexAssign()
403         {
404             yield(5);
405         }
406     })()[5] = 10;
407 };
408
409 try x(); catch(e){}
410
411 try
412     return;
413 finally {}
Note: See TracBrowser for help on using the browser.