Add a perf test for deriving null
authorDavid Feuer <david.feuer@gmail.com>
Sun, 2 Apr 2017 16:44:07 +0000 (12:44 -0400)
committerDavid Feuer <David.Feuer@gmail.com>
Sun, 2 Apr 2017 16:48:36 +0000 (12:48 -0400)
Deriving null even helps for a simple list-like type,
presumably because we don't perform the static argument
transformation. Adding this test before the null deriving
patch should give a proper baseline.

Reviewers: austin, bgamari

Reviewed By: bgamari

Subscribers: rwbarton, thomie

Differential Revision: https://phabricator.haskell.org/D3408

testsuite/tests/perf/should_run/DeriveNull.hs [new file with mode: 0644]
testsuite/tests/perf/should_run/DeriveNull.stdout [new file with mode: 0644]
testsuite/tests/perf/should_run/all.T

diff --git a/testsuite/tests/perf/should_run/DeriveNull.hs b/testsuite/tests/perf/should_run/DeriveNull.hs
new file mode 100644 (file)
index 0000000..cb95b27
--- /dev/null
@@ -0,0 +1,23 @@
+{-# LANGUAGE DeriveFoldable #-}
+
+module Main where
+import Data.Semigroup
+
+-- Just a list without any special fusion rules.
+data List a = Nil | Cons a (List a) deriving Foldable
+
+instance Semigroup (List a) where
+  Nil <> ys = ys
+  Cons x xs <> ys = Cons x (xs <> ys)
+
+replicateList :: Int -> a -> List a
+replicateList 0 x = Nil
+replicateList n x = Cons x (replicateList (n - 1) x)
+
+newtype ListList a = ListList (List (List a)) deriving Foldable
+
+long :: Int -> Bool
+long n = null $ ListList $ replicateList n Nil <> Cons (Cons () Nil) Nil
+
+main :: IO ()
+main = print $ long (10^(6 :: Int))
diff --git a/testsuite/tests/perf/should_run/DeriveNull.stdout b/testsuite/tests/perf/should_run/DeriveNull.stdout
new file mode 100644 (file)
index 0000000..bc59c12
--- /dev/null
@@ -0,0 +1 @@
+False
index f0a8bec..a70cf38 100644 (file)
@@ -526,3 +526,11 @@ test('T13218',
      only_ways(['normal'])],
     compile_and_run,
     ['-O'])
+
+test('DeriveNull',
+    [stats_num_field('bytes allocated',
+                    [ (wordsize(64), 152083704, 5) ]),
+                    # 2017-04-02     152083704 w/o derived null
+     only_ways(['normal'])],
+    compile_and_run,
+    ['-O'])