This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Make the test more portable.
[perl5.git] / t / lib / peek.t
CommitLineData
9ec58fb7
JH
1#!./perl
2
3BEGIN {
4 chdir 't' if -d 't';
5 unshift @INC, '../lib';
6 require Config; import Config;
7 if ($Config{'extensions'} !~ /\bPeek\b/) {
8 print "1..0 # Skip: Devel::Peek was not built\n";
9 exit 0;
10 }
11}
12
9248c45a
JH
13use Devel::Peek;
14
15print "1..17\n";
16
17our $DEBUG = 0;
18
19sub do_test {
20 my $pattern = pop;
21 if (open(OUT,">peek$$")) {
22 open(STDERR,">&OUT");
23 Dump($_[1]);
24 close(OUT);
25 if (open(IN, "peek$$")) {
26 local $/;
27 $pattern =~ s/\$ADDR/0x[[:xdigit:]]+/g;
28 print $pattern, "\n" if $DEBUG;
29 my $dump = <IN>;
30 print $dump, "\n" if $DEBUG;
31 print "not " unless $dump =~ /$pattern/m;
32 print "ok $_[0]\n";
33 close(IN);
34 } else {
35 die "$0: failed to open peek$$: !\n";
36 }
37 } else {
38 die "$0: failed to create peek$$: $!\n";
39 }
40}
41
42our $a;
43our $b;
44my $c;
45local $d;
46
47do_test( 1,
48 $a = "foo",
49'SV = PV\\($ADDR\\) at $ADDR
50 REFCNT = 1
51 FLAGS = \\(POK,pPOK\\)
52 PV = $ADDR "foo"\\\0
53 CUR = 3
54 LEN = 4'
55 );
56
57do_test( 2,
58 "bar",
59'SV = PV\\($ADDR\\) at $ADDR
60 REFCNT = 1
61 FLAGS = \\(POK,READONLY,pPOK\\)
62 PV = $ADDR "bar"\\\0
63 CUR = 3
64 LEN = 4');
65
66do_test( 3,
67 $b = 123,
68'SV = IV\\($ADDR\\) at $ADDR
69 REFCNT = 1
70 FLAGS = \\(IOK,pIOK\\)
71 IV = 123');
72
73do_test( 4,
74 456,
75'SV = IV\\($ADDR\\) at $ADDR
76 REFCNT = 1
77 FLAGS = \\(IOK,READONLY,pIOK\\)
78 IV = 456');
79
80do_test( 5,
81 $c = 456,
82'SV = IV\\($ADDR\\) at $ADDR
83 REFCNT = 1
84 FLAGS = \\(PADBUSY,PADMY,IOK,pIOK\\)
85 IV = 456');
86
87do_test( 6,
88 $c + $d,
89'SV = NV\\($ADDR\\) at $ADDR
90 REFCNT = 1
91 FLAGS = \\(PADTMP,NOK,pNOK\\)
92 NV = 456');
93
94($d = "789") += 0.1;
95
96do_test( 7,
97 $d,
98'SV = PVNV\\($ADDR\\) at $ADDR
99 REFCNT = 1
100 FLAGS = \\(NOK,pNOK\\)
101 IV = 0
102 NV = 789\\.1
103 PV = $ADDR "789"\\\0
104 CUR = 3
105 LEN = 4');
106
107do_test( 8,
108 0xabcd,
109'SV = IV\\($ADDR\\) at $ADDR
110 REFCNT = 1
111 FLAGS = \\(IOK,READONLY,pIOK,IsUV\\)
112 UV = 43981');
113
114do_test( 9,
115 undef,
116'SV = NULL\\(0x0\\) at $ADDR
117 REFCNT = 1
118 FLAGS = \\(\\)');
119
120do_test(10,
121 \$a,
122'SV = RV\\($ADDR\\) at $ADDR
123 REFCNT = 1
124 FLAGS = \\(ROK\\)
125 RV = $ADDR
126 SV = PV\\($ADDR\\) at $ADDR
127 REFCNT = 2
128 FLAGS = \\(POK,pPOK\\)
129 PV = $ADDR "foo"\\\0
130 CUR = 3
131 LEN = 4');
132
133do_test(11,
134 [$b,$c],
135'SV = RV\\($ADDR\\) at $ADDR
136 REFCNT = 1
137 FLAGS = \\(ROK\\)
138 RV = $ADDR
139 SV = PVAV\\($ADDR\\) at $ADDR
140 REFCNT = 2
141 FLAGS = \\(\\)
142 IV = 0
143 NV = 0
144 ARRAY = $ADDR
145 FILL = 1
146 MAX = 1
147 ARYLEN = 0x0
148 FLAGS = \\(REAL\\)
149 Elt No. 0
150 SV = IV\\($ADDR\\) at $ADDR
151 REFCNT = 1
152 FLAGS = \\(IOK,pIOK\\)
153 IV = 123
154 Elt No. 1
155 SV = PVNV\\($ADDR\\) at $ADDR
156 REFCNT = 1
157 FLAGS = \\(IOK,NOK,pIOK,pNOK\\)
158 IV = 456
159 NV = 456
160 PV = 0');
161
162do_test(12,
163 {$b=>$c},
164'SV = RV\\($ADDR\\) at $ADDR
165 REFCNT = 1
166 FLAGS = \\(ROK\\)
167 RV = $ADDR
168 SV = PVHV\\($ADDR\\) at $ADDR
169 REFCNT = 2
170 FLAGS = \\(SHAREKEYS\\)
171 IV = 1
172 NV = 0
173 ARRAY = $ADDR \\(0:7, 1:1\\)
174 hash quality = 150.0%
175 KEYS = 1
176 FILL = 1
177 MAX = 7
178 RITER = -1
179 EITER = 0x0
180 Elt "123" HASH = $ADDR
181 SV = PVNV\\($ADDR\\) at $ADDR
182 REFCNT = 1
183 FLAGS = \\(IOK,NOK,pIOK,pNOK\\)
184 IV = 456
185 NV = 456
186 PV = 0');
187
188do_test(13,
189 sub(){@_},
190'SV = RV\\($ADDR\\) at $ADDR
191 REFCNT = 1
192 FLAGS = \\(ROK\\)
193 RV = $ADDR
194 SV = PVCV\\($ADDR\\) at $ADDR
195 REFCNT = 2
196 FLAGS = \\(PADBUSY,PADMY,POK,pPOK,ANON\\)
197 IV = 0
198 NV = 0
199 PROTOTYPE = ""
200 COMP_STASH = $ADDR\\t"main"
201 START = $ADDR ===> \\d+
202 ROOT = $ADDR
203 XSUB = 0x0
204 XSUBANY = 0
205 GVGV::GV = $ADDR\\t"main" :: "__ANON__"
206 FILE = ".+\\b(?i:peek\\.t)"
207 DEPTH = 0
208 FLAGS = 0x4
209 PADLIST = $ADDR
210 OUTSIDE = $ADDR \\(MAIN\\)');
211
212do_test(14,
213 \&do_test,
214'SV = RV\\($ADDR\\) at $ADDR
215 REFCNT = 1
216 FLAGS = \\(ROK\\)
217 RV = $ADDR
218 SV = PVCV\\($ADDR\\) at $ADDR
219 REFCNT = 3
220 FLAGS = \\(\\)
221 IV = 0
222 NV = 0
223 COMP_STASH = $ADDR\\t"main"
224 START = $ADDR ===> \\d+
225 ROOT = $ADDR
226 XSUB = 0x0
227 XSUBANY = 0
228 GVGV::GV = $ADDR\\t"main" :: "do_test"
229 FILE = ".+\\b(?i:peek\\.t)"
230 DEPTH = 1
231 FLAGS = 0x0
232 PADLIST = $ADDR
9ec58fb7
JH
233 1\\. $ADDR \\("\\$pattern" \\d+-\\d+\\)
234 12\\. $ADDR \\(FAKE "\\$DEBUG" 0-\\d+\\)
235 13\\. $ADDR \\("\\$dump" \\d+-\\d+\\)
9248c45a
JH
236 OUTSIDE = $ADDR \\(MAIN\\)');
237
238do_test(15,
239 qr(tic),
240'SV = RV\\($ADDR\\) at $ADDR
241 REFCNT = 1
242 FLAGS = \\(ROK\\)
243 RV = $ADDR
244 SV = PVMG\\($ADDR\\) at $ADDR
245 REFCNT = 1
246 FLAGS = \\(OBJECT,RMG\\)
247 IV = 0
248 NV = 0
249 PV = 0
250 MAGIC = $ADDR
251 MG_VIRTUAL = $ADDR
252 MG_TYPE = \'r\'
253 MG_OBJ = $ADDR
254 STASH = $ADDR\\t"Regexp"');
255
256do_test(16,
257 (bless {}, "Tac"),
258'SV = RV\\($ADDR\\) at $ADDR
259 REFCNT = 1
260 FLAGS = \\(ROK\\)
261 RV = $ADDR
262 SV = PVHV\\($ADDR\\) at $ADDR
263 REFCNT = 2
264 FLAGS = \\(OBJECT,SHAREKEYS\\)
265 IV = 0
266 NV = 0
267 STASH = $ADDR\\t"Tac"
268 ARRAY = 0x0
269 KEYS = 0
270 FILL = 0
271 MAX = 7
272 RITER = -1
273 EITER = 0x0');
274
275do_test(17,
276 *a,
277'SV = PVGV\\($ADDR\\) at $ADDR
278 REFCNT = 5
279 FLAGS = \\(GMG,SMG,MULTI\\)
280 IV = 0
281 NV = 0
282 MAGIC = $ADDR
283 MG_VIRTUAL = &PL_vtbl_glob
284 MG_TYPE = \'\\*\'
285 MG_OBJ = $ADDR
286 MG_LEN = 1
287 MG_PTR = $ADDR "a"
288 NAME = "a"
289 NAMELEN = 1
290 GvSTASH = $ADDR\\t"main"
291 GP = $ADDR
292 SV = $ADDR
293 REFCNT = 1
294 IO = 0x0
295 FORM = 0x0
296 AV = 0x0
297 HV = 0x0
298 CV = 0x0
299 CVGEN = 0x0
300 GPFLAGS = 0x0
9ec58fb7 301 LINE = \\d+
9248c45a
JH
302 FILE = ".+\\b(?i:peek\\.t)"
303 FLAGS = 0x2
304 EGV = $ADDR\\t"a"');
305
306END {
307 unlink("peek$$");
308}