Resolve $rsrc instance duality on metadata traversal
[dbsrgits/DBIx-Class.git] / t / zzzzzzz_perl_perf_bug.t
index 3ccd4a7..a9cc07f 100644 (file)
@@ -1,8 +1,26 @@
+BEGIN { do "./t/lib/ANFANG.pm" or die ( $@ || $! ) }
+
 use strict;
 use warnings;
 use Test::More;
-use lib qw(t/lib);
-use DBICTest; # do not remove even though it is not used
+
+
+BEGIN {
+  delete $ENV{DBIC_ASSERT_NO_ERRONEOUS_METAINSTANCE_USE};
+
+  plan skip_all =>
+    'Skipping RH perl performance bug tests as DBIC_NO_WARN_BAD_PERL set'
+    if ( $ENV{DBIC_NO_WARN_BAD_PERL} );
+
+  require DBICTest::RunMode;
+  plan skip_all => 'Skipping as system appears to be a smoker'
+    if DBICTest::RunMode->is_smoker;
+}
+
+# globalllock so that the test runs alone
+use DBICTest ':GlobalLock';
+
+use Benchmark;
 
 # This is a rather unusual test.
 # It does not test any aspect of DBIx::Class, but instead tests the
@@ -18,28 +36,18 @@ use DBICTest; # do not remove even though it is not used
 # Perl Performance Issues on Red Hat Systems in
 # L<DBIx::Class::Manual::Troubleshooting>
 
-plan skip_all =>
-  'Skipping RH perl performance bug tests as DBIC_NO_WARN_BAD_PERL set'
-  if ( $ENV{DBIC_NO_WARN_BAD_PERL} );
-
-plan skip_all => 'Skipping as AUTOMATED_TESTING is set'
-  if ( $ENV{AUTOMATED_TESTING} );
-
-eval "use Benchmark ':all'";
-plan skip_all => 'needs Benchmark for testing' if $@;
-
-plan tests => 3;
-
-ok( 1, 'Dummy - prevents next test timing out' );
-
 # we do a benchmark test filling an array with blessed/overloaded references,
 # against an array filled with array refs.
 # On a sane system the ratio between these operation sets is 1 - 1.5,
 # whereas a bugged system gives a ratio of around 8
-# we therefore consider there to be a problem if the ratio is >= 2
+# we therefore consider there to be a problem if the ratio is >= $fail_ratio
+my $fail_ratio = 3;
+
+ok( $fail_ratio, "Testing for a blessed overload slowdown >= ${fail_ratio}x" );
+
 
 my $results = timethese(
-    -1,    # run for 1 CPU second each
+    -1,    # run for 1 WALL second each
     {
         no_bless => sub {
             my %h;
@@ -59,7 +67,7 @@ my $results = timethese(
 
 my $ratio = $results->{no_bless}->iters / $results->{bless_overload}->iters;
 
-ok( ( $ratio < 2 ), 'Overload/bless performance acceptable' )
+cmp_ok( $ratio, '<', $fail_ratio, 'Overload/bless performance acceptable' )
   || diag(
     "\n",
     "This perl has a substantial slow down when handling large numbers\n",
@@ -68,7 +76,7 @@ ok( ( $ratio < 2 ), 'Overload/bless performance acceptable' )
     "in the Troubleshooting POD documentation entitled\n",
     "'Perl Performance Issues on Red Hat Systems'\n",
     "As this is an extremely serious condition, the only way to skip\n",
-    "over this test is to --force the installation, or to edit the test\n",
+    "over this test is to --force the installation, or to look in the test\n",
     "file " . __FILE__ . "\n",
   );
 
@@ -78,7 +86,7 @@ ok( ( $ratio < 2 ), 'Overload/bless performance acceptable' )
 
 SKIP: {
     skip "Not checking for bless handling as performance is OK", 1
-      if ( $ratio < 2 );
+      if Test::Builder->new->is_passing;
 
     {
         package    # don't want this in PAUSE
@@ -95,7 +103,7 @@ SKIP: {
     }
 
     sub _possibly_has_bad_overload_performance {
-        return $] < 5.008009 && !_has_bug_34925();
+        return( "$]" < 5.008009 and !_has_bug_34925() );
     }
 
     # If this next one fails then you almost certainly have a RH derived
@@ -115,7 +123,9 @@ SKIP: {
         "Please read the section in the Troubleshooting POD documentation\n",
         "entitled 'Perl Performance Issues on Red Hat Systems'\n",
         "As this is an extremely serious condition, the only way to skip\n",
-        "over this test is to --force the installation, or to edit the test\n",
+        "over this test is to --force the installation, or to look in the test\n",
         "file " . __FILE__ . "\n",
       );
 }
+
+done_testing;