source: trunk/essentials/dev-lang/perl/t/op/substr.t@ 3188

Last change on this file since 3188 was 3181, checked in by bird, 19 years ago

perl 5.8.8

File size: 15.7 KB
Line 
1#!./perl -w
2
3#P = start of string Q = start of substr R = end of substr S = end of string
4
5BEGIN {
6 chdir 't' if -d 't';
7 @INC = '../lib';
8}
9use warnings ;
10
11$a = 'abcdefxyz';
12$SIG{__WARN__} = sub {
13 if ($_[0] =~ /^substr outside of string/) {
14 $w++;
15 } elsif ($_[0] =~ /^Attempt to use reference as lvalue in substr/) {
16 $w += 2;
17 } elsif ($_[0] =~ /^Use of uninitialized value/) {
18 $w += 3;
19 } else {
20 warn $_[0];
21 }
22};
23
24require './test.pl';
25
26plan(325);
27
28$FATAL_MSG = qr/^substr outside of string/;
29
30is(substr($a,0,3), 'abc'); # P=Q R S
31is(substr($a,3,3), 'def'); # P Q R S
32is(substr($a,6,999), 'xyz'); # P Q S R
33$b = substr($a,999,999) ; # warn # P R Q S
34is ($w--, 1);
35eval{substr($a,999,999) = "" ; };# P R Q S
36like ($@, $FATAL_MSG);
37is(substr($a,0,-6), 'abc'); # P=Q R S
38is(substr($a,-3,1), 'x'); # P Q R S
39
40$[ = 1;
41
42is(substr($a,1,3), 'abc' ); # P=Q R S
43is(substr($a,4,3), 'def' ); # P Q R S
44is(substr($a,7,999), 'xyz');# P Q S R
45$b = substr($a,999,999) ; # warn # P R Q S
46is($w--, 1);
47eval{substr($a,999,999) = "" ; } ; # P R Q S
48like ($@, $FATAL_MSG);
49is(substr($a,1,-6), 'abc' );# P=Q R S
50is(substr($a,-3,1), 'x' ); # P Q R S
51
52$[ = 0;
53
54substr($a,3,3) = 'XYZ';
55is($a, 'abcXYZxyz' );
56substr($a,0,2) = '';
57is($a, 'cXYZxyz' );
58substr($a,0,0) = 'ab';
59is($a, 'abcXYZxyz' );
60substr($a,0,0) = '12345678';
61is($a, '12345678abcXYZxyz' );
62substr($a,-3,3) = 'def';
63is($a, '12345678abcXYZdef');
64substr($a,-3,3) = '<';
65is($a, '12345678abcXYZ<' );
66substr($a,-1,1) = '12345678';
67is($a, '12345678abcXYZ12345678' );
68
69$a = 'abcdefxyz';
70
71is(substr($a,6), 'xyz' ); # P Q R=S
72is(substr($a,-3), 'xyz' ); # P Q R=S
73$b = substr($a,999,999) ; # warning # P R=S Q
74is($w--, 1);
75eval{substr($a,999,999) = "" ; } ; # P R=S Q
76like($@, $FATAL_MSG);
77is(substr($a,0), 'abcdefxyz'); # P=Q R=S
78is(substr($a,9), ''); # P Q=R=S
79is(substr($a,-11), 'abcdefxyz'); # Q P R=S
80is(substr($a,-9), 'abcdefxyz'); # P=Q R=S
81
82$a = '54321';
83
84$b = substr($a,-7, 1) ; # warn # Q R P S
85is($w--, 1);
86eval{substr($a,-7, 1) = "" ; }; # Q R P S
87like($@, $FATAL_MSG);
88$b = substr($a,-7,-6) ; # warn # Q R P S
89is($w--, 1);
90eval{substr($a,-7,-6) = "" ; }; # Q R P S
91like($@, $FATAL_MSG);
92is(substr($a,-5,-7), ''); # R P=Q S
93is(substr($a, 2,-7), ''); # R P Q S
94is(substr($a,-3,-7), ''); # R P Q S
95is(substr($a, 2,-5), ''); # P=R Q S
96is(substr($a,-3,-5), ''); # P=R Q S
97is(substr($a, 2,-4), ''); # P R Q S
98is(substr($a,-3,-4), ''); # P R Q S
99is(substr($a, 5,-6), ''); # R P Q=S
100is(substr($a, 5,-5), ''); # P=R Q S
101is(substr($a, 5,-3), ''); # P R Q=S
102$b = substr($a, 7,-7) ; # warn # R P S Q
103is($w--, 1);
104eval{substr($a, 7,-7) = "" ; }; # R P S Q
105like($@, $FATAL_MSG);
106$b = substr($a, 7,-5) ; # warn # P=R S Q
107is($w--, 1);
108eval{substr($a, 7,-5) = "" ; }; # P=R S Q
109like($@, $FATAL_MSG);
110$b = substr($a, 7,-3) ; # warn # P Q S Q
111is($w--, 1);
112eval{substr($a, 7,-3) = "" ; }; # P Q S Q
113like($@, $FATAL_MSG);
114$b = substr($a, 7, 0) ; # warn # P S Q=R
115is($w--, 1);
116eval{substr($a, 7, 0) = "" ; }; # P S Q=R
117like($@, $FATAL_MSG);
118
119is(substr($a,-7,2), ''); # Q P=R S
120is(substr($a,-7,4), '54'); # Q P R S
121is(substr($a,-7,7), '54321');# Q P R=S
122is(substr($a,-7,9), '54321');# Q P S R
123is(substr($a,-5,0), ''); # P=Q=R S
124is(substr($a,-5,3), '543');# P=Q R S
125is(substr($a,-5,5), '54321');# P=Q R=S
126is(substr($a,-5,7), '54321');# P=Q S R
127is(substr($a,-3,0), ''); # P Q=R S
128is(substr($a,-3,3), '321');# P Q R=S
129is(substr($a,-2,3), '21'); # P Q S R
130is(substr($a,0,-5), ''); # P=Q=R S
131is(substr($a,2,-3), ''); # P Q=R S
132is(substr($a,0,0), ''); # P=Q=R S
133is(substr($a,0,5), '54321');# P=Q R=S
134is(substr($a,0,7), '54321');# P=Q S R
135is(substr($a,2,0), ''); # P Q=R S
136is(substr($a,2,3), '321'); # P Q R=S
137is(substr($a,5,0), ''); # P Q=R=S
138is(substr($a,5,2), ''); # P Q=S R
139is(substr($a,-7,-5), ''); # Q P=R S
140is(substr($a,-7,-2), '543');# Q P R S
141is(substr($a,-5,-5), ''); # P=Q=R S
142is(substr($a,-5,-2), '543');# P=Q R S
143is(substr($a,-3,-3), ''); # P Q=R S
144is(substr($a,-3,-1), '32');# P Q R S
145
146$a = '';
147
148is(substr($a,-2,2), ''); # Q P=R=S
149is(substr($a,0,0), ''); # P=Q=R=S
150is(substr($a,0,1), ''); # P=Q=S R
151is(substr($a,-2,3), ''); # Q P=S R
152is(substr($a,-2), ''); # Q P=R=S
153is(substr($a,0), ''); # P=Q=R=S
154
155
156is(substr($a,0,-1), ''); # R P=Q=S
157$b = substr($a,-2, 0) ; # warn # Q=R P=S