tagged release 0.6.4
[parrot.git] / t / pmc / float.t
blobb8cebbebfff48b1e375bb2e7fbd811acc06640d1
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::Test tests => 43;
12 =head1 NAME
14 t/pmc/float.t - Floating-point Numbers
16 =head1 SYNOPSIS
18     % prove t/pmc/float.t
20 =head1 DESCRIPTION
22 Tests the Float PMC.
24 =cut
26 my $fp_equality_macro = pasm_fp_equality_macro();
28 pasm_output_is( <<"CODE", <<OUTPUT, "basic assignment" );
29 @{[ $fp_equality_macro ]}
30     new P0, 'Float'
32     set P0, 0.001
33     .fp_eq( P0, 0.001, EQ1)
34     print "not "
35 EQ1:    print "ok 1\\n"
37         set P0, 1000
38         .fp_eq( P0, 1000.0, EQ2)
39     print "not "
40 EQ2:    print "ok 2\\n"
42         set P0, "12.5"
43         .fp_eq( P0, 12.5, EQ3)
44     print "not "
45 EQ3:    print "ok 3\\n"
47         set P0, "Twelve point five"
48         .fp_eq( P0, 0.0, EQ4)
49     print "not "
50 EQ4:    print "ok 4\\n"
52         set P0, 123.45
53         set I0, P0
54         eq I0, 123, EQ5
55     print "not "
56 EQ5:    print "ok 5\\n"
58         set P0, 123.45
59         set N0, P0
60         .fp_eq(N0, 123.45, EQ6)
61     print "not "
62 EQ6:    print "ok 6\\n"
64         set P0, 123.45
65         set S0, P0
66         eq S0, "123.45", EQ7
67     print "not "
68 EQ7:    print "ok 7\\n"
70     end
71 CODE
72 ok 1
73 ok 2
74 ok 3
75 ok 4
76 ok 5
77 ok 6
78 ok 7
79 OUTPUT
81 pasm_output_is( <<"CODE", <<OUTPUT, "add number to self" );
82 @{[ $fp_equality_macro ]}
83     new P0, 'Float'
84     set P0, 0.001
85     add P0, P0, P0
86     .fp_eq( P0, 0.002, EQ1)
87     print P0
88     print "not "
89 EQ1:    print "ok 1\\n"
90     end
91 CODE
92 ok 1
93 OUTPUT
95 pasm_output_is( <<"CODE", <<OUTPUT, "sub number from self" );
96 @{[ $fp_equality_macro ]}
97     new P0, 'Float'
98     set P0, -1000.2
99     sub P0, P0, P0
100     .fp_eq( P0, 0.0, EQ1)
101     print P0
102     print "not "
103 EQ1:    print "ok 1\\n"
104     end
105 CODE
106 ok 1
107 OUTPUT
109 pasm_output_is( <<"CODE", <<OUTPUT, "multiply number by self" );
110 @{[ $fp_equality_macro ]}
111     new P0, 'Float'
112     set P0, 123.4
113     mul P0, P0, P0
114     .fp_eq( P0, 15227.56, EQ1)
115     print P0
116     print "not "
117 EQ1:    print "ok 1\\n"
118     end
119 CODE
120 ok 1
121 OUTPUT
123 pasm_output_is( <<"CODE", <<OUTPUT, "divide number by self" );
124 @{[ $fp_equality_macro ]}
125     new P0, 'Float'
126     set P0, 1829354.988
127     div P0, P0, P0
128     .fp_eq( P0, 1.0, EQ1)
129     print P0
130     print "not "
131 EQ1:    print "ok 1\\n"
132     end
133 CODE
134 ok 1
135 OUTPUT
137 pir_output_is( <<'CODE', <<OUTPUT, "divide by zero" );
138 .sub _main :main
139     P0 = new 'Float'
140     set P0, "12.0"
141     P1 = new 'Float'
142     P2 = new 'Float'
143     set P2, "0.0"
144     push_eh OK
145     P1 = P0 / P2
146     print "fail\n"
147     pop_eh
149     get_results '0,0', $P0, $S0
150     print "ok\n"
151     print $S0
152     print "\n"
153 .end
154 CODE
156 float division by zero
157 OUTPUT
159 pir_output_is( << 'CODE', << 'OUTPUT', "Truth of a positive float" );
161 .sub _main
162     .local pmc float_1
163     float_1 = new 'Float'
164     float_1 = 123.123
165     print float_1
166     if float_1 goto IS_TRUE
167       print " is false\n"
168     end
169     IS_TRUE:
170       print " is true\n"
171     end
172 .end
173 CODE
174 123.123 is true
175 OUTPUT
177 pir_output_is( << 'CODE', << 'OUTPUT', "Truth of a negative float" );
179 .sub _main
180     .local pmc float_1
181     float_1 = new 'Float'
182     float_1 = -123.123
183     print float_1
184     if float_1 goto IS_TRUE
185       print " is false\n"
186     end
187     IS_TRUE:
188       print " is true\n"
189     end
190 .end
191 CODE
192 -123.123 is true
193 OUTPUT
195 pir_output_is( << 'CODE', << 'OUTPUT', "Truth of a positive integer" );
197 .sub _main
198     .local pmc float_1
199     float_1 = new 'Float'
200     float_1 = 1
201     print float_1
202     if float_1 goto IS_TRUE
203       print " is false\n"
204     end
205     IS_TRUE:
206       print " is true\n"
207     end
208 .end
209 CODE
210 1 is true
211 OUTPUT
213 pir_output_is( << 'CODE', << 'OUTPUT', "Truth of a negative integer" );
215 .sub _main
216     .local pmc float_1
217     float_1 = new 'Float'
218     float_1 = -1
219     print float_1
220     if float_1 goto IS_TRUE
221       print " is false\n"
222     end
223     IS_TRUE:
224       print " is true\n"
225     end
226 .end
227 CODE
228 -1 is true
229 OUTPUT
231 pir_output_is( << 'CODE', << 'OUTPUT', "Falseness of 0" );
233 .sub _main
234     .local pmc float_1
235     float_1 = new 'Float'
236     float_1 = 0
237     print float_1
238     if float_1 goto IS_TRUE
239       print " is false\n"
240     end
241     IS_TRUE:
242       print " is true\n"
243     end
244 .end
245 CODE
246 0 is false
247 OUTPUT
249 pir_output_is( << 'CODE', << 'OUTPUT', "Falseness of 0.000" );
251 .sub _main
252     .local pmc float_1
253     float_1 = new 'Float'
254     float_1 = 0.000
255     print float_1
256     if float_1 goto IS_TRUE
257       print " is false\n"
258     end
259     IS_TRUE:
260       print " is true\n"
261     end
262 .end
263 CODE
264 0 is false
265 OUTPUT
267 pasm_output_is( << "CODE", << 'OUTPUT', "Basic integer arithmetic: addition" );
268 @{[ $fp_equality_macro ]}
269     new P0, 'Float'
270     set P0, 0.001
271     add P0, 1
272     .fp_eq(P0, 1.001, EQ1)
273     print P0
274     print "not "
275 EQ1:    print "ok 1\\n"
277     add P0, -2
278     .fp_eq(P0, -0.999, EQ2)
279     print P0
280     print "not "
281 EQ2:    print "ok 2\\n"
282     end
283 CODE
284 ok 1
285 ok 2
286 OUTPUT
288 pasm_output_is( << "CODE", << 'OUTPUT', "Basic integer arithmetic: subtraction" );
289 @{[ $fp_equality_macro ]}
290     new P0, 'Float'
291     set P0, 103.45
292     sub P0, 77
293     .fp_eq(P0, 26.45, EQ1)
294     print P0
295     print "not "
296 EQ1:    print "ok 1\\n"
298     sub P0, -24
299     .fp_eq(P0, 50.45, EQ2)
300     print P0
301     print "not "
302 EQ2:    print "ok 2\\n"
303     end
304 CODE
305 ok 1
306 ok 2
307 OUTPUT
309 pasm_output_is( << "CODE", << 'OUTPUT', "Basic integer arithmetic: multiplication" );
310 @{[ $fp_equality_macro ]}
311     new P0, 'Float'
312     set P0, 0.001
313     mul P0, 10000
314     .fp_eq(P0, 10.0, EQ1)
315     print P0
316     print "not "
317 EQ1:    print "ok 1\\n"
319     mul P0, -1
320     .fp_eq(P0, -10.0, EQ2)
321     print P0
322     print "not "
323 EQ2:    print "ok 2\\n"
325     mul P0, 0
326     .fp_eq(P0, 0.0, EQ3)
327     print P0
328     print "not "
329 EQ3:    print "ok 3\\n"
330     end
331 CODE
332 ok 1
333 ok 2
334 ok 3
335 OUTPUT
337 pasm_output_is( << "CODE", << 'OUTPUT', "Basic integer arithmetic: division" );
338 @{[ $fp_equality_macro ]}
339     new P0, 'Float'
340     set P0, 1e8
341     div P0, 10000
342     .fp_eq(P0, 10000.0, EQ1)
343     print P0
344     print "not "
345 EQ1:    print "ok 1\\n"
347     div P0, 1000000
348     .fp_eq(P0, 0.01, EQ2)
349     print P0
350     print "not "
351 EQ2:    print "ok 2\\n"
352     end
353 CODE
354 ok 1
355 ok 2
356 OUTPUT
358 pasm_output_is( << "CODE", << 'OUTPUT', "Basic numeric arithmetic: addition" );
359 @{[ $fp_equality_macro ]}
360     new P0, 'Float'
361     set P0, 0.001
362     add P0, 1.2
363     .fp_eq(P0, 1.201, EQ1)
364     print P0
365     print "not "
366 EQ1:    print "ok 1\\n"
368     add P0, -2.4
369     .fp_eq(P0, -1.199, EQ2)
370     print P0
371     print "not "
372 EQ2:    print "ok 2\\n"
373     end
374 CODE
375 ok 1
376 ok 2
377 OUTPUT
379 pasm_output_is( << "CODE", << 'OUTPUT', "Basic numeric arithmetic: subtraction" );
380 @{[ $fp_equality_macro ]}
381     new P0, 'Float'
382     set P0, 103.45
383     sub P0, 3.46
384     .fp_eq(P0, 99.99, EQ1)
385     print P0
386     print "not "
387 EQ1:    print "ok 1\\n"
389     sub P0, -0.01
390     .fp_eq(P0, 100.00, EQ2)
391     print P0
392     print "not "
393 EQ2:    print "ok 2\\n"
394     end
395 CODE
396 ok 1
397 ok 2
398 OUTPUT
400 pasm_output_is( << "CODE", << 'OUTPUT', "Basic numeric arithmetic: multiplication" );
401 @{[ $fp_equality_macro ]}
402     new P0, 'Float'
403     set P0, 0.001
404     mul P0, 123.5
405     .fp_eq(P0, 0.1235, EQ1)
406     print P0
407     print "not "
408 EQ1:    print "ok 1\\n"
410     mul P0, -2.6
411     .fp_eq(P0, -0.3211, EQ2)
412     print P0
413     print "not "
414 EQ2:    print "ok 2\\n"
416     mul P0, 0
417     .fp_eq(P0, 0.0, EQ3)
418     print P0
419     print "not "
420 EQ3:    print "ok 3\\n"
421     end
422 CODE
423 ok 1
424 ok 2
425 ok 3
426 OUTPUT
428 pasm_output_is( << "CODE", << 'OUTPUT', "Basic numeric arithmetic: division" );
429 @{[ $fp_equality_macro ]}
430     new P0, 'Float'
431     set P0, 1e8
432     div P0, 0.5
433     .fp_eq(P0, 2e8, EQ1)
434     print P0
435     print "not "
436 EQ1:    print "ok 1\\n"
438     div P0, 4000.0
439     .fp_eq(P0, 50000.0, EQ2)
440     print P0
441     print "not "
442 EQ2:    print "ok 2\\n"
443     end
444 CODE
445 ok 1
446 ok 2
447 OUTPUT
449 pasm_output_is( << "CODE", << 'OUTPUT', "Increment & decrement" );
450 @{[ $fp_equality_macro ]}
451     new P0, 'Float'
452     set P0, 0.5
453     inc P0
454     .fp_eq(P0, 1.5, EQ1)
455     print P0
456     print "not "
457 EQ1:    print "ok 1\\n"
459     dec P0
460     .fp_eq(P0, 0.5, EQ2)
461     print P0
462     print "not "
463 EQ2:    print "ok 2\\n"
465     dec P0
466     .fp_eq(P0, -0.5, EQ3)
467     print P0
468     print "not "
469 EQ3:    print "ok 3\\n"
471     inc P0
472     .fp_eq(P0, 0.5, EQ4)
473     print P0
474     print "not "
475 EQ4:    print "ok 4\\n"
476     end
477 CODE
478 ok 1
479 ok 2
480 ok 3
481 ok 4
482 OUTPUT
484 pasm_output_is( << "CODE", << 'OUTPUT', "Neg" );
485 @{[ $fp_equality_macro ]}
486     new P0, 'Float'
487     set P0, 0.5
488     neg P0
489     .fp_eq(P0, -0.5, EQ1)
490     print P0
491     print "not "
492 EQ1:    print "ok 1\\n"
494         new P1, 'Float'
495     neg P1, P0
496     .fp_eq(P1, 0.5, EQ2)
497     print P1
498     print "not "
499 EQ2:    print "ok 2\\n"
500     end
501 CODE
502 ok 1
503 ok 2
504 OUTPUT
506 SKIP: {
507     skip 'failling on win32' => 1 if $^O =~ m/win32/i;
509 pasm_output_like( << 'CODE', << 'OUTPUT', "neg 0" );
510     new P0, 'Float'
511     set P0, 0.0
512     neg P0
513         print P0
514     end
515 CODE
516 /^-0/
517 OUTPUT
521 pasm_output_is( << 'CODE', << 'OUTPUT', "Equality" );
522     new P0, 'Float'
523     set P0, 1e8
524         new P1, 'Float'
525         set P1, 1e8
526         new P2, 'Float'
527         set P2, 2.4
529         eq P0, P1, OK1
530         print "not "
531 OK1:    print "ok 1\n"
533         eq P0, P2, BAD2
534         branch OK2
535 BAD2:   print "not "
536 OK2:    print "ok 2\n"
538         ne P0, P2, OK3
539         print "not "
540 OK3:    print "ok 3\n"
542         ne P0, P1, BAD4
543         branch OK4
544 BAD4:   print "not "
545 OK4:    print "ok 4\n"
547         eq_num P0, P1, OK5
548         print "not "
549 OK5:    print "ok 5\n"
551         eq_num P0, P2, BAD6
552         branch OK6
553 BAD6:   print "not "
554 OK6:    print "ok 6\n"
556         ne_num P0, P2, OK7
557         print "not "
558 OK7:    print "ok 7\n"
560         ne_num P0, P1, BAD8
561         branch OK8
562 BAD8:   print "not "
563 OK8:    print "ok 8\n"
564     end
565 CODE
566 ok 1
567 ok 2
568 ok 3
569 ok 4
570 ok 5
571 ok 6
572 ok 7
573 ok 8
574 OUTPUT
576 pir_output_is( << 'CODE', << 'OUTPUT', "check whether interface is done" );
578 .sub _main
579     .local pmc pmc1
580     pmc1 = new 'Float'
581     .local int bool1
582     does bool1, pmc1, "scalar"
583     print bool1
584     print "\n"
585     does bool1, pmc1, "float"
586     print bool1
587     print "\n"
588     does bool1, pmc1, "no_interface"
589     print bool1
590     print "\n"
591     end
592 .end
593 CODE
597 OUTPUT
599 pasm_output_is( << "CODE", << 'OUTPUT', "Abs" );
600 @{[ $fp_equality_macro ]}
601     new P0, 'Float'
602     set P0, 1.0
603     abs P0
604         eq P0, P0, OK1
605     print P0
606     print "not "
607 OK1:    print "ok 1\\n"
609         set P0, -1.0
610         abs P0
611     .fp_eq(P0, 1.0, OK2)
612     print P0
613     print "not "
614 OK2:    print "ok 2\\n"
616         new P1, 'Float'
617         set P0, -5.0
618         abs P1, P0
619         .fp_eq(P1, 5.0, OK3)
620     print P1
621     print "not "
622 OK3:    print "ok 3\\n"
623     end
624 CODE
625 ok 1
626 ok 2
627 ok 3
628 OUTPUT
630 pasm_output_is( << 'CODE', << 'OUTPUT', "comparison ops: lt" );
631         new P1, 'Float'
632         set P1, 111.1
633         set N1, P1
635         lt P1, 111.2, OK1
636         print "not "
637 OK1:    print "ok 1\n"
639         lt P1, N1, BAD2
640         branch OK2
641 BAD2:   print "not "
642 OK2:    print "ok 2\n"
644         lt P1, 111.0, BAD3
645         branch OK3
646 BAD3:   print "not "
647 OK3:    print "ok 3\n"
648         end
649 CODE
650 ok 1
651 ok 2
652 ok 3
653 OUTPUT
655 pasm_output_is( << 'CODE', << 'OUTPUT', "comparison ops: lt_num" );
656         new P1, 'Float'
657         set P1, 1.1
658         new P2, 'Float'
659         set P2, 1.2
660         new P3, 'Float'
661         set P3, 1.0
662         new P4, 'Float'
663         set P4, P1
665         lt_num P1, P2, OK1
666         print "not "
667 OK1:    print "ok 1\n"
669         lt_num P1, P4, BAD2
670         branch OK2
671 BAD2:   print "not "
672 OK2:    print "ok 2\n"
674         lt_num P1, P3, BAD3
675         branch OK3
676 BAD3:   print "not "
677 OK3:    print "ok 3\n"
678         end
679 CODE
680 ok 1
681 ok 2
682 ok 3
683 OUTPUT
685 pasm_output_is( << 'CODE', << 'OUTPUT', "comparison ops: le" );
686         new P1, 'Float'
687         set P1, 111.1
688         set N1, P1
690         le P1, 111.2, OK1
691         print "not "
692 OK1:    print "ok 1\n"
694         le P1, N1, OK2
695         print "not "
696 OK2:    print "ok 2\n"
698         le P1, 111.0, BAD3
699         branch OK3
700 BAD3:   print "not "
701 OK3:    print "ok 3\n"
702         end
703 CODE
704 ok 1
705 ok 2
706 ok 3
707 OUTPUT
709 pasm_output_is( << 'CODE', << 'OUTPUT', "comparison ops: le_num" );
710         new P1, 'Float'
711         set P1, 1.1
712         new P2, 'Float'
713         set P2, 1.2
714         new P3, 'Float'
715         set P3, 1.0
716         new P4, 'Float'
717         set P4, P1
719         le_num P1, P2, OK1
720         print "not "
721 OK1:    print "ok 1\n"
723         le_num P1, P4, OK2
724         print "not "
725 OK2:    print "ok 2\n"
727         le_num P1, P3, BAD3
728         branch OK3
729 BAD3:   print "not "
730 OK3:    print "ok 3\n"
731         end
732 CODE
733 ok 1
734 ok 2
735 ok 3
736 OUTPUT
738 pasm_output_is( << 'CODE', << 'OUTPUT', "comparison ops: gt" );
739         new P1, 'Float'
740         set P1, 111.1
741         set N1, P1
743         gt P1, 111.2, BAD1
744         branch OK1
745 BAD1:   print "not "
746 OK1:    print "ok 1\n"
748         gt P1, N1, OK2
749         branch OK2
750 BAD2:   print "not "
751 OK2:    print "ok 2\n"
753         gt P1, 111.0, OK3
754         print "not "
755 OK3:    print "ok 3\n"
756         end
757 CODE
758 ok 1
759 ok 2
760 ok 3
761 OUTPUT
763 pasm_output_is( << 'CODE', << 'OUTPUT', "comparison ops: gt_num" );
764         new P1, 'Float'
765         set P1, 1.1
766         new P2, 'Float'
767         set P2, 1.2
768         new P3, 'Float'
769         set P3, 1.0
770         new P4, 'Float'
771         set P4, P1
773         gt_num P1, P2, BAD1
774         branch OK1
775 BAD1:   print "not "
776 OK1:    print "ok 1\n"
778         gt_num P1, P4, OK2
779         branch OK2
780 BAD2:   print "not "
781 OK2:    print "ok 2\n"
783         gt_num P1, P3, OK3
784         print "not "
785 OK3:    print "ok 3\n"
786         end
787 CODE
788 ok 1
789 ok 2
790 ok 3
791 OUTPUT
793 pasm_output_is( << 'CODE', << 'OUTPUT', "comparison ops: ge" );
794         new P1, 'Float'
795         set P1, 111.1
796         set N1, P1
798         ge P1, 111.2, BAD1
799         branch OK1
800 BAD1:   print "not "
801 OK1:    print "ok 1\n"
803         ge P1, N1, OK2
804         print "not "
805 OK2:    print "ok 2\n"
807         ge P1, 111.0, OK3
808         print "not "
809 OK3:    print "ok 3\n"
810         end
811 CODE
812 ok 1
813 ok 2
814 ok 3
815 OUTPUT
817 pasm_output_is( << 'CODE', << 'OUTPUT', "comparison ops: ge_num" );
818         new P1, 'Float'
819         set P1, 1.1
820         new P2, 'Float'
821         set P2, 1.2
822         new P3, 'Float'
823         set P3, 1.0
824         new P4, 'Float'
825         set P4, P1
827         ge_num P1, P2, BAD1
828         branch OK1
829 BAD1:   print "not "
830 OK1:    print "ok 1\n"
832         ge_num P1, P4, OK2
833         print "not "
834 OK2:    print "ok 2\n"
836         ge_num P1, P3, OK3
837         print "not "
838 OK3:    print "ok 3\n"
839         end
840 CODE
841 ok 1
842 ok 2
843 ok 3
844 OUTPUT
846 pasm_output_is( << 'CODE', << 'OUTPUT', "comparison ops: cmp_p_n" );
847         new P1, 'Float'
848         set P1, 123.45
849         set N1, 123.45
850         set N2, -1.0
851         set N3, 123.54
853         cmp I0, P1, N1
854         print I0
855         print "\n"
856         cmp I0, P1, N2
857         print I0
858         print "\n"
859         cmp I0, P1, N3
860         print I0
861         print "\n"
862         end
863 CODE
867 OUTPUT
869 pasm_output_is( << 'CODE', << 'OUTPUT', "comparison ops: isgt" );
870         new P1, 'Float'
871         new P2, 'Float'
872         new P3, 'Float'
873         new P4, 'Integer'
874         new P5, 'Integer'
875         new P6, 'Float'
877         set P1, 10.0
878         set P2, 20.0
879         set P3, 5.0
880         set P4, 3
881         set P5, 12
882         set P6, 10.0
884         isgt I0, P1, P2
885         print I0
886         print "\n"
887         isgt I0, P1, P1
888         print I0
889         print "\n"
890         isgt I0, P1, P3
891         print I0
892         print "\n"
893         isgt I0, P1, P4
894         print I0
895         print "\n"
896         isgt I0, P1, P5
897         print I0
898         print "\n"
899         isgt I0, P1, P6
900         print I0
901         print "\n"
902         end
903 CODE
910 OUTPUT
912 pasm_output_is( << 'CODE', << 'OUTPUT', "comparison ops: isge" );
913         new P1, 'Float'
914         new P2, 'Float'
915         new P3, 'Float'
916         new P4, 'Integer'
917         new P5, 'Integer'
918         new P6, 'Float'
920         set P1, 10.0
921         set P2, 20.0
922         set P3, 5.0
923         set P4, 3
924         set P5, 12
925         set P6, 10.0
927         isge I0, P1, P2
928         print I0
929         print "\n"
930         isge I0, P1, P1
931         print I0
932         print "\n"
933         isge I0, P1, P3
934         print I0
935         print "\n"
936         isge I0, P1, P4
937         print I0
938         print "\n"
939         isge I0, P1, P5
940         print I0
941         print "\n"
942         isge I0, P1, P6
943         print I0
944         print "\n"
945         end
946 CODE
953 OUTPUT
955 pasm_output_is( << 'CODE', << 'OUTPUT', "comparison ops: islt" );
956         new P1, 'Float'
957         new P2, 'Float'
958         new P3, 'Float'
959         new P4, 'Integer'
960         new P5, 'Integer'
961         new P6, 'Float'
963         set P1, 10.0
964         set P2, 20.0
965         set P3, 5.0
966         set P4, 3
967         set P5, 12
968         set P6, 10.0
970         islt I0, P1, P2
971         print I0
972         print "\n"
973         islt I0, P1, P1
974         print I0
975         print "\n"
976         islt I0, P1, P3
977         print I0
978         print "\n"
979         islt I0, P1, P4
980         print I0
981         print "\n"
982         islt I0, P1, P5
983         print I0
984         print "\n"
985         islt I0, P1, P6
986         print I0
987         print "\n"
988         end
989 CODE
996 OUTPUT
998 pasm_output_is( << 'CODE', << 'OUTPUT', "comparison ops: isle" );
999         new P1, 'Float'
1000         new P2, 'Float'
1001         new P3, 'Float'
1002         new P4, 'Integer'
1003         new P5, 'Integer'
1004         new P6, 'Float'
1006         set P1, 10.0
1007         set P2, 20.0
1008         set P3, 5.0
1009         set P4, 3
1010         set P5, 12
1011         set P6, 10.0
1013         isle I0, P1, P2
1014         print I0
1015         print "\n"
1016         isle I0, P1, P1
1017         print I0
1018         print "\n"
1019         isle I0, P1, P3
1020         print I0
1021         print "\n"
1022         isle I0, P1, P4
1023         print I0
1024         print "\n"
1025         isle I0, P1, P5
1026         print I0
1027         print "\n"
1028         isle I0, P1, P6
1029         print I0
1030         print "\n"
1031         end
1032 CODE
1039 OUTPUT
1041 pasm_output_is( << 'CODE', << 'OUTPUT', "comparison ops: iseq" );
1042         new P1, 'Float'
1043         new P2, 'Float'
1044         new P3, 'Float'
1045         new P4, 'Integer'
1047         set P1, 2.5
1048         set P2, 2.6
1049         set P3, 2.5
1050         set P4, 2
1052         iseq I0, P1, P1
1053         print I0
1054         print "\n"
1055         iseq I0, P1, P2
1056         print I0
1057         print "\n"
1058         iseq I0, P1, P3
1059         print I0
1060         print "\n"
1061         iseq I0, P1, P4
1062         print I0
1063         print "\n"
1064         end
1065 CODE
1070 OUTPUT
1072 pasm_output_is( << 'CODE', << 'OUTPUT', "comparison ops: isne" );
1073         new P1, 'Float'
1074         new P2, 'Float'
1075         new P3, 'Float'
1076         new P4, 'Integer'
1078         set P1, 2.5
1079         set P2, 2.6
1080         set P3, 2.5
1081         set P4, 2
1083         isne I0, P1, P1
1084         print I0
1085         print "\n"
1086         isne I0, P1, P2
1087         print I0
1088         print "\n"
1089         isne I0, P1, P3
1090         print I0
1091         print "\n"
1092         isne I0, P1, P4
1093         print I0
1094         print "\n"
1095         end
1096 CODE
1101 OUTPUT
1103 pir_output_is( <<'CODE', <<OUTPUT, "new_from_string" );
1104 .sub main :main
1105     .const .Float pi = "3.1"
1106     print pi
1107     print "\n"
1108 .end
1109 CODE
1111 OUTPUT
1113 pir_output_is( <<'CODE', <<'OUTPUT', 'cmp functions for subclasses' );
1114 .sub main :main
1115     $P0 = subclass 'Float', 'Flt'
1117     $P1 = new 'Flt'
1118     $P1 = 1.5
1119     $P2 = new 'Flt'
1120     $P2 = 2.73
1122     $I0 = cmp $P1, $P2
1123     say $I0
1124     $I0 = cmp $P1, $P1
1125     say $I0
1126     $I0 = cmp $P2, $P1
1127     say $I0
1128 .end
1129 CODE
1133 OUTPUT
1136 # Local Variables:
1137 #   mode: cperl
1138 #   cperl-indent-level: 4
1139 #   fill-column: 100
1140 # End:
1141 # vim: expandtab shiftwidth=4: