1#!./perl -w 2 3BEGIN { 4 chdir 't' if -d 't'; 5 require './test.pl'; 6 set_up_inc('../lib'); 7} 8 9watchdog(10); 10plan(tests => 43); 11use strict; 12 13use Config; 14my $have_alarm = $Config{d_alarm}; 15 16our $x = "abc\ndef\n"; 17study($x); 18 19ok($x =~ /^abc/); 20ok($x !~ /^def/); 21 22# used to be a test for $* 23ok($x =~ /^def/m); 24 25$_ = '123'; 26study; 27ok(/^([0-9][0-9]*)/); 28 29ok(!($x =~ /^xxx/)); 30ok(!($x !~ /^abc/)); 31 32ok($x =~ /def/); 33ok(!($x !~ /def/)); 34 35study($x); 36ok($x !~ /.def/); 37ok(!($x =~ /.def/)); 38 39ok($x =~ /\ndef/); 40ok(!($x !~ /\ndef/)); 41 42$_ = 'aaabbbccc'; 43study; 44ok(/(a*b*)(c*)/); 45is($1, 'aaabbb'); 46is($2,'ccc'); 47ok(/(a+b+c+)/); 48is($1, 'aaabbbccc'); 49 50ok(!/a+b?c+/); 51 52$_ = 'aaabccc'; 53study; 54ok(/a+b?c+/); 55ok(/a*b+c*/); 56 57$_ = 'aaaccc'; 58study; 59ok(/a*b?c*/); 60ok(!/a*b+c*/); 61 62$_ = 'abcdef'; 63study; 64ok(/bcd|xyz/); 65ok(/xyz|bcd/); 66 67ok(m|bc/*d|); 68 69ok(/^$_$/); 70 71# used to be a test for $* 72ok("ab\ncd\n" =~ /^cd/m); 73 74TODO: { 75 # Even with the alarm() OS/390 and BS2000 can't manage these tests 76 # (Perl just goes into a busy loop, luckily an interruptable one) 77 todo_skip('busy loop - compiler bug?', 2) 78 if $^O eq 'os390' or $^O eq 'posix-bc'; 79 80 # [ID ] tests 25..26 may loop 81 82 $_ = 'FGF'; 83 study; 84 ok(!/G.F$/, 'bug 20010618.006 (#7126)'); 85 ok(!/[F]F$/, 'bug 20010618.006 (#7126)'); 86} 87 88{ 89 my $a = 'QaaQaabQaabbQ'; 90 study $a; 91 my @a = split /aab*/, $a; 92 is("@a", 'Q Q Q Q', 'split with studied string passed to the regep engine'); 93} 94 95{ 96 $_ = "AABBAABB"; 97 study; 98 is(s/AB+/1/ge, 2, 'studied scalar passed to pp_substconst'); 99 is($_, 'A1A1'); 100} 101 102{ 103 $_ = "AABBAABB"; 104 study; 105 is(s/(A)B+/1/ge, 2, 106 'studied scalar passed to pp_substconst with RX_MATCH_COPIED() true'); 107 is($1, 'A'); 108 is($2, undef); 109 is($_, 'A1A1'); 110} 111 112{ 113 my @got; 114 $a = "ydydydyd"; 115 $b = "xdx"; 116 push @got, $_ foreach $a =~ /[^x]d(?{})[^x]d/g; 117 is("@got", 'ydyd ydyd', '#92696 control'); 118 119 @got = (); 120 $a = "ydydydyd"; 121 $b = "xdx"; 122 study $a; 123 push @got, $_ foreach $a =~ /[^x]d(?{})[^x]d/g; 124 is("@got", 'ydyd ydyd', '#92696 study $a'); 125 126 @got = (); 127 $a = "ydydydyd"; 128 $b = "xdx"; 129 study $b; 130 push @got, $_ foreach $a =~ /[^x]d(?{})[^x]d/g; 131 is("@got", 'ydyd ydyd', '#92696 study $b'); 132 133 @got = (); 134 $a = "ydydydyd"; 135 $b = "xdx"; 136 push @got, $_ foreach $a =~ /[^x]d(?{study $b})[^x]d/g; 137 is("@got", 'ydyd ydyd', '#92696 study $b inside (?{}), nothing studied'); 138 139 @got = (); 140 $a = "ydydydyd"; 141 $b = "xdx"; 142 my $c = 'zz'; 143 study $c; 144 push @got, $_ foreach $a =~ /[^x]d(?{study $b})[^x]d/g; 145 is("@got", 'ydyd ydyd', '#92696 study $b inside (?{}), $c studied'); 146 147 @got = (); 148 $a = "ydydydyd"; 149 $b = "xdx"; 150 study $a; 151 push @got, $_ foreach $a =~ /[^x]d(?{study $b})[^x]d/g; 152 is("@got", 'ydyd ydyd', '#92696 study $b inside (?{}), $a studied'); 153 154 @got = (); 155 $a = "ydydydyd"; 156 $b = "xdx"; 157 study $a; 158 push @got, $_ foreach $a =~ /[^x]d(?{$a .= ''})[^x]d/g; 159 is("@got", 'ydyd ydyd', '#92696 $a .= \'\' inside (?{}), $a studied'); 160} 161