# New Ticket Created by  Steven Schubiger 
# Please include the string:  [perl #34529]
# in the subject line of all future correspondence about this issue. 
# <URL: https://rt.perl.org/rt3/Ticket/Display.html?id=34529 >


> 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

Index: t/pmc/perlint.t
===================================================================
RCS file: /cvs/public/parrot/t/pmc/perlint.t,v
retrieving revision 1.22
diff -u -r1.22 perlint.t
--- t/pmc/perlint.t     Fri Mar  4 18:49:11 2005
+++ t/pmc/perlint.t     Tue Mar 22 03:32:59 2005
@@ -16,7 +16,7 @@
 
 =cut
 
-use Parrot::Test tests => 30;
+use Parrot::Test tests => 60;
 use Parrot::PMC '%pmc_types';
 my $perlint = $pmc_types{'PerlInt'};
 my $ok = '"ok 1\n"';
@@ -114,7 +114,47 @@
 ok 2
 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/print integer");
+       new P0, .PerlInt
+       set P0, 123
+       print P0
+       print "\n"
+       end
+CODE
+123
+OUTPUT
+
 output_is(<<'CODE', <<'OUTPUT', "bor");
     new P0, .PerlInt
     set P0, 0b11110000
@@ -468,6 +508,113 @@
 division by zero!
 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
+
 output_is(<<'CODE', <<OUTPUT, "subtract native integer from PerlInt");
        new P0, .PerlInt
        new P1, .PerlInt
@@ -670,6 +817,168 @@
 4143
 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
+
+#
+# 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, "assign integer");
+    new P0, .PerlInt
+    assign P0, 42
+    print P0
+    print "\n"
+
+    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
+42
+21
+7
+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, "(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, "logical or");
         new P0, .PerlInt
         new P1, .PerlInt
@@ -968,6 +1277,559 @@
 ok 4
 ok 5
 ok 6
+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
 
 pir_output_is(<< 'CODE', << 'OUTPUT', "check whether interface is done");

Reply via email to