Add a second regression test for #13536
authorJoachim Breitner <mail@joachim-breitner.de>
Mon, 10 Apr 2017 15:21:52 +0000 (11:21 -0400)
committerJoachim Breitner <mail@joachim-breitner.de>
Mon, 10 Apr 2017 15:21:52 +0000 (11:21 -0400)
which counts allocations instead of observing recomputation directly.

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

diff --git a/testsuite/tests/simplStg/should_run/T13536a.hs b/testsuite/tests/simplStg/should_run/T13536a.hs
new file mode 100644 (file)
index 0000000..118c4c9
--- /dev/null
@@ -0,0 +1,28 @@
+{-# LANGUAGE TypeFamilies #-}
+module Main where
+
+main :: IO ()
+main = do
+  let f :: (Bool, Bool) -> (Bool, Bool) -> (Bool, Bool)
+      f (True, False) (False, False) = (False, True)
+      f _ _ = (True, False)
+      ((i, b), v) = ((False,True),[(False,True),(False,False),(True,True),(True,False),(False,False),(False,True),(True,True),(True,True),(False,True),(True,False),(False,False),(True,True),(True,True),(False,False),(False,False),(False,True),(True,False),(True,False),(True,True),(True,True),(False,True),(True,False),(True,False),(True,True),(False,False),(True,True),(False,False),(True,False),(False,True),(True,True)])
+  print $ foldlTest f (i, b) v
+
+type FoldlTest a = (a -> a -> a) -> a -> [a] -> Bool
+
+foldlTest :: FoldlTest (Bool, Bool)
+foldlTest f (i, b) v =
+  foldl f (i, b) v == foldl (\x -> f (unmodel x)) (i, b) v
+
+class TestData a where
+  type Model a
+  unmodel :: Model a -> a
+
+instance TestData Bool where
+  type Model Bool = Bool
+  unmodel = id
+
+instance (Eq a, Eq b, TestData a, TestData b) => TestData (a,b) where
+  type Model (a,b) = (Model a, Model b)
+  unmodel (a,b) = (unmodel a, unmodel b)
diff --git a/testsuite/tests/simplStg/should_run/T13536a.stdout b/testsuite/tests/simplStg/should_run/T13536a.stdout
new file mode 100644 (file)
index 0000000..0ca9514
--- /dev/null
@@ -0,0 +1 @@
+True
index b24da84..d3aa937 100644 (file)
@@ -11,3 +11,12 @@ setTestOpts(f)
 
 test('T9291', normal, compile_and_run, [''])
 test('T13536', normal, compile_and_run, [''])
+
+test('T13536a',
+    [stats_num_field('bytes allocated',
+                    [ (wordsize(64), 86664, 5) ]),
+                    # 2017-04-10     86664 -- 25769889696 if broken
+     only_ways(['optasm'])],
+    compile_and_run,
+    [''])
+