Commit | Line | Data |
d9d8d8de |
1 | #!./perl |
2 | |
79072805 |
3 | # $RCSfile: s.t,v $$Revision: 4.1 $$Date: 92/08/07 18:28:22 $ |
d9d8d8de |
4 | |
3e3baf6d |
5 | print "1..61\n"; |
d9d8d8de |
6 | |
7 | $x = 'foo'; |
8 | $_ = "x"; |
9 | s/x/\$x/; |
10 | print "#1\t:$_: eq :\$x:\n"; |
11 | if ($_ eq '$x') {print "ok 1\n";} else {print "not ok 1\n";} |
12 | |
13 | $_ = "x"; |
14 | s/x/$x/; |
15 | print "#2\t:$_: eq :foo:\n"; |
16 | if ($_ eq 'foo') {print "ok 2\n";} else {print "not ok 2\n";} |
17 | |
18 | $_ = "x"; |
19 | s/x/\$x $x/; |
20 | print "#3\t:$_: eq :\$x foo:\n"; |
21 | if ($_ eq '$x foo') {print "ok 3\n";} else {print "not ok 3\n";} |
22 | |
23 | $b = 'cd'; |
79072805 |
24 | ($a = 'abcdef') =~ s<(b${b}e)>'\n$1'; |
d9d8d8de |
25 | print "#4\t:$1: eq :bcde:\n"; |
26 | print "#4\t:$a: eq :a\\n\$1f:\n"; |
27 | if ($1 eq 'bcde' && $a eq 'a\n$1f') {print "ok 4\n";} else {print "not ok 4\n";} |
28 | |
29 | $a = 'abacada'; |
30 | if (($a =~ s/a/x/g) == 4 && $a eq 'xbxcxdx') |
31 | {print "ok 5\n";} else {print "not ok 5\n";} |
32 | |
33 | if (($a =~ s/a/y/g) == 0 && $a eq 'xbxcxdx') |
34 | {print "ok 6\n";} else {print "not ok 6 $a\n";} |
35 | |
36 | if (($a =~ s/b/y/g) == 1 && $a eq 'xyxcxdx') |
37 | {print "ok 7\n";} else {print "not ok 7 $a\n";} |
38 | |
39 | $_ = 'ABACADA'; |
40 | if (/a/i && s///gi && $_ eq 'BCD') {print "ok 8\n";} else {print "not ok 8 $_\n";} |
41 | |
42 | $_ = '\\' x 4; |
43 | if (length($_) == 4) {print "ok 9\n";} else {print "not ok 9\n";} |
44 | s/\\/\\\\/g; |
45 | if ($_ eq '\\' x 8) {print "ok 10\n";} else {print "not ok 10 $_\n";} |
46 | |
47 | $_ = '\/' x 4; |
48 | if (length($_) == 8) {print "ok 11\n";} else {print "not ok 11\n";} |
49 | s/\//\/\//g; |
50 | if ($_ eq '\\//' x 4) {print "ok 12\n";} else {print "not ok 12\n";} |
51 | if (length($_) == 12) {print "ok 13\n";} else {print "not ok 13\n";} |
52 | |
53 | $_ = 'aaaXXXXbbb'; |
54 | s/^a//; |
55 | print $_ eq 'aaXXXXbbb' ? "ok 14\n" : "not ok 14\n"; |
56 | |
57 | $_ = 'aaaXXXXbbb'; |
58 | s/a//; |
59 | print $_ eq 'aaXXXXbbb' ? "ok 15\n" : "not ok 15\n"; |
60 | |
61 | $_ = 'aaaXXXXbbb'; |
62 | s/^a/b/; |
63 | print $_ eq 'baaXXXXbbb' ? "ok 16\n" : "not ok 16\n"; |
64 | |
65 | $_ = 'aaaXXXXbbb'; |
66 | s/a/b/; |
67 | print $_ eq 'baaXXXXbbb' ? "ok 17\n" : "not ok 17\n"; |
68 | |
69 | $_ = 'aaaXXXXbbb'; |
70 | s/aa//; |
71 | print $_ eq 'aXXXXbbb' ? "ok 18\n" : "not ok 18\n"; |
72 | |
73 | $_ = 'aaaXXXXbbb'; |
74 | s/aa/b/; |
75 | print $_ eq 'baXXXXbbb' ? "ok 19\n" : "not ok 19\n"; |
76 | |
77 | $_ = 'aaaXXXXbbb'; |
78 | s/b$//; |
79 | print $_ eq 'aaaXXXXbb' ? "ok 20\n" : "not ok 20\n"; |
80 | |
81 | $_ = 'aaaXXXXbbb'; |
82 | s/b//; |
83 | print $_ eq 'aaaXXXXbb' ? "ok 21\n" : "not ok 21\n"; |
84 | |
85 | $_ = 'aaaXXXXbbb'; |
86 | s/bb//; |
87 | print $_ eq 'aaaXXXXb' ? "ok 22\n" : "not ok 22\n"; |
88 | |
89 | $_ = 'aaaXXXXbbb'; |
90 | s/aX/y/; |
91 | print $_ eq 'aayXXXbbb' ? "ok 23\n" : "not ok 23\n"; |
92 | |
93 | $_ = 'aaaXXXXbbb'; |
94 | s/Xb/z/; |
95 | print $_ eq 'aaaXXXzbb' ? "ok 24\n" : "not ok 24\n"; |
96 | |
97 | $_ = 'aaaXXXXbbb'; |
98 | s/aaX.*Xbb//; |
99 | print $_ eq 'ab' ? "ok 25\n" : "not ok 25\n"; |
100 | |
101 | $_ = 'aaaXXXXbbb'; |
102 | s/bb/x/; |
103 | print $_ eq 'aaaXXXXxb' ? "ok 26\n" : "not ok 26\n"; |
104 | |
105 | # now for some unoptimized versions of the same. |
106 | |
107 | $_ = 'aaaXXXXbbb'; |
108 | $x ne $x || s/^a//; |
109 | print $_ eq 'aaXXXXbbb' ? "ok 27\n" : "not ok 27\n"; |
110 | |
111 | $_ = 'aaaXXXXbbb'; |
112 | $x ne $x || s/a//; |
113 | print $_ eq 'aaXXXXbbb' ? "ok 28\n" : "not ok 28\n"; |
114 | |
115 | $_ = 'aaaXXXXbbb'; |
116 | $x ne $x || s/^a/b/; |
117 | print $_ eq 'baaXXXXbbb' ? "ok 29\n" : "not ok 29\n"; |
118 | |
119 | $_ = 'aaaXXXXbbb'; |
120 | $x ne $x || s/a/b/; |
121 | print $_ eq 'baaXXXXbbb' ? "ok 30\n" : "not ok 30\n"; |
122 | |
123 | $_ = 'aaaXXXXbbb'; |
124 | $x ne $x || s/aa//; |
125 | print $_ eq 'aXXXXbbb' ? "ok 31\n" : "not ok 31\n"; |
126 | |
127 | $_ = 'aaaXXXXbbb'; |
128 | $x ne $x || s/aa/b/; |
129 | print $_ eq 'baXXXXbbb' ? "ok 32\n" : "not ok 32\n"; |
130 | |
131 | $_ = 'aaaXXXXbbb'; |
132 | $x ne $x || s/b$//; |
133 | print $_ eq 'aaaXXXXbb' ? "ok 33\n" : "not ok 33\n"; |
134 | |
135 | $_ = 'aaaXXXXbbb'; |
136 | $x ne $x || s/b//; |
137 | print $_ eq 'aaaXXXXbb' ? "ok 34\n" : "not ok 34\n"; |
138 | |
139 | $_ = 'aaaXXXXbbb'; |
140 | $x ne $x || s/bb//; |
141 | print $_ eq 'aaaXXXXb' ? "ok 35\n" : "not ok 35\n"; |
142 | |
143 | $_ = 'aaaXXXXbbb'; |
144 | $x ne $x || s/aX/y/; |
145 | print $_ eq 'aayXXXbbb' ? "ok 36\n" : "not ok 36\n"; |
146 | |
147 | $_ = 'aaaXXXXbbb'; |
148 | $x ne $x || s/Xb/z/; |
149 | print $_ eq 'aaaXXXzbb' ? "ok 37\n" : "not ok 37\n"; |
150 | |
151 | $_ = 'aaaXXXXbbb'; |
152 | $x ne $x || s/aaX.*Xbb//; |
153 | print $_ eq 'ab' ? "ok 38\n" : "not ok 38\n"; |
154 | |
155 | $_ = 'aaaXXXXbbb'; |
156 | $x ne $x || s/bb/x/; |
157 | print $_ eq 'aaaXXXXxb' ? "ok 39\n" : "not ok 39\n"; |
158 | |
159 | $_ = 'abc123xyz'; |
160 | s/\d+/$&*2/e; # yields 'abc246xyz' |
161 | print $_ eq 'abc246xyz' ? "ok 40\n" : "not ok 40\n"; |
162 | s/\d+/sprintf("%5d",$&)/e; # yields 'abc 246xyz' |
163 | print $_ eq 'abc 246xyz' ? "ok 41\n" : "not ok 41\n"; |
164 | s/\w/$& x 2/eg; # yields 'aabbcc 224466xxyyzz' |
165 | print $_ eq 'aabbcc 224466xxyyzz' ? "ok 42\n" : "not ok 42\n"; |
166 | |
167 | $_ = "aaaaa"; |
168 | print y/a/b/ == 5 ? "ok 43\n" : "not ok 43\n"; |
169 | print y/a/b/ == 0 ? "ok 44\n" : "not ok 44\n"; |
170 | print y/b// == 5 ? "ok 45\n" : "not ok 45\n"; |
171 | print y/b/c/s == 5 ? "ok 46\n" : "not ok 46\n"; |
172 | print y/c// == 1 ? "ok 47\n" : "not ok 47\n"; |
173 | print y/c//d == 1 ? "ok 48\n" : "not ok 48\n"; |
174 | print $_ eq "" ? "ok 49\n" : "not ok 49\n"; |
175 | |
176 | $_ = "Now is the %#*! time for all good men..."; |
177 | print (($x=(y/a-zA-Z //cd)) == 7 ? "ok 50\n" : "not ok 50\n"); |
178 | print y/ / /s == 8 ? "ok 51\n" : "not ok 51\n"; |
179 | |
79072805 |
180 | $_ = 'abcdefghijklmnopqrstuvwxyz0123456789'; |
181 | tr/a-z/A-Z/; |
182 | |
183 | print $_ eq 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789' ? "ok 52\n" : "not ok 52\n"; |
184 | |
185 | # same as tr/A-Z/a-z/; |
186 | y[\101-\132][\141-\172]; |
187 | |
188 | print $_ eq 'abcdefghijklmnopqrstuvwxyz0123456789' ? "ok 53\n" : "not ok 53\n"; |
189 | |
190 | $_ = '+,-'; |
191 | tr/+--/a-c/; |
192 | print $_ eq 'abc' ? "ok 54\n" : "not ok 54\n"; |
193 | |
194 | $_ = '+,-'; |
195 | tr/+\--/a\/c/; |
196 | print $_ eq 'a,/' ? "ok 55\n" : "not ok 55\n"; |
197 | |
198 | $_ = '+,-'; |
199 | tr/-+,/ab\-/; |
200 | print $_ eq 'b-a' ? "ok 56\n" : "not ok 56\n"; |
843b4603 |
201 | |
202 | |
203 | # test recursive substitutions |
204 | # code based on the recursive expansion of makefile variables |
205 | |
206 | my %MK = ( |
207 | AAAAA => '$(B)', B=>'$(C)', C => 'D', # long->short |
208 | E => '$(F)', F=>'p $(G) q', G => 'HHHHH', # short->long |
209 | DIR => '$(UNDEFINEDNAME)/xxx', |
210 | ); |
211 | sub var { |
212 | my($var,$level) = @_; |
213 | return "\$($var)" unless exists $MK{$var}; |
214 | return exp_vars($MK{$var}, $level+1); # can recurse |
215 | } |
216 | sub exp_vars { |
217 | my($str,$level) = @_; |
218 | $str =~ s/\$\((\w+)\)/var($1, $level+1)/ge; # can recurse |
219 | #warn "exp_vars $level = '$str'\n"; |
220 | $str; |
221 | } |
222 | |
223 | print exp_vars('$(AAAAA)',0) eq 'D' |
224 | ? "ok 57\n" : "not ok 57\n"; |
225 | print exp_vars('$(E)',0) eq 'p HHHHH q' |
226 | ? "ok 58\n" : "not ok 58\n"; |
227 | print exp_vars('$(DIR)',0) eq '$(UNDEFINEDNAME)/xxx' |
228 | ? "ok 59\n" : "not ok 59\n"; |
229 | print exp_vars('foo $(DIR)/yyy bar',0) eq 'foo $(UNDEFINEDNAME)/xxx/yyy bar' |
230 | ? "ok 60\n" : "not ok 60\n"; |
231 | |
3e3baf6d |
232 | # a match nested in the RHS of a substitution: |
233 | |
234 | $_ = "abcd"; |
235 | s/../$x = $&, m#.#/eg; |
236 | print $x eq "cd" ? "ok 61\n" : "not ok 61\n"; |