blob: c93e4f63d2d68b1cfe7250fa06bcfa9d177f80b3 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
|
#!./perl
BEGIN {
chdir 't' if -d 't';
@INC = '../lib';
}
$Ok_Level = 0;
my $test = 1;
sub ok ($;$) {
my($ok, $name) = @_;
local $_;
# You have to do it this way or VMS will get confused.
printf "%s $test%s\n", $ok ? 'ok' : 'not ok',
$name ? " - $name" : '';
printf "# Failed test at line %d\n", (caller($Ok_Level))[2] unless $ok;
$test++;
return $ok;
}
sub nok ($;$) {
my($nok, $name) = @_;
local $Ok_Level = 1;
ok( !$nok, $name );
}
use Config;
my $have_alarm = $Config{d_alarm};
sub alarm_ok (&) {
my $test = shift;
local $SIG{ALRM} = sub { die "timeout\n" };
my $match;
eval {
alarm(2) if $have_alarm;
$match = $test->();
alarm(0) if $have_alarm;
};
local $Ok_Level = 1;
ok( !$match && !$@, 'testing studys that used to hang' );
}
print "1..26\n";
$x = "abc\ndef\n";
study($x);
ok($x =~ /^abc/);
ok($x !~ /^def/);
$* = 1;
ok($x =~ /^def/);
$* = 0;
$_ = '123';
study;
ok(/^([0-9][0-9]*)/);
nok($x =~ /^xxx/);
nok($x !~ /^abc/);
ok($x =~ /def/);
nok($x !~ /def/);
study($x);
ok($x !~ /.def/);
nok($x =~ /.def/);
ok($x =~ /\ndef/);
nok($x !~ /\ndef/);
$_ = 'aaabbbccc';
study;
ok(/(a*b*)(c*)/ && $1 eq 'aaabbb' && $2 eq 'ccc');
ok(/(a+b+c+)/ && $1 eq 'aaabbbccc');
nok(/a+b?c+/);
$_ = 'aaabccc';
study;
ok(/a+b?c+/);
ok(/a*b+c*/);
$_ = 'aaaccc';
study;
ok(/a*b?c*/);
nok(/a*b+c*/);
$_ = 'abcdef';
study;
ok(/bcd|xyz/);
ok(/xyz|bcd/);
ok(m|bc/*d|);
ok(/^$_$/);
$* = 1; # test 3 only tested the optimized version--this one is for real
ok("ab\ncd\n" =~ /^cd/);
if ($^O eq 'os390' or $^O eq 'posix-bc' or $^O eq 'MacOS') {
# Even with the alarm() OS/390 and BS2000 can't manage these tests
# (Perl just goes into a busy loop, luckily an interruptable one)
for (25..26) { print "not ok $_ # TODO compiler bug?\n" }
$test += 2;
} else {
# [ID 20010618.006] tests 25..26 may loop
$_ = 'FGF';
study;
alarm_ok { /G.F$/ };
alarm_ok { /[F]F$/ };
}
|