# New Ticket Created by Steven Schubiger
# Please include the string: [perl #34527]
# in the subject line of all future correspondence about this issue.
# <URL: https://rt.perl.org/rt3/Ticket/Display.html?id=34527 >
> The test file t/pmc/pmc.t is full of Perl* tests.
> These should be factored out into t/pmc/perl*.t.
> The file itself should contain just common PMC functionality tests,
> like the range or type checks.
> Thanks,
> leo
I'm not so sure, whether I have excluded everything that should have
been excluded, so I kindly ask for reviewing.
--- ./pmc.t Tue Mar 22 03:28:41 2005
+++ /root/parrot/t/pmc/pmc.t Wed Mar 9 21:31:29 2005
@@ -17,7 +17,7 @@
=cut
-use Parrot::Test tests => 48;
+use Parrot::Test tests => 98;
use Test::More;
use Parrot::PMC qw(%pmc_types);
my $max_pmc = scalar(keys(%pmc_types)) + 1;
@@ -89,6 +89,761 @@
Illegal PMC enum ($max_pmc) in new
OUTPUT
+output_is(<<'CODE', <<'OUTPUT', "set/print integer");
+ new P0, .PerlInt
+ set P0, 123
+ print P0
+ print "\n"
+ end
+CODE
+123
+OUTPUT
+
+#
+# Let perl do the computation.
+#
+output_is(<<'CODE', <<OUTPUT, "add integer to self");
+ new P0, .PerlInt
+ set P0, 123
+ add P0, P0, P0
+ print P0
+ print "\n"
+ end
+CODE
+246
+OUTPUT
+
+output_is(<<'CODE', <<OUTPUT, "sub integer from self");
+ new P0, .PerlInt
+ set P0, 456
+ sub P0, P0, P0
+ print P0
+ print "\n"
+ end
+CODE
+0
+OUTPUT
+
+output_is(<<'CODE', <<OUTPUT, "multiply integer by self");
+ new P0, .PerlInt
+ set P0, 124
+ mul P0, P0, P0
+ print P0
+ print "\n"
+ end
+CODE
+15376
+OUTPUT
+
+output_is(<<"CODE", <<OUTPUT, "divide integer by self");
[EMAIL PROTECTED] $fp_equality_macro ]}
+ new P0, .PerlInt
+ set P0, 23
+ div P0, P0, P0
+ .fp_eq( P0, 1.0, EQ1)
+ print P0
+ print "not "
+EQ1: print "ok 1\\n"
+ end
+CODE
+ok 1
+OUTPUT
+
+output_is(<<'CODE', <<OUTPUT, "add integer to other");
+ new P0, .PerlInt
+ new P1, .PerlInt
+ set P0, 123
+ set P1, 321
+ add P1, P1, P0
+ print P1
+ print "\n"
+ end
+CODE
+444
+OUTPUT
+
+output_is(<<'CODE', <<OUTPUT, "subtract integer from other");
+ new P0, .PerlInt
+ new P1, .PerlInt
+ set P0, 123
+ set P1, 321
+ sub P1, P1, P0
+ print P1
+ print "\n"
+ end
+CODE
+198
+OUTPUT
+
+output_is(<<'CODE', <<OUTPUT, "multiply integer by other");
+ new P0, .PerlInt
+ new P1, .PerlInt
+ set P0, 123
+ set P1, 321
+ mul P1, P1, P0
+ print P1
+ print "\n"
+ end
+CODE
+39483
+OUTPUT
+
+output_is(<<"CODE", <<OUTPUT, "divide integer by other");
[EMAIL PROTECTED] $fp_equality_macro ]}
+ new P0, .PerlInt
+ new P1, .PerlInt
+ set P0, 123
+ set P1, 246
+ div P1, P1, P0
+
+ .fp_eq( P1, 2.0, EQ1)
+ print P1
+ print "not "
+EQ1: print "ok 1"
+ print "\\n"
+ end
+CODE
+ok 1
+OUTPUT
+
+#
+# Number tests
+#
+#
+# Concat tests
+#
+output_is(<<'CODE', <<OUTPUT, "concatenate integer to string");
+ new P0, .PerlInt
+ new P1, .PerlString
+ set P0, -5
+ set P1, "foo"
+ concat P0,P0,P1
+ print P0
+ print "\n"
+ end
+CODE
+-5foo
+OUTPUT
+
+output_is(<<'CODE', <<OUTPUT, "concatenate string to integer");
+ new P0, .PerlInt
+ new P1, .PerlString
+ set P0, "foo"
+ set P1, -7
+ concat P0,P0,P1
+ print P0
+ print "\n"
+ end
+CODE
+foo-7
+OUTPUT
+
+output_is(<<'CODE', <<OUTPUT, "concatenate number to string");
+ new P0, .PerlNum
+ new P1, .PerlString
+ set P0, 5.43
+ set P1, "bar"
+ concat P0,P0,P1
+ print P0
+ print "\n"
+ end
+CODE
+5.430000bar
+OUTPUT
+
+output_is(<<'CODE', <<OUTPUT, "concatenate string to number");
+ new P0, .PerlString
+ new P1, .PerlNum
+ set P0, "bar"
+ set P1, 2.7
+ concat P0,P0,P1
+ print P0
+ print "\n"
+ end
+CODE
+bar2.700000
+OUTPUT
+
+output_is(<<'CODE', <<OUTPUT, "concatenate string to string");
+ new P0, .PerlString
+ new P1, .PerlString
+ set P0, "foo"
+ set P1, "bar"
+ concat P0,P0,P1
+ print P0
+ print "\n"
+ end
+CODE
+foobar
+OUTPUT
+
+output_is(<<'CODE', <<OUTPUT, "concatenate <foo> to undef");
+ new P0, .PerlUndef
+ new P1, .PerlInt
+ set P1, 10
+ concat P0, P0, P1
+ set S0, P0
+ eq S0, "10", OK1
+ print "not "
+OK1: print "ok 1\n"
+
+ new P0, .PerlUndef
+ new P1, .PerlNum
+ set P1, 1.2
+ concat P0, P0, P1
+ set S0, P0
+ eq S0, "1.200000", OK2
+ print "not "
+OK2: print "ok 2\n"
+
+ new P0, .PerlUndef
+ new P1, .PerlString
+ set P1, "Foo"
+ concat P0, P0, P1
+ set S0, P0
+ eq S0, "Foo", OK3
+ print "not "
+OK3: print "ok 3\n"
+
+ new P0, .PerlUndef
+ new P1, .PerlUndef
+ concat P0, P0, P1
+ set S0, P0
+ eq S0, "", OK4
+ print "not "
+OK4: print "ok 4\n"
+ end
+CODE
+ok 1
+ok 2
+ok 3
+ok 4
+OUTPUT
+
+
+output_is(<<'CODE', <<OUTPUT, "concatenate undef to <foo>");
+ new P0, .PerlUndef
+ new P1, .PerlInt
+ set P1, 10
+ concat P1, P1, P0
+ set S0, P1
+ eq S0, "10", OK1
+ print "not "
+OK1: print "ok 1\n"
+
+ new P0, .PerlUndef
+ new P1, .PerlNum
+ set P1, 1.2
+ concat P1, P1, P0
+ set S0, P1
+ eq S0, "1.200000", OK2
+ print "not "
+OK2: print "ok 2\n"
+
+ new P0, .PerlUndef
+ new P1, .PerlString
+ set P1, "Foo"
+ concat P1, P1, P0
+ set S0, P1
+ eq S0, "Foo", OK3
+ print "not "
+OK3: print "ok 3\n"
+
+ end
+CODE
+ok 1
+ok 2
+ok 3
+OUTPUT
+
+output_is(<<'CODE', <<OUTPUT, "concatenate STRING to undef");
+ new P0, .PerlUndef
+ concat P0, P0, "Foo"
+ set S0, P0
+ eq S0, "Foo", OK1
+ print "not "
+OK1: print "ok 1\n"
+ end
+CODE
+ok 1
+OUTPUT
+
+#
+# Basic string number conversion
+#
+output_is(<<CODE, <<OUTPUT, "string to int");
+ new P0, .PerlString
+
+ set P0, "1"
+ set I0, P0
+ print I0
+ print P0
+ print "\\n"
+
+ set P0, " 1"
+ set I0, P0
+ print I0
+ print P0
+ print "\\n"
+
+ set P0, "-1"
+ set I0, P0
+ print I0
+ print P0
+ print "\\n"
+
+ set P0, "dull and void"
+ set I0, P0
+ print I0
+ print "\\n"
+
+ set P0, ""
+ set I0, P0
+ print I0
+ print "\\n"
+ end
+CODE
+11
+1 1
+-1-1
+0
+0
+OUTPUT
+
+output_is(<<'CODE', <<OUTPUT, "nasty string -> int");
+ new P0, .PerlInt
+ set P0, "Z1"
+ set I0, P0
+ print I0
+ print P0
+ print "\n"
+
+ set P0, "\x0 1"
+ set I0, P0
+ print I0
+ print "\n"
+
+ set P0, "1.23e2"
+ set I0, P0
+ print I0
+ print "\n"
+ end
+CODE
+0Z1
+0
+123
+OUTPUT
+
+output_is(<<CODE, <<OUTPUT, "string to number conversion");
[EMAIL PROTECTED] $fp_equality_macro ]}
+ new P0, .PerlNum
+
+ set P0, "1"
+ set N0, P0
+ .fp_eq( N0, 1, EQ1)
+ print N0
+ print "not "
+EQ1: print "ok 1\\n"
+
+ set P0, "1.2"
+ set N0, P0
+ .fp_eq( N0, 1.2, EQ2)
+ print N0
+ print "not "
+EQ2: print "ok 2\\n"
+
+ set P0, "1.2e1"
+ set N0, P0
+ .fp_eq( N0, 12, EQ3)
+ print N0
+ print "not "
+EQ3: print "ok 3\\n"
+
+ set P0, "1.2e-1"
+ set N0, P0
+ .fp_eq( N0, 0.12, EQ4)
+ print N0
+ print "not "
+EQ4: print "ok 4\\n"
+
+ set P0, "1.2e2.1"
+ set N0, P0
+ .fp_eq( N0, 120, EQ5)
+ print N0
+ print "not "
+EQ5: print "ok 5\\n"
+
+ set P0, "X1.2X"
+ set N0, P0
+ .fp_eq( N0, 0.0, EQ6)
+ print N0
+ print "not "
+EQ6: print "ok 6\\n"
+
+ set P0, "E1-1.2e+2"
+ set N0, P0
+ .fp_eq( N0, 0.0, EQ7)
+ print N0
+ print "not "
+EQ7: print "ok 7\\n"
+
+ set P0, "++-1"
+ set N0, P0
+ .fp_eq( N0, 0.0, EQ8)
+ print N0
+ print "not "
+EQ8: print "ok 8\\n"
+
+ set P0, "1234.1234.5"
+ set N0, P0
+ .fp_eq( N0, 1234.1234, EQ9)
+ print N0
+ print "not "
+EQ9: print "ok 9\\n"
+
+ set P0, "this is empty!"
+ set N0, P0
+ .fp_eq( N0, 0.0, EQ10)
+ print N0
+ print " not "
+EQ10: print "ok 10\\n"
+
+ set P0, "0e123"
+ set N0, P0
+ .fp_eq( N0, 0, EQ11)
+ print N0
+ print " not "
+EQ11: print "ok 11\\n"
+
+ set P0, "000000000000000000000000000000000000000001e-0"
+ set N0, P0
+ .fp_eq( N0, 1, EQ12)
+ print N0
+ print " not "
+EQ12: print "ok 12\\n"
+
+ end
+CODE
+ok 1
+ok 2
+ok 3
+ok 4
+ok 5
+ok 6
+ok 7
+ok 8
+ok 9
+ok 10
+ok 11
+ok 12
+OUTPUT
+
+#
+# Arithmetic operators
+#
+output_is(<<'CODE', <<OUTPUT, "add integer to string integer");
+ new P0, .PerlInt
+ new P1, .PerlString
+ set P0, 6
+ set P1, "7"
+ add P0,P0,P1
+ print P0
+ print "\n"
+ end
+CODE
+13
+OUTPUT
+
+output_is(<<'CODE', <<OUTPUT, "add integer to string");
+ new P0, .PerlInt
+ new P1, .PerlString
+ set P0, 6
+ set P1, "ab"
+ add P0,P0,P1
+ print P0
+ print "\n"
+ end
+CODE
+6
+OUTPUT
+
+output_is(<<"CODE", <<OUTPUT, "add integer to string number");
[EMAIL PROTECTED] $fp_equality_macro ]}
+ new P0, .PerlInt
+ new P1, .PerlString
+ set P0, 6
+ set P1, "7.5"
+ add P0,P0,P1
+ .fp_eq( P0, 13.5, EQ1)
+ print P0
+ print "not "
+EQ1: print "ok 1\\n"
+ end
+CODE
+ok 1
+OUTPUT
+
+output_is(<<"CODE", <<OUTPUT, "add number to string integer");
[EMAIL PROTECTED] $fp_equality_macro ]}
+ new P0, .PerlNum
+ new P1, .PerlString
+ set P0, 6.1
+ set P1, "7"
+ add P0,P0,P1
+ .fp_eq( P0, 13.1, EQ1)
+ print P0
+ print "not "
+EQ1: print "ok 1\\n"
+ end
+CODE
+ok 1
+OUTPUT
+
+output_is(<<"CODE", <<OUTPUT, "add number to string");
[EMAIL PROTECTED] $fp_equality_macro ]}
+ new P0, .PerlNum
+ new P1, .PerlString
+ set P0, 6.1
+ set P1, "ab"
+ add P0,P0,P1
+ .fp_eq( P0, 6.1, EQ1)
+ print P0
+ print "not "
+EQ1: print "ok 1\\n"
+ end
+CODE
+ok 1
+OUTPUT
+
+output_is(<<"CODE", <<OUTPUT, "add number to string number");
[EMAIL PROTECTED] $fp_equality_macro ]}
+ new P0, .PerlNum
+ new P1, .PerlString
+ set P0, 6.1
+ set P1, "7.5"
+ add P0,P0,P1
+ .fp_eq( P0, 13.6, EQ1)
+ print P0
+ print "not "
+EQ1: print "ok 1\\n"
+ end
+CODE
+ok 1
+OUTPUT
+
+output_is(<<'CODE', <<OUTPUT, "p = p % p (int % int)");
+ new P0, .PerlInt
+ new P1, .PerlInt
+ new P2, .PerlInt
+ new P3, .PerlNum
+ set P0, 11
+ set P1, 10
+ mod P2, P0, P1
+ print P2
+ print "\n"
+ set P0, 12
+ mod P3, P0, P1
+ print P3
+ print "\n"
+ mod P0, P0, P1
+ print P0
+ print "\n"
+ end
+CODE
+1
+2
+2
+OUTPUT
+
+output_is(<<'CODE', <<OUTPUT, "p = p % p (int % numeric string)");
+ new P0, .PerlInt
+ new P1, .PerlString
+ new P2, .PerlInt
+ set P0, 11
+ set P1, "10"
+ mod P2, P0, P1
+ print P2
+ print "\n"
+ set P0, 12
+ end
+CODE
+1
+OUTPUT
+
+output_is(<<CODE, <<OUTPUT, "p = fmod(p,p)");
[EMAIL PROTECTED] $fp_equality_macro ]}
+ new P0, .PerlNum
+ new P1, .PerlNum
+ new P2, .PerlNum
+ new P3, .PerlInt
+ set P0, 13.4
+ set P1, 6.0
+ cmod P2, P0, P1
+ .fp_eq(P2, 1.4, OK1)
+ print "not "
+OK1: print "ok 1\\n"
+ set P0, -25.1
+ cmod P3, P0, P1
+ .fp_eq(P3, -1.1, OK2)
+ print "not "
+OK2: print "ok 2\\n"
+ cmod P0, P0, P1
+ .fp_eq(P0, -1.1, OK3)
+ print "not "
+OK3: print "ok 3\\n"
+ end
+CODE
+ok 1
+ok 2
+ok 3
+OUTPUT
+
+output_is(<<CODE, <<OUTPUT, "(int / int) -> float");
[EMAIL PROTECTED] $fp_equality_macro ]}
+ new P0, .PerlInt
+ new P1, .PerlInt
+ new P2, .PerlNum
+ set P0, 1
+ set P1, 2
+ div P2, P0, P1
+ .fp_eq( P2, 0.5, EQ1)
+ print P2
+ print " not "
+EQ1: print "ok 1\\n"
+ end
+CODE
+ok 1
+OUTPUT
+
+output_is(<<CODE, <<'OUTPUT', "copy");
[EMAIL PROTECTED] $fp_equality_macro ]}
+ new P0, .PerlInt
+ new P1, .PerlInt
+ set P0, -3
+ clone P1, P0
+ set I1, P1
+ eq I1, -3, EQ1
+ print I1
+ print "not "
+EQ1: print "ok 1\\n"
+ set P0, 3.6
+ clone P1, P0
+ .fp_eq(P1, 3.6, EQ2)
+ print P1
+ print "not "
+EQ2: print "ok 2\\n"
+ set P0, "foo"
+ clone P1, P0
+ set S1, P1
+ eq S1, "foo", EQ3
+ print S1
+ print "not "
+EQ3: print "ok 3\\n"
+ end
+CODE
+ok 1
+ok 2
+ok 3
+OUTPUT
+
+output_is(<<'CODE', <<'OUTPUT', "set/get string value");
+ new P0, .PerlString
+ set P0, "foo"
+ set S0, P0
+ eq S0, "foo", OK1
+ print "not "
+OK1: print "ok 1\n"
+
+ set P0, "\0"
+ set S0, P0
+ eq S0, "\0", OK2
+ print "not "
+OK2: print "ok 2\n"
+
+ set P0, ""
+ set S0, P0
+ eq S0, "", OK3
+ print "not "
+OK3: print "ok 3\n"
+
+ set P0, 0
+ set S0, P0
+ eq S0, "0", OK4
+ print "not "
+OK4: print "ok 4\n"
+
+ set P0, 0.0
+ set S0, P0
+ eq S0, "0", OK5
+ print "not "
+OK5: print "ok 5\n"
+
+ set P0, "0b000001"
+ set S0, P0
+ eq S0, "0b000001", OK6
+ print "not "
+OK6: print "ok 6\n"
+
+ end
+CODE
+ok 1
+ok 2
+ok 3
+ok 4
+ok 5
+ok 6
+OUTPUT
+
+# The same for PerlNums...
+
+output_is(<<'CODE', <<'OUTPUT', "set/get string value");
+ new P0, .PerlString
+ set P0, "bar"
+ set S0, P0
+ eq S0, "bar", OK1
+ print "not "
+OK1: print "ok 1\n"
+
+ set P0, "\0"
+ set S0, P0
+ eq S0, "\0", OK2
+ print "not "
+OK2: print "ok 2\n"
+
+ set P0, ""
+ set S0, P0
+ eq S0, "", OK3
+ print "not "
+OK3: print "ok 3\n"
+
+ set P0, -1
+ set S0, P0
+ eq S0, "-1", OK4
+ print "not "
+OK4: print "ok 4\n"
+
+ set P0, -1.0
+ set S0, P0
+ eq S0, "-1", OK5
+ print "not "
+OK5: print "ok 5\n"
+
+ set P0, "1.23e23"
+ set S0, P0
+ eq S0, "1.23e23", OK6
+ print "not "
+OK6: print "ok 6\n"
+
+ end
+CODE
+ok 1
+ok 2
+ok 3
+ok 4
+ok 5
+ok 6
+OUTPUT
+
output_is(<<CODE, <<OUTPUT, "if (P) - Int");
new P0, .PerlInt
@@ -440,6 +1195,120 @@
ok
OUTPUT
+
+output_is(<<CODE, <<OUTPUT, "mul_p_p, PerlInt");
[EMAIL PROTECTED] $fp_equality_macro ]}
+ new P0,.PerlInt
+ new P1,.PerlInt
+ set P0,8
+ set P1,2
+ mul P0,P1
+ .fp_eq(P0,16,EQ1)
+ print "not "
+EQ1: print "ok 1"
+ print "\\n"
+
+ new P2, .PerlNum
+ set P2, 0.0625
+ mul P0, P2
+ .fp_eq(P0,1,EQ2)
+ print "not "
+EQ2: print "ok 2"
+ print "\\n"
+ end
+CODE
+ok 1
+ok 2
+OUTPUT
+
+
+output_is(<<CODE, <<OUTPUT, "mul_p_p, PerlNum");
[EMAIL PROTECTED] $fp_equality_macro ]}
+ new P0,.PerlNum
+ new P1,.PerlNum
+ set P0,-2.5
+ set P1,2.5
+ mul P0,P1
+ .fp_eq(P0,-6.25,EQ1)
+ print "not "
+EQ1: print "ok 1"
+ print "\\n"
+
+ new P2, .PerlInt
+ set P2, 2
+ mul P0, P2
+ .fp_eq(P0,-12.5,EQ2)
+ print "not "
+EQ2: print "ok 2"
+ print "\\n"
+
+ end
+CODE
+ok 1
+ok 2
+OUTPUT
+
+
+output_is(<<CODE, <<OUTPUT, "mul_p_i, PerlInt");
[EMAIL PROTECTED] $fp_equality_macro ]}
+ new P0,.PerlInt
+ set P0,8
+ mul P0,2
+ .fp_eq(P0,16,EQ1)
+ print "not "
+EQ1: print "ok 1"
+ print "\\n"
+ end
+CODE
+ok 1
+OUTPUT
+
+
+output_is(<<CODE, <<OUTPUT, "div_p_i, PerlInt");
[EMAIL PROTECTED] $fp_equality_macro ]}
+ new P0,.PerlInt
+ set P0,8
+ div P0,2
+ .fp_eq(P0,4,EQ1)
+ print "not "
+EQ1: print "ok 1"
+ print "\\n"
+ end
+CODE
+ok 1
+OUTPUT
+
+
+output_is(<<CODE, <<OUTPUT, "mod_p_i, PerlInt");
[EMAIL PROTECTED] $fp_equality_macro ]}
+ new P0,.PerlInt
+ set P0,3
+ mod P0,6
+ .fp_eq(P0,3,EQ1)
+ print "not "
+EQ1: print "ok 1"
+ print "\\n"
+ end
+CODE
+ok 1
+OUTPUT
+
+output_is(<<CODE, <<OUTPUT, "mod_p_p_i, PerlInt");
[EMAIL PROTECTED] $fp_equality_macro ]}
+ new P0,.PerlInt
+ set P0,7
+ new P1,.PerlInt
+ mod P1, P0, 6
+ .fp_eq(P1,1,EQ1)
+ print "not "
+EQ1: print "ok 1"
+ print "\\n"
+ end
+CODE
+ok 1
+OUTPUT
+
+
output_is(<<CODE, <<OUTPUT, "typeof");
new P0,.PerlInt
typeof S0,P0
@@ -538,112 +1407,100 @@
ok 2
OUTPUT
-output_is(<<CODE, <<OUTPUT, "mul_p_p, PerlInt");
[EMAIL PROTECTED] $fp_equality_macro ]}
- new P0,.PerlInt
- new P1,.PerlInt
- set P0,8
- set P1,2
- mul P0,P1
- .fp_eq(P0,16,EQ1)
- print "not "
-EQ1: print "ok 1"
- print "\\n"
+output_is(<<'CODE', <<OUTPUT, "assign integer");
+ new P0, .PerlInt
+ assign P0, 42
+ print P0
+ print "\n"
- new P2, .PerlNum
- set P2, 0.0625
- mul P0, P2
- .fp_eq(P0,1,EQ2)
- print "not "
-EQ2: print "ok 2"
- print "\\n"
- end
+ new P1, .PerlNum
+ assign P1, 21
+ print P1
+ print "\n"
+
+ new P2, .PerlString
+ assign P2, 7
+ print P2
+ print "\n"
+
+ new P3, .PerlUndef
+ assign P3, 1
+ print P3
+ print "\n"
+
+ end
CODE
-ok 1
-ok 2
+42
+21
+7
+1
OUTPUT
-output_is(<<CODE, <<OUTPUT, "mul_p_p, PerlNum");
+output_is(<<"CODE", <<OUTPUT, "assign number");
@{[ $fp_equality_macro ]}
- new P0,.PerlNum
- new P1,.PerlNum
- set P0,-2.5
- set P1,2.5
- mul P0,P1
- .fp_eq(P0,-6.25,EQ1)
- print "not "
-EQ1: print "ok 1"
- print "\\n"
+ new P0, .PerlInt
+ assign P0, 42.21
+ .fp_eq(P0, 42.21, OK1)
+ print "not "
+OK1:
+ print "ok 1\\n"
- new P2, .PerlInt
- set P2, 2
- mul P0, P2
- .fp_eq(P0,-12.5,EQ2)
- print "not "
-EQ2: print "ok 2"
- print "\\n"
+ new P1, .PerlNum
+ assign P1, 21.01
+ .fp_eq(P1, 21.01, OK2)
+ print "not "
+OK2:
+ print "ok 2\\n"
- end
+ new P2, .PerlString
+ assign P2, 7.65
+ .fp_eq(P2, 7.65, OK3)
+ print "not "
+OK3:
+ print "ok 3\\n"
+
+ new P3, .PerlUndef
+ assign P3, 1.23
+ .fp_eq(P3, 1.23, OK4)
+ print "not "
+OK4:
+ print "ok 4\\n"
+
+ end
CODE
ok 1
ok 2
+ok 3
+ok 4
OUTPUT
-output_is(<<CODE, <<OUTPUT, "mul_p_i, PerlInt");
[EMAIL PROTECTED] $fp_equality_macro ]}
- new P0,.PerlInt
- set P0,8
- mul P0,2
- .fp_eq(P0,16,EQ1)
- print "not "
-EQ1: print "ok 1"
- print "\\n"
- end
-CODE
-ok 1
-OUTPUT
+output_is(<<'CODE', <<OUTPUT, "assign string");
+ new P0, .PerlInt
+ assign P0, "Albert"
+ print P0
+ print "\n"
-output_is(<<CODE, <<OUTPUT, "div_p_i, PerlInt");
[EMAIL PROTECTED] $fp_equality_macro ]}
- new P0,.PerlInt
- set P0,8
- div P0,2
- .fp_eq(P0,4,EQ1)
- print "not "
-EQ1: print "ok 1"
- print "\\n"
- end
-CODE
-ok 1
-OUTPUT
+ new P1, .PerlNum
+ assign P1, "Beth"
+ print P1
+ print "\n"
-output_is(<<CODE, <<OUTPUT, "mod_p_i, PerlInt");
[EMAIL PROTECTED] $fp_equality_macro ]}
- new P0,.PerlInt
- set P0,3
- mod P0,6
- .fp_eq(P0,3,EQ1)
- print "not "
-EQ1: print "ok 1"
- print "\\n"
- end
-CODE
-ok 1
-OUTPUT
+ new P2, .PerlString
+ assign P2, "Charlie"
+ print P2
+ print "\n"
-output_is(<<CODE, <<OUTPUT, "mod_p_p_i, PerlInt");
[EMAIL PROTECTED] $fp_equality_macro ]}
- new P0,.PerlInt
- set P0,7
- new P1,.PerlInt
- mod P1, P0, 6
- .fp_eq(P1,1,EQ1)
- print "not "
-EQ1: print "ok 1"
- print "\\n"
- end
+ new P3, .PerlUndef
+ assign P3, "Doris"
+ print P3
+ print "\n"
+
+ end
CODE
-ok 1
+Albert
+Beth
+Charlie
+Doris
OUTPUT
my $checkTypes;
@@ -709,6 +1566,559 @@
returncc
CODE
All names and ids ok.
+OUTPUT
+
+output_is(<<'CODE', <<OUTPUT, "eq_p_p");
+ new P0, .PerlInt
+ new P1, .PerlInt
+
+ set P0, 10
+ set P1, 10
+
+ eq P0, P1, OK1
+ print "not "
+OK1: print "ok 1\n"
+
+ set P0, 11
+ eq P0, P1, BAD2
+ branch OK2
+BAD2: print "not ok 2\n"
+OK2: print "ok 2\n"
+
+ new P0, .PerlNum
+ new P1, .PerlNum
+
+ set N0, 4.5
+ set P0, N0
+ set P1, N0
+
+ eq P0, P1, OK3
+ print "not "
+OK3: print "ok 3\n"
+
+ set P0, 0.0
+ eq P0, P1, BAD4
+ branch OK4
+BAD4: print "not ok 4\n"
+OK4: print "ok 4\n"
+
+ new P0, .PerlString
+ new P1, .PerlString
+
+ set S0, "Artichoke"
+ set P0, S0
+ set P1, S0
+
+ eq P0, P1, OK5
+ print "not "
+OK5: print "ok 5\n"
+
+ set P0, "Cabbage"
+ eq P0, P1, BAD6
+ branch OK6
+BAD6: print "not ok 6\n"
+OK6: print "ok 6\n"
+
+ new P0, .PerlUndef
+ new P1, .PerlUndef
+
+ eq P0, P1, OK7
+ print "not "
+OK7: print "ok 7\n"
+
+ set P1, 100
+ eq P0, P1, BAD8
+ branch OK8
+BAD8: print "not ok 8\n"
+OK8: print "ok 8\n"
+
+ set P1, 5.5
+ eq P0, P1, BAD9
+ branch OK9
+BAD9: print "not ok 9\n"
+OK9: print "ok 9\n"
+
+ set P1, "true"
+ eq P0, P1, BAD10
+ branch OK10
+BAD10: print "not ok 10\n"
+OK10: print "ok 10\n"
+
+ end
+CODE
+ok 1
+ok 2
+ok 3
+ok 4
+ok 5
+ok 6
+ok 7
+ok 8
+ok 9
+ok 10
+OUTPUT
+
+output_is(<<'CODE', <<OUTPUT, "eq_p_i");
+ set I0, 12
+
+ new P0, .PerlInt
+ set P0, I0
+ eq P0, I0, OK1
+ print "not "
+OK1: print "ok 1\n"
+
+ new P0, .PerlNum
+ set P0, I0
+ eq P0, I0, OK2
+ print "not "
+OK2: print "ok 2\n"
+
+ new P0, .PerlString
+ set P0, I0
+ eq P0, I0, OK3
+ print "not "
+OK3: print "ok 3\n"
+
+ new P0, .PerlUndef
+ eq P0, I0, BAD4
+ branch OK4
+BAD4: print "not "
+OK4: print "ok 4\n"
+
+ set P0, I0
+ eq P0, I0, OK5
+ print "not "
+OK5: print "ok 5\n"
+ end
+CODE
+ok 1
+ok 2
+ok 3
+ok 4
+ok 5
+OUTPUT
+
+output_is(<<'CODE', <<OUTPUT, "ne_p_p");
+ new P0, .PerlInt
+ new P1, .PerlInt
+
+ set P0, 1
+ set P1, 11
+
+ ne P0, P1, OK1
+ print "not "
+OK1: print "ok 1\n"
+
+ set P0, 11
+ ne P0, P1, BAD2
+ branch OK2
+BAD2: print "not ok 2\n"
+OK2: print "ok 2\n"
+
+ new P0, .PerlNum
+ new P1, .PerlNum
+
+ set N0, 4.5
+ set P0, N0
+ set P1, 0.0
+
+ ne P0, P1, OK3
+ print "not "
+OK3: print "ok 3\n"
+
+ set P1, N0
+ ne P0, P1, BAD4
+ branch OK4
+BAD4: print "not ok 4\n"
+OK4: print "ok 4\n"
+
+ new P0, .PerlString
+ new P1, .PerlString
+
+ set S0, "Artichoke"
+ set P0, S0
+ set P1, "Artichoke..."
+
+ ne P0, P1, OK5
+ print "not "
+OK5: print "ok 5\n"
+
+ set P1, S0
+ ne P0, P1, BAD6
+ branch OK6
+BAD6: print "not ok 6\n"
+OK6: print "ok 6\n"
+ end
+CODE
+ok 1
+ok 2
+ok 3
+ok 4
+ok 5
+ok 6
+OUTPUT
+
+output_is(<<'CODE', <<OUTPUT, "lt_p_p");
+ new P0, .PerlInt
+ new P1, .PerlInt
+
+ set P0, 1
+ set P1, -1
+
+ lt P1, P0, OK1
+ print "not "
+OK1: print "ok 1\n"
+
+ lt P0, P1, BAD2
+ branch OK2
+BAD2: print "not ok 2\n"
+OK2: print "ok 2\n"
+
+ lt P1, P1, BAD3
+ branch OK3
+BAD3: print "not ok 3\n"
+OK3: print "ok 3\n"
+
+ new P2, .PerlNum
+ new P3, .PerlNum
+
+ set P2, 12.49
+ set P3, 12.5
+
+ lt P2, P3, OK4
+ print "not "
+OK4: print "ok 4\n"
+
+ lt P3, P2, BAD5
+ branch OK5
+BAD5: print "not ok 5\n"
+OK5: print "ok 5\n"
+
+ lt P3, P3, BAD6
+ branch OK6
+BAD6: print "not ok 6\n"
+OK6: print "ok 6\n"
+
+ end
+
+
+CODE
+ok 1
+ok 2
+ok 3
+ok 4
+ok 5
+ok 6
+OUTPUT
+
+output_is(<<'CODE', <<OUTPUT, "lt_p_i");
+ new P0, .PerlInt
+ set P0, 1
+
+ lt P0, 2, OK1
+ print "not "
+OK1: print "ok 1\n"
+
+ lt P0, 0, BAD2
+ branch OK2
+BAD2: print "not ok 2\n"
+OK2: print "ok 2\n"
+
+ new P2, .PerlNum
+ set P2, 12.49
+ set I2, 15
+
+ lt P2, I2, OK3
+ print "not "
+OK3: print "ok 3\n"
+
+ set I2, 10
+ lt P2, I2, BAD4
+ branch OK4
+BAD4: print "not ok 4\n"
+OK4: print "ok 4\n"
+
+ end
+CODE
+ok 1
+ok 2
+ok 3
+ok 4
+OUTPUT
+
+output_is(<<'CODE', <<OUTPUT, "le_p_p");
+ new P0, .PerlInt
+ new P1, .PerlInt
+
+ set P0, 1
+ set P1, -1
+
+ le P1, P0, OK1
+ print "not "
+OK1: print "ok 1\n"
+
+ le P0, P1, BAD2
+ branch OK2
+BAD2: print "not ok 2\n"
+OK2: print "ok 2\n"
+
+ le P1, P1, OK3
+ print "not "
+OK3: print "ok 3\n"
+
+ new P2, .PerlNum
+ new P3, .PerlNum
+
+ set P2, 12.49
+ set P3, 12.5
+
+ le P2, P3, OK4
+ print "not "
+OK4: print "ok 4\n"
+
+ le P3, P2, BAD5
+ branch OK5
+BAD5: print "not ok 5\n"
+OK5: print "ok 5\n"
+
+ le P3, P3, OK6
+ print "not "
+OK6: print "ok 6\n"
+
+ end
+
+
+CODE
+ok 1
+ok 2
+ok 3
+ok 4
+ok 5
+ok 6
+OUTPUT
+
+output_is(<<'CODE', <<OUTPUT, "le_p_i");
+ new P0, .PerlInt
+ set P0, 1
+
+ le P0, 1, OK1
+ print "not "
+OK1: print "ok 1\n"
+
+ le P0, 0, BAD2
+ branch OK2
+BAD2: print "not ok 2\n"
+OK2: print "ok 2\n"
+
+ le P0, 2, OK3
+ print "not "
+OK3: print "ok 3\n"
+
+ new P2, .PerlNum
+ set P2, 12.0
+
+ le P2, 12, OK4
+ print "not "
+OK4: print "ok 4\n"
+
+ le P2, 11, BAD5
+ branch OK5
+BAD5: print "not ok 5\n"
+OK5: print "ok 5\n"
+
+ le P2, 13, OK6
+ print "not "
+OK6: print "ok 6\n"
+
+ end
+CODE
+ok 1
+ok 2
+ok 3
+ok 4
+ok 5
+ok 6
+OUTPUT
+
+output_is(<<'CODE', <<OUTPUT, "gt_p_p");
+ new P0, .PerlInt
+ new P1, .PerlInt
+
+ set P0, 10
+ set P1, 0
+
+ gt P0, P1, OK1
+ print "not "
+OK1: print "ok 1\n"
+
+ gt P1, P0, BAD2
+ branch OK2
+BAD2: print "not ok 2\n"
+OK2: print "ok 2\n"
+
+ gt P1, P1, BAD3
+ branch OK3
+BAD3: print "not ok 3\n"
+OK3: print "ok 3\n"
+
+ new P2, .PerlNum
+ new P3, .PerlNum
+
+ set P2, 1000.0
+ set P3, 1000000.0
+
+ gt P3, P2, OK4
+ print "not "
+OK4: print "ok 4\n"
+
+ gt P2, P3, BAD5
+ branch OK5
+BAD5: print "not ok 5\n"
+OK5: print "ok 5\n"
+
+ gt P3, P3, BAD6
+ branch OK6
+BAD6: print "not ok 6\n"
+OK6: print "ok 6\n"
+
+ end
+
+
+CODE
+ok 1
+ok 2
+ok 3
+ok 4
+ok 5
+ok 6
+OUTPUT
+
+output_is(<<'CODE', <<OUTPUT, "ge_p_p");
+ new P0, .PerlInt
+ new P1, .PerlInt
+
+ set P0, 10
+ set P1, 0
+
+ ge P0, P1, OK1
+ print "not "
+OK1: print "ok 1\n"
+
+ ge P1, P0, BAD2
+ branch OK2
+BAD2: print "not ok 2\n"
+OK2: print "ok 2\n"
+
+ ge P1, P1, OK3
+ print "not "
+OK3: print "ok 3\n"
+
+ new P2, .PerlNum
+ new P3, .PerlNum
+
+ set P2, 1000.0
+ set P3, 1000000.0
+
+ ge P3, P2, OK4
+ print "not "
+OK4: print "ok 4\n"
+
+ ge P2, P3, BAD5
+ branch OK5
+BAD5: print "not ok 5\n"
+OK5: print "ok 5\n"
+
+ ge P3, P3, OK6
+ print "not "
+OK6: print "ok 6\n"
+
+ end
+
+
+CODE
+ok 1
+ok 2
+ok 3
+ok 4
+ok 5
+ok 6
+OUTPUT
+
+output_is(<<'CODE', <<OUTPUT, "neg_p_p");
+ new P0, .PerlInt
+ new P1, .PerlInt
+
+ set P0, 12
+ neg P1, P0
+ print P1
+ print "\n"
+
+ new P0, .PerlNum
+ new P1, .PerlNum
+ set N0, -12.345678
+
+ set P0, N0
+ neg P1, P0
+ print P1
+ print "\n"
+
+ new P0, .PerlInt
+ new P1, .PerlNum
+
+ set P0, 1
+ neg P1, P0
+ print P1
+ print "\n"
+
+ new P0, .PerlNum
+ new P1, .PerlInt
+
+ set P0, 1.234567
+ neg P1, P0
+ print P1
+ print "\n"
+
+ new P0, .PerlInt
+ set P0, 25
+ neg P0, P0
+ print P0
+ print "\n"
+
+ new P0, .PerlNum
+ set P0, -12.098765
+ neg P0, P0
+ print P0
+ print "\n"
+
+ end
+
+CODE
+-12
+12.345678
+-1
+-1.234567
+-25
+12.098765
+OUTPUT
+
+output_is(<<'CODE', <<OUTPUT, "neg_p");
+ new P0, .PerlInt
+ set P0, 12
+ neg P0
+ print P0
+ print "\n"
+
+ new P0, .PerlNum
+ set N0, -12.345678
+ set P0, N0
+ neg P0
+ print P0
+ print "\n"
+
+ end
+CODE
+-12
+12.345678
OUTPUT
output_is(<<'CODE', <<OUTPUT, "assign Px,Py");