This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
[perl #101162] DD support for vstrings
[perl5.git] / dist / Data-Dumper / t / perl-74170.t
CommitLineData
fe642606
FC
1#!perl -X
2#
3# Regression test for [perl #74170] (missing SPAGAIN after DD_Dump(...)):
4# Since it’s so large, it gets its own file.
5
6BEGIN {
7 require Config; import Config;
8 no warnings 'once';
9 if ($Config{'extensions'} !~ /\bData\/Dumper\b/) {
10 print "1..0 # Skip: Data::Dumper was not built\n";
11 exit 0;
12 }
13}
14
15use strict;
16use Test::More tests => 1;
17use Data::Dumper;
18
19our %repos = ();
20&real_life_setup();
21
22$Data::Dumper::Indent = 1;
23# A custom sort sub is necessary for reproducing the bug, as this is where
24# the stack gets reallocated.
25$Data::Dumper::Sortkeys = sub { return [ reverse sort keys %{$_[0]} ]; }
26 unless exists $ENV{NO_SORT_SUB};
27
28ok +Data::Dumper->Dumpxs([\%repos], [qw(*repos)]);
29
30sub real_life_setup {
31 # set up the %repos hash in a manner that reflects a real run of
32 # gitolite's "compiler" script:
33 # Yes, all this is necessary to get the stack in such a state that the
34 # custom sort sub will trigger a reallocation.
35 push @{ $repos{''}{'@all'} }, ();
36 push @{ $repos{''}{'guser86'} }, ();
37 push @{ $repos{''}{'guser87'} }, ();
38 push @{ $repos{''}{'user88'} }, ();
39 push @{ $repos{''}{'grussell'} }, ();
40 push @{ $repos{''}{'guser0'} }, ();
41 push @{ $repos{''}{'guser1'} }, ();
42 push @{ $repos{''}{'guser10'} }, ();
43 push @{ $repos{''}{'guser11'} }, ();
44 push @{ $repos{''}{'guser12'} }, ();
45 push @{ $repos{''}{'guser13'} }, ();
46 push @{ $repos{''}{'guser14'} }, ();
47 push @{ $repos{''}{'guser15'} }, ();
48 push @{ $repos{''}{'guser16'} }, ();
49 push @{ $repos{''}{'guser17'} }, ();
50 push @{ $repos{''}{'guser18'} }, ();
51 push @{ $repos{''}{'guser19'} }, ();
52 push @{ $repos{''}{'guser2'} }, ();
53 push @{ $repos{''}{'guser20'} }, ();
54 push @{ $repos{''}{'guser21'} }, ();
55 push @{ $repos{''}{'guser22'} }, ();
56 push @{ $repos{''}{'guser23'} }, ();
57 push @{ $repos{''}{'guser24'} }, ();
58 push @{ $repos{''}{'guser25'} }, ();
59 push @{ $repos{''}{'guser26'} }, ();
60 push @{ $repos{''}{'guser27'} }, ();
61 push @{ $repos{''}{'guser28'} }, ();
62 push @{ $repos{''}{'guser29'} }, ();
63 push @{ $repos{''}{'guser3'} }, ();
64 push @{ $repos{''}{'guser30'} }, ();
65 push @{ $repos{''}{'guser31'} }, ();
66 push @{ $repos{''}{'guser32'} }, ();
67 push @{ $repos{''}{'guser33'} }, ();
68 push @{ $repos{''}{'guser34'} }, ();
69 push @{ $repos{''}{'guser35'} }, ();
70 push @{ $repos{''}{'guser36'} }, ();
71 push @{ $repos{''}{'guser37'} }, ();
72 push @{ $repos{''}{'guser38'} }, ();
73 push @{ $repos{''}{'guser39'} }, ();
74 push @{ $repos{''}{'guser4'} }, ();
75 push @{ $repos{''}{'guser40'} }, ();
76 push @{ $repos{''}{'guser41'} }, ();
77 push @{ $repos{''}{'guser42'} }, ();
78 push @{ $repos{''}{'guser43'} }, ();
79 push @{ $repos{''}{'guser44'} }, ();
80 push @{ $repos{''}{'guser45'} }, ();
81 push @{ $repos{''}{'guser46'} }, ();
82 push @{ $repos{''}{'guser47'} }, ();
83 push @{ $repos{''}{'guser48'} }, ();
84 push @{ $repos{''}{'guser49'} }, ();
85 push @{ $repos{''}{'guser5'} }, ();
86 push @{ $repos{''}{'guser50'} }, ();
87 push @{ $repos{''}{'guser51'} }, ();
88 push @{ $repos{''}{'guser52'} }, ();
89 push @{ $repos{''}{'guser53'} }, ();
90 push @{ $repos{''}{'guser54'} }, ();
91 push @{ $repos{''}{'guser55'} }, ();
92 push @{ $repos{''}{'guser56'} }, ();
93 push @{ $repos{''}{'guser57'} }, ();
94 push @{ $repos{''}{'guser58'} }, ();
95 push @{ $repos{''}{'guser59'} }, ();
96 push @{ $repos{''}{'guser6'} }, ();
97 push @{ $repos{''}{'guser60'} }, ();
98 push @{ $repos{''}{'guser61'} }, ();
99 push @{ $repos{''}{'guser62'} }, ();
100 push @{ $repos{''}{'guser63'} }, ();
101 push @{ $repos{''}{'guser64'} }, ();
102 push @{ $repos{''}{'guser65'} }, ();
103 push @{ $repos{''}{'guser66'} }, ();
104 push @{ $repos{''}{'guser67'} }, ();
105 push @{ $repos{''}{'guser68'} }, ();
106 push @{ $repos{''}{'guser69'} }, ();
107 push @{ $repos{''}{'guser7'} }, ();
108 push @{ $repos{''}{'guser70'} }, ();
109 push @{ $repos{''}{'guser71'} }, ();
110 push @{ $repos{''}{'guser72'} }, ();
111 push @{ $repos{''}{'guser73'} }, ();
112 push @{ $repos{''}{'guser74'} }, ();
113 push @{ $repos{''}{'guser75'} }, ();
114 push @{ $repos{''}{'guser76'} }, ();
115 push @{ $repos{''}{'guser77'} }, ();
116 push @{ $repos{''}{'guser78'} }, ();
117 push @{ $repos{''}{'guser79'} }, ();
118 push @{ $repos{''}{'guser8'} }, ();
119 push @{ $repos{''}{'guser80'} }, ();
120 push @{ $repos{''}{'guser81'} }, ();
121 push @{ $repos{''}{'guser82'} }, ();
122 push @{ $repos{''}{'guser83'} }, ();
123 push @{ $repos{''}{'guser84'} }, ();
124 push @{ $repos{''}{'guser85'} }, ();
125 push @{ $repos{''}{'guser9'} }, ();
126 push @{ $repos{''}{'user1'} }, ();
127 push @{ $repos{''}{'user10'} }, ();
128 push @{ $repos{''}{'user11'} }, ();
129 push @{ $repos{''}{'user12'} }, ();
130 push @{ $repos{''}{'user13'} }, ();
131 push @{ $repos{''}{'user14'} }, ();
132 push @{ $repos{''}{'user15'} }, ();
133 push @{ $repos{''}{'user16'} }, ();
134 push @{ $repos{''}{'user2'} }, ();
135 push @{ $repos{''}{'user3'} }, ();
136 push @{ $repos{''}{'user4'} }, ();
137 push @{ $repos{''}{'user5'} }, ();
138 push @{ $repos{''}{'user6'} }, ();
139 push @{ $repos{''}{'user7'} }, ();
140 $repos{''}{R}{'user8'} = 1;
141 $repos{''}{W}{'user8'} = 1;
142 push @{ $repos{''}{'user8'} }, ();
143}