t/op/coresubs.t: factor out an internal routine
authorAaron Crane <arc@cpan.org>
Tue, 15 Jul 2014 17:25:22 +0000 (18:25 +0100)
committerAaron Crane <arc@cpan.org>
Fri, 1 Aug 2014 15:29:27 +0000 (16:29 +0100)
This routine will be used in the next commit. I believe that the behaviour
of the tests remains unchanged after this commit.

t/op/coresubs.t

index 2e93c71..4443e10 100644 (file)
@@ -53,7 +53,7 @@ while(<$kh>) {
       ok !defined &{"CORE::$word"}, "no CORE::$word";
     }
     else {
-      $tests += 4;
+      $tests += 2;
 
       ok defined &{"CORE::$word"}, "defined &{'CORE::$word'}";
 
@@ -65,23 +65,8 @@ while(<$kh>) {
       my $numargs =
             $word eq 'delete' || $word eq 'exists' ? 1 :
             (() = $proto =~ s/;.*//r =~ /\G$protochar/g);
-      my $code =
-         "#line 1 This-line-makes-__FILE__-easier-to-test.
-          sub { () = (my$word("
-             . ($args_for{$word} || join ",", map "\$$_", 1..$numargs)
-       . "))}";
-      my $core = $bd->coderef2text(eval $code =~ s/my/CORE::/r or die);
-      my $my   = $bd->coderef2text(eval $code or die);
-      is $my, $core, "inlinability of CORE::$word with parens";
 
-      $code =
-         "#line 1 This-line-makes-__FILE__-easier-to-test.
-          sub { () = (my$word "
-             . ($args_for{$word} || join ",", map "\$$_", 1..$numargs)
-       . ")}";
-      $core = $bd->coderef2text(eval $code =~ s/my/CORE::/r or die);
-      $my   = $bd->coderef2text(eval $code or die);
-      is $my, $core, "inlinability of CORE::$word without parens";
+      inlinable_ok($word, $args_for{$word} || join ",", map "\$$_", 1..$numargs);
 
       # High-precedence tests
       my $hpcode;
@@ -130,6 +115,24 @@ while(<$kh>) {
   }
 }
 
+sub inlinable_ok {
+  my ($word, $args, $desc_suffix) = @_;
+  $tests += 2;
+
+  $desc_suffix //= '';
+
+  for ([with => "($args)"], [without => " $args"]) {
+    my ($preposition, $full_args) = @$_;
+    my $core_code =
+       "#line 1 This-line-makes-__FILE__-easier-to-test.
+        sub { () = (CORE::$word$full_args) }";
+    my $my_code = $core_code =~ s/CORE::$word/my$word/r;
+    my $core = $bd->coderef2text(eval $core_code or die);
+    my $my   = $bd->coderef2text(eval   $my_code or die);
+    is $my, $core, "inlinability of CORE::$word $preposition parens $desc_suffix";
+  }
+}
+
 $tests++;
 # This subroutine is outside the warnings scope:
 sub foo { goto &CORE::abs }