#!./perl -w
BEGIN {
chdir 't' if -d 't';
@INC = '../lib';
require './test.pl';
}
watchdog(10);
plan(tests => 43);
use strict;
use vars '$x';
use Config;
my $have_alarm = $Config{d_alarm};
$x = "abc\ndef\n";
study($x);
ok($x =~ /^abc/);
ok($x !~ /^def/);
# used to be a test for $*
ok($x =~ /^def/m);
$_ = '123';
study;
ok(/^([0-9][0-9]*)/);
ok(!($x =~ /^xxx/));
ok(!($x !~ /^abc/));
ok($x =~ /def/);
ok(!($x !~ /def/));
study($x);
ok($x !~ /.def/);
ok(!($x =~ /.def/));
ok($x =~ /\ndef/);
ok(!($x !~ /\ndef/));
$_ = 'aaabbbccc';
study;
ok(/(a*b*)(c*)/);
is($1, 'aaabbb');
is($2,'ccc');
ok(/(a+b+c+)/);
is($1, 'aaabbbccc');
ok(!/a+b?c+/);
$_ = 'aaabccc';
study;
ok(/a+b?c+/);
ok(/a*b+c*/);
$_ = 'aaaccc';
study;
ok(/a*b?c*/);
ok(!/a*b+c*/);
$_ = 'abcdef';
study;
ok(/bcd|xyz/);
ok(/xyz|bcd/);
ok(m|bc/*d|);
ok(/^$_$/);
# used to be a test for $*
ok("ab\ncd\n" =~ /^cd/m);
TODO: {
# Even with the alarm() OS/390 and BS2000 can't manage these tests
# (Perl just goes into a busy loop, luckily an interruptable one)
todo_skip('busy loop - compiler bug?', 2)
if $^O eq 'os390' or $^O eq 'posix-bc';
# [ID ] tests 25..26 may loop
$_ = 'FGF';
study;
ok(!/G.F$/, 'bug 20010618.006');
ok(!/[F]F$/, 'bug 20010618.006');
}
{
my $a = 'QaaQaabQaabbQ';
study $a;
my @a = split /aab*/, $a;
is("@a", 'Q Q Q Q', 'split with studied string passed to the regep engine');
}
{
$_ = "AABBAABB";
study;
is(s/AB+/1/ge, 2, 'studied scalar passed to pp_substconst');
is($_, 'A1A1');
}
{
$_ = "AABBAABB";
study;
is(s/(A)B+/1/ge, 2,
'studied scalar passed to pp_substconst with RX_MATCH_COPIED() true');
is($1, 'A');
is($2, undef);
is($_, 'A1A1');
}
{
my @got;
$a = "ydydydyd";
$b = "xdx";
push @got, $_ foreach $a =~ /[^x]d(?{})[^x]d/g;
is("@got", 'ydyd ydyd', '#92696 control');
@got = ();
$a = "ydydydyd";
$b = "xdx";
study $a;
push @got, $_ foreach $a =~ /[^x]d(?{})[^x]d/g;
is("@got", 'ydyd ydyd', '#92696 study $a');
@got = ();
$a = "ydydydyd";
$b = "xdx";
study $b;
push @got, $_ foreach $a =~ /[^x]d(?{})[^x]d/g;
is("@got", 'ydyd ydyd', '#92696 study $b');
@got = ();
$a = "ydydydyd";
$b = "xdx";
push @got, $_ foreach $a =~ /[^x]d(?{study $b})[^x]d/g;
is("@got", 'ydyd ydyd', '#92696 study $b inside (?{}), nothing studied');
@got = ();
$a = "ydydydyd";
$b = "xdx";
my $c = 'zz';
study $c;
push @got, $_ foreach $a =~ /[^x]d(?{study $b})[^x]d/g;
is("@got", 'ydyd ydyd', '#92696 study $b inside (?{}), $c studied');
@got = ();
$a = "ydydydyd";
$b = "xdx";
study $a;
push @got, $_ foreach $a =~ /[^x]d(?{study $b})[^x]d/g;
is("@got", 'ydyd ydyd', '#92696 study $b inside (?{}), $a studied');
@got = ();
$a = "ydydydyd";
$b = "xdx";
study $a;
push @got, $_ foreach $a =~ /[^x]d(?{$a .= ''})[^x]d/g;
is("@got", 'ydyd ydyd', '#92696 $a .= \'\' inside (?{}), $a studied');
}