This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
add t/perf/speed.t
authorDavid Mitchell <davem@iabyn.com>
Tue, 21 Oct 2014 13:03:21 +0000 (14:03 +0100)
committerDavid Mitchell <davem@iabyn.com>
Sun, 26 Oct 2014 16:53:50 +0000 (16:53 +0000)
This test file is similar to /re/speed.t, but to test general-purpose
optimisations.

The idea is to run snippets of code that are 100s or 1000s times slower
if a particular optimisation is broken. We are not so much interested
in the individual tests passing, as in the whole file failing with a
watchdog timeout (or just observing that it running more slowly)

MANIFEST
t/perf/speed.t [new file with mode: 0644]

index 29802f1..c727314 100644 (file)
--- a/MANIFEST
+++ b/MANIFEST
@@ -5341,6 +5341,7 @@ t/op/write.t                      See if write works (formats work)
 t/op/yadayada.t                        See if ... works
 t/perf/opcount.t               See if optimised subs have the right op counts
 t/perf/optree.t                        Test presence of some op optimisations
+t/perf/speed.t                 See if optimisations are keeping things fast
 t/perl.supp                    Perl valgrind suppressions
 t/porting/args_assert.t                Check that all PERL_ARGS_ASSERT* macros are used
 t/porting/authors.t            Check that all authors have been acknowledged
diff --git a/t/perf/speed.t b/t/perf/speed.t
new file mode 100644 (file)
index 0000000..43d09bb
--- /dev/null
@@ -0,0 +1,51 @@
+#!./perl
+#
+# All the tests in this file are ones that run exceptionally slowly
+# (each test taking seconds or even minutes) in the absence of particular
+# optimisations. Thus it is a sort of canary for optimisations being
+# broken.
+#
+# Although it includes a watchdog timeout, this is set to a generous limit
+# to allow for running on slow systems; therefore a broken optimisation
+# might be indicated merely by this test file taking unusually long to
+# run, rather than actually timing out.
+#
+
+use strict;
+use warnings;
+use 5.010;
+
+sub run_tests;
+
+$| = 1;
+
+
+BEGIN {
+    chdir 't' if -d 't';
+    @INC = ('../lib');
+    require Config; import Config;
+    require './test.pl';
+}
+
+plan tests => 1;
+
+use warnings;
+use strict;
+
+watchdog(60);
+
+SKIP: {
+    # RT #121975 COW speedup lost after e8c6a474
+
+    # without COW, this test takes minutes; with COW, its less than a
+    # second
+    #
+    skip  "PERL_NO_COW", 1 if $Config{ccflags} =~ /PERL_NO_COW/;
+
+    my ($x, $y);
+    $x = "x" x 1_000_000;
+    $y = $x for 1..1_000_000;
+    pass("COW 1Mb strings");
+}
+
+1;