7 # This is a rather unusual test.
8 # It does not test any aspect of DBIx::Class, but instead tests the
9 # perl installation this is being run under to see if it is:-
10 # 1. Potentially affected by a RH perl build bug
11 # 2. If so we do a performance test for the effect of
14 # You can skip these tests by setting the DBIC_NO_WARN_BAD_PERL env
17 # If these tests fail then please read the section titled
18 # Perl Performance Issues on Red Hat Systems in
19 # L<DBIx::Class::Manual::Troubleshooting>
22 'Skipping RH perl performance bug tests as DBIC_NO_WARN_BAD_PERL set'
23 if ( $ENV{DBIC_NO_WARN_BAD_PERL} );
25 eval "use Benchmark ':all'";
26 plan skip_all => 'needs Benchmark for testing' if $@;
30 ok(1, 'Dummy - prevents next test timing out');
32 # we do a benchmark test filling an array with blessed/overloaded references,
33 # against an array filled with array refs.
34 # On a sane system the ratio between these operation sets is 1 - 1.5,
35 # whereas a bugged system gives a ratio of around 8
36 # we therefore consider there to be a problem if the ratio is >= 2
38 my $results = timethese(
39 -1, # run for 1 CPU second each
43 for ( my $i = 0 ; $i < 10000 ; $i++ ) {
47 bless_overload => sub {
48 use overload q(<) => sub { };
50 for ( my $i = 0 ; $i < 10000 ; $i++ ) {
51 $h{$i} = bless [] => 'main';
57 my $ratio = $results->{no_bless}->iters / $results->{bless_overload}->iters;
59 ok( ( $ratio < 2 ), 'Overload/bless performance acceptable' );
61 # We will only check for the difference in bless handling (whether the
62 # bless applies to the reference or the referent) if we have seen a
63 # performance issue...
66 skip "Not checking for bless handling as performance is OK", 1
70 package # don't want this in PAUSE
72 use overload bool => sub { 0 }
79 bless $r1 => 'TestRHBug';
83 sub _possibly_has_bad_overload_performance {
84 return $] < 5.008009 && !_has_bug_34925();
87 # If this next one fails then you almost certainly have a RH derived
88 # perl with the performance bug
89 # if this test fails, look at the section titled
90 # "Perl Performance Issues on Red Hat Systems" in
91 # L<DBIx::Class::Manual::Troubleshooting>
92 # Basically you may suffer severe performance issues when running
93 # DBIx::Class (and many other) modules. Look at getting a fixed
94 # version of the perl interpreter for your system.
96 ok( !_possibly_has_bad_overload_performance(),
97 'Checking whether bless applies to reference not object' );