On Thu, Jul 14, 2005 at 03:52:45AM -0700, Michael G Schwern via RT wrote:
> I believe this bug is fixed but I'd like to see a test added before
> closing it.  The regex tests scare me.

Here's one way.  Line 614 of t/op/re_tests fits the bill.  I'm a little
disappointed that this patch didn't shake out any more bugs.  I guess
we're getting close to a bug-free regex engine.  ;-)

If you don't like having an extra 900+ tests then I suppose adding a
line like:

    '$(?:)'m    b\na\n  y   $-[0]   1

or

    (?m:$)(?:)    b\na\n  y   $-[0]   1

to t/op/re_tests would suffice.  But that doesn't test the embedding of
a qr/pattern/m in another pattern.

-- 
Rick Delaney
[EMAIL PROTECTED]


diff -ruN perl-current/t/op/regexp.t perl-current-dev/t/op/regexp.t
--- perl-current/t/op/regexp.t  2004-11-04 05:56:08.000000000 -0500
+++ perl-current-dev/t/op/regexp.t      2005-07-14 09:11:33.293055207 -0400
@@ -74,7 +74,21 @@
     $result =~ s/B//i unless $skip;
     for $study ('', 'study \$subject') {
        $c = $iters;
-       eval "$study; \$match = (\$subject =~ $OP$pat) while \$c--; \$got = 
\"$repl\";";
+    if ($qr_embed) {
+           eval qq"
+            my \$RE = qr$pat;
+            $study;
+            \$match = (\$subject =~ /(?:)\$RE(?:)/) while \$c--;
+            \$got = \"$repl\";
+        ";
+    } 
+    else {
+           eval qq"
+            $study;
+            \$match = (\$subject =~ $OP$pat) while \$c--;
+            \$got = \"$repl\";
+        ";
+    }
        chomp( $err = $@ );
        if ($result eq 'c') {
            if ($err !~ m!^\Q$expect!) { print "not ok $. (compile) $input => 
`$err'\n"; next TEST }
diff -ruN perl-current/t/op/regexp_qr_embed.t 
perl-current-dev/t/op/regexp_qr_embed.t
--- perl-current/t/op/regexp_qr_embed.t 1969-12-31 19:00:00.000000000 -0500
+++ perl-current-dev/t/op/regexp_qr_embed.t     2005-07-14 09:56:24.497124417 
-0400
@@ -0,0 +1,11 @@
+#!./perl
+
+$qr = 1;
+$qr_embed = 1;
+for $file ('./op/regexp.t', './t/op/regexp.t', ':op:regexp.t') {
+    if (-r $file) {
+       do $file;
+       exit;
+    }
+}
+die "Cannot find ./op/regexp.t or ./t/op/regexp.t\n";

Reply via email to