1#!./perl
2
3BEGIN {
4    if ($ENV{PERL_CORE}){
5	chdir('t') if -d 't';
6	if ($^O eq 'MacOS') {
7	    @INC = qw(: ::lib ::macos:lib);
8	} else {
9	    @INC = '.';
10	    push @INC, '../lib';
11	}
12    } else {
13	unshift @INC, 't';
14    }
15    require Config;
16    if (($Config::Config{'extensions'} !~ /\bB\b/) ){
17        print "1..0 # Skip -- Perl configured without B module\n";
18        exit 0;
19    }
20}
21
22$|  = 1;
23use warnings;
24use strict;
25use Config;
26
27print "1..3\n";
28
29my $test = 1;
30
31sub ok { print "ok $test\n"; $test++ }
32
33
34my $a;
35my $Is_VMS = $^O eq 'VMS';
36my $Is_MacOS = $^O eq 'MacOS';
37
38my $path = join " ", map { qq["-I$_"] } @INC;
39my $redir = $Is_MacOS ? "" : "2>&1";
40
41$a = `$^X $path "-MO=Debug" -e 1 $redir`;
42print "not " unless $a =~
43/\bLISTOP\b.*\bOP\b.*\bCOP\b.*\bOP\b/s;
44ok;
45
46
47$a = `$^X $path "-MO=Terse" -e 1 $redir`;
48print "not " unless $a =~
49/\bLISTOP\b.*leave.*\n    OP\b.*enter.*\n    COP\b.*nextstate.*\n    OP\b.*null/s;
50ok;
51
52$a = `$^X $path "-MO=Terse" -ane "s/foo/bar/" $redir`;
53$a =~ s/\(0x[^)]+\)//g;
54$a =~ s/\[[^\]]+\]//g;
55$a =~ s/-e syntax OK//;
56$a =~ s/[^a-z ]+//g;
57$a =~ s/\s+/ /g;
58$a =~ s/\b(s|foo|bar|ullsv)\b\s?//g;
59$a =~ s/^\s+//;
60$a =~ s/\s+$//;
61my $is_thread = $Config{use5005threads} && $Config{use5005threads} eq 'define';
62if ($is_thread) {
63    $b=<<EOF;
64leave enter nextstate label leaveloop enterloop null and defined null
65threadsv readline gv lineseq nextstate aassign null pushmark split pushre
66threadsv const null pushmark rvav gv nextstate subst const unstack
67EOF
68} else {
69    $b=<<EOF;
70leave enter nextstate label leaveloop enterloop null and defined null
71null gvsv readline gv lineseq nextstate aassign null pushmark split pushre
72null gvsv const null pushmark rvav gv nextstate subst const unstack
73EOF
74}
75$b=~s/\n/ /g;$b=~s/\s+/ /g;
76$b =~ s/\s+$//;
77print "# [$a]\n# vs\n# [$b]\nnot " if $a ne $b;
78ok;
79
80