add some basic floating /\G/ tests
authorDavid Mitchell <davem@iabyn.com>
Thu, 20 Jun 2013 13:22:42 +0000 (14:22 +0100)
committerDavid Mitchell <davem@iabyn.com>
Sun, 28 Jul 2013 09:33:36 +0000 (10:33 +0100)
Floating is when the \G is an unknown number of characters from the start
of the pattern, such as /a+\G/. Surprisingly, there were no tests for this
form.

Here are a few basic tests just to exercise the main code paths. More
comprehensive tests could do with being added at some point.

t/re/pat.t

index a96b758..2071666 100644 (file)
@@ -20,7 +20,7 @@ BEGIN {
     require './test.pl';
 }
 
-plan tests => 670;  # Update this when adding/deleting tests.
+plan tests => 681;  # Update this when adding/deleting tests.
 
 run_tests() unless caller;
 
@@ -824,6 +824,36 @@ sub run_tests {
     }
 
     {
+        my $message = 'basic \G floating checks';
+        my $foo = 'aabbccddeeffgg';
+        pos ($foo) = 1;
+
+       ok($foo =~ /a+\G(..)/g, "$message: a+\\G");
+       is($1, 'ab', "$message: ab");
+
+       pos ($foo) += 1;
+       ok($foo =~ /b+\G(..)/g, "$message: b+\\G");
+       is($1, 'cc', "$message: cc");
+
+       pos ($foo) += 1;
+       ok($foo =~ /d+\G(..)/g, "$message: d+\\G");
+       is($1, 'de', "$message: de");
+
+       ok($foo =~ /\Gef/g, "$message: \\Gef");
+
+        pos ($foo) = 1;
+
+       ok($foo =~ /(?=a+\G)(..)/g, "$message: (?a+\\G)");
+       is($1, 'aa', "$message: aa");
+
+        pos ($foo) = 2;
+
+       ok($foo =~ /a(?=a+\G)(..)/g, "$message: a(?=a+\\G)");
+       is($1, 'ab', "$message: ab");
+
+    }
+
+    {
         $_ = '123x123';
         my @res = /(\d*|x)/g;
         local $" = '|';