tagged release 0.7.1
[parrot.git] / t / compilers / imcc / syn / op.t
blob52a1d2c3957653c5cf00fe6869d7de7838c28575
1 #!perl
2 # Copyright (C) 2001-2006, The Perl Foundation.
3 # $Id$
5 use strict;
6 use warnings;
7 use lib qw( . lib ../lib ../../lib );
9 use Test::More;
10 use Parrot::Config;
11 use Parrot::Test tests => 32;
13 pir_output_is( <<'CODE', <<'OUT', "+=" );
14 .sub test :main
15     $I0 = 10
16     $I0 += 20
17     print $I0
18     print "\n"
20     $I0 += -20
21     print $I0
22     print "\n"
23     end
24 .end
25 CODE
28 OUT
30 pir_output_is( <<'CODE', <<'OUT', "-=" );
31 .sub test :main
32     $I0 = 10
33     $I0 -= 20
34     print $I0
35     print "\n"
37     $I0 -= -20
38     print $I0
39     print "\n"
40     end
41 .end
42 CODE
43 -10
45 OUT
47 pir_output_is( <<'CODE', <<'OUT', "*=" );
48 .sub test :main
49     $I0 = 10
50     $I0 *= 20
51     print $I0
52     print "\n"
54     $I0 *= -2
55     print $I0
56     print "\n"
57     end
58 .end
59 CODE
60 200
61 -400
62 OUT
64 pir_output_is( <<'CODE', <<'OUT', "/=" );
65 .sub test :main
66     $I0 = 20
67     $I0 /= 2
68     print $I0
69     print "\n"
71     $N0 = 20
72     $N0 /= .5
73     $I0 = $N0
74     print $I0
75     print "\n"
77     end
78 .end
79 CODE
82 OUT
84 pir_output_is( <<'CODE', <<'OUT', "%=" );
85 .sub test :main
86     $I0 = 20
87     $I0 %= 7
88     print $I0
89     print "\n"
91     $I0 = 200
92     $I0 %= 2
93     print $I0
94     print "\n"
95     end
96 .end
97 CODE
102 pir_output_is( <<'CODE', <<'OUT', ".=" );
103 .sub test :main
104     $S0 = "ab"
105     $S0 .= "cd"
106     print $S0
107     print "\n"
109     $S0 .= ""
110     print $S0
111     print "\n"
112     end
113 .end
114 CODE
115 abcd
116 abcd
119 pir_output_is( <<'CODE', <<'OUT', "&=" );
120 .sub test :main
121     $I0 =  0b1011
122     $I0 &= 0b1000
123     print $I0
124     print "\n"
126     $I0 &= 0b0000
127     print $I0
128     print "\n"
129     end
130 .end
131 CODE
136 pir_output_is( <<'CODE', <<'OUT', "|=" );
137 .sub test :main
138     $I0 =  0b1011
139     $I0 |= 0b1000
140     print $I0
141     print "\n"
143     $I0 |= 0b0100
144     print $I0
145     print "\n"
146     end
147 .end
148 CODE
153 pir_output_is( <<'CODE', <<'OUT', "~=" );
154 .sub test :main
155     $I0 =  0b1011
156     $I0 ~= 0b1000
157     print $I0
158     print "\n"
160     $I0 ~= 0b0011
161     print $I0
162     print "\n"
163     end
164 .end
165 CODE
170 pir_output_is( <<'CODE', <<'OUT', ">>=" );
171 .sub test :main
172     $I0 =  0b1011
173     $I0 >>= 1
174     print $I0
175     print "\n"
176     end
177 .end
178 CODE
182 pir_output_is( <<'CODE', <<'OUT', ">>>=" );
183 .sub test :main
184     $I0 =  0b1011
185     $I0 >>>= 1
186     print $I0
187     print "\n"
188     end
189 .end
190 CODE
194 pir_output_is( <<'CODE', <<'OUT', "<<=" );
195 .sub test :main
196     $I0 =  0b1011
197     $I0 <<= 1
198     print $I0
199     print "\n"
200     end
201 .end
202 CODE
206 pir_output_is( <<'CODE', <<'OUT', "x = defined" );
207 .sub test :main
208     .local pmc a
209     a = new 'ResizablePMCArray'
210     push a, 10
211     $I0 = defined a
212     print $I0
213     $I0 = defined a[0]
214     print $I0
215     $I0 = defined a[1]
216     print $I0
217     print "\n"
218     end
219 .end
220 CODE
224 pir_output_is( <<'CODE', <<'OUT', "x = clone" );
225 .sub test :main
226     .local pmc a
227     a = new 'Integer'
228     a = 10
229     .local pmc b
230     b = clone a
231     print b
232     print "\n"
233     end
234 .end
235 CODE
239 pir_output_is( <<'CODE', <<'OUT', "x = length" );
240 .sub test :main
241     .local string s
242     s = "abc"
243     $I0 = length s
244     print $I0
245     print "\n"
247     s = ""
248     $I0 = length s
249     print $I0
250     print "\n"
251     end
252 .end
253 CODE
258 pir_output_is( <<'CODE', <<'OUT', "x = sin" );
259 .sub test :main
260     $N0 = sin 0
261     print $N0
262     print "\n"
263     end
264 .end
265 CODE
266 0.000000
269 pir_output_is( <<'CODE', <<'OUT', "x = can" );
270 .sub test :main
271     $P0 = new 'ParrotIO'
272     $I0 = can $P0, "puts"
273     print $I0
274     print "\n"
275     end
276 .end
277 CODE
281 pir_output_is( <<'CODE', <<'OUT', "x = isa" );
282 .sub test :main
283     $P0 = new 'Integer'
284     $I0 = isa $P0, "scalar"
285     print $I0
286     print "\n"
287     end
288 .end
289 CODE
293 pir_output_is( <<'CODE', <<'OUT', "x = add" );
294 .sub test :main
295     $I0 = 10
296     $I1 = add $I0, 10
297     print $I1
298     print "\n"
299     end
300 .end
301 CODE
305 pir_output_is( <<'CODE', <<'OUT', "x = invoke" );
306 .sub test :main
307     $P0 = get_global "_s"
308     $P0 = invokecc
309     $S0 = "done\n"
310     $S0 = print
311     end
312 .end
313 .sub _s
314     print "in sub\n"
315     returncc
316 .end
317 CODE
318 in sub
319 done
322 # ticket 32393
323 pir_output_is( <<'CODE', '', "empty sub" );
324 .sub _foo
325 .end
327 .sub _foo :anon
328 .end
329 CODE
331 pir_output_is( <<'CODE', <<'OUT', "if null X goto Y" );
332 .sub main :main
333     null $P0
334     if null $P0 goto BLAH
335     print "NOT A "
336 BLAH:
337    print "PASS\n"
338 .end
339 CODE
340 PASS
343 pir_output_is( <<'CODE', <<'OUT', "unless null X goto Y" );
344 .sub main :main
345     null $P0
346     unless null $P0 goto BLAH
347     print "PASS\n"
348     end
349 BLAH:
350    print "FAIL"
351 .end
352 CODE
353 PASS
356 pir_output_is( <<'CODE', <<'OUT', "if null X goto Y" );
357 .sub main :main
358     $S0 = "hello"
359     if null $S0 goto BLAH
360     print "PASS\n"
361     end
362 BLAH:
363    print "FAIL"
364 .end
365 CODE
366 PASS
369 pir_output_is( <<'CODE', <<'OUT', 'unless null X goto Y, $P0 = null' );
370 .sub main :main
371     $P0 = null
372     unless null $P0 goto BLAH
373     print "PASS\n"
374     end
375 BLAH:
376    print "FAIL"
377 .end
378 CODE
379 PASS
382 pir_output_is( <<'CODE', <<'OUT', 'X = A == B' );
383 .sub main :main
384     $I0 = 1 == 1
385     print $I0
386     print "\n"
388     $I0 = 1 == 0
389     print $I0
390     print "\n"
391 .end
392 CODE
397 pir_output_is( <<'CODE', <<'OUT', 'X = A < B' );
398 .sub main :main
399     $I0 = 1 < 1
400     print $I0
401     print "\n"
403     $I0 = 0 < 1
404     print $I0
405     print "\n"
406 .end
407 CODE
412 pir_output_is( <<'CODE', <<'OUT', 'X = A > B' );
413 .sub main :main
414     $I0 = 1 > 1
415     print $I0
416     print "\n"
418     $I0 = 4 > 1
419     print $I0
420     print "\n"
421 .end
422 CODE
427 pir_output_is( <<'CODE', <<'OUT', 'X = A >= B' );
428 .sub main :main
429     $I0 = 1 >= 1
430     print $I0
431     print "\n"
433     $I0 = 4 >= 1
434     print $I0
435     print "\n"
437     $I0 = 0 >= 1
438     print $I0
439     print "\n"
440 .end
441 CODE
447 pir_output_is( <<'CODE', <<'OUT', 'X = A <= B' );
448 .sub main :main
449     $I0 = 1 <= 1
450     print $I0
451     print "\n"
453     $I0 = 4 <= 1
454     print $I0
455     print "\n"
457     $I0 = 0 <= 1
458     print $I0
459     print "\n"
460 .end
461 CODE
467 pir_output_is( <<'CODE', <<'OUT', 'X = A != B' );
468 .sub main :main
469     $I0 = 1 != 1
470     print $I0
471     print "\n"
473     $I0 = 4 != 1
474     print $I0
475     print "\n"
476 .end
477 CODE
482 pir_output_is( <<'CODE', <<'OUT', 'Test octal/hex/bin/dec numbers' );
483 .sub main :main
484     $I0 = 0077
485     print $I0
486     print "\n"
488     $I0 = 0o77
489     print $I0
490     print "\n"
492     $I0 = 0xfF
493     print $I0
494     print "\n"
496     $I0 = 0b1101
497     print $I0
498     print "\n"
500     $I0 = 0O10
501     print $I0
502     print "\n"
504     $I0 = 0X10
505     print $I0
506     print "\n"
508     $I0 = 0B10
509     print $I0
510     print "\n"
512     $I0 = 10
513     print $I0
514     print "\n"
516 .end
517 CODE
528 # Local Variables:
529 #   mode: cperl
530 #   cperl-indent-level: 4
531 #   fill-column: 100
532 # End:
533 # vim: expandtab shiftwidth=4: