Repository : ssh://darcs.haskell.org//srv/darcs/testsuite On branch : master
http://hackage.haskell.org/trac/ghc/changeset/ae076b7a7de67539e0ef8fdf0b05955c5d2116b1 >--------------------------------------------------------------- commit ae076b7a7de67539e0ef8fdf0b05955c5d2116b1 Author: Simon Marlow <[email protected]> Date: Fri Sep 21 14:31:01 2012 +0100 Add a perf test for #7257 >--------------------------------------------------------------- tests/perf/should_run/T7257.hs | 30 ++++++++++++++++++++ .../ann01.stderr => perf/should_run/T7257.stdout} | 0 tests/perf/should_run/all.T | 17 +++++++++++ 3 files changed, 47 insertions(+), 0 deletions(-) diff --git a/tests/perf/should_run/T7257.hs b/tests/perf/should_run/T7257.hs new file mode 100644 index 0000000..ef65db3 --- /dev/null +++ b/tests/perf/should_run/T7257.hs @@ -0,0 +1,30 @@ +{-# LANGUAGE BangPatterns #-} +module Main where + +import qualified Data.ByteString as S +import Data.IORef +import Control.Monad + +makeBs :: Int -> S.ByteString +makeBs n = S.replicate n (fromIntegral n) + +doStuff :: IORef [S.ByteString] -> Int -> IO () +doStuff ref n = do + let !bs = makeBs n + modifyIORef ref (bs:) +{-# NOINLINE doStuff #-} + +undo :: IORef [S.ByteString] -> IO () +undo ref = do + h <- atomicModifyIORef ref (\(x:xs) -> (xs,x)) + S.length h `seq` return () + +main = do + ref <- newIORef [S.empty] + let fn n = do + doStuff ref n + when (rem 5 n /= 0 ) $ undo ref + + mapM_ fn (take 5000000 $ cycle [1..100]) + var <- readIORef ref + print $ length var diff --git a/tests/annotations/should_compile/ann01.stderr b/tests/perf/should_run/T7257.stdout similarity index 100% copy from tests/annotations/should_compile/ann01.stderr copy to tests/perf/should_run/T7257.stdout diff --git a/tests/perf/should_run/all.T b/tests/perf/should_run/all.T index c7582d6..22acf28 100644 --- a/tests/perf/should_run/all.T +++ b/tests/perf/should_run/all.T @@ -237,3 +237,20 @@ test('T5536', compile_and_run, ['-O']) +test('T7257', + [if_wordsize(32, + stats_range_field('bytes allocated', 1150000000, 10)), + # expected value: 1246287228 (i386/Linux) + if_wordsize(32, + stats_range_field('peak_megabytes_allocated', 150, 5)), + # unkonwn + if_wordsize(64, + stats_range_field('bytes allocated', 1774893760, 5)), + # 2012-09-21: 1774893760 (amd64/Linux) + if_wordsize(64, + stats_range_field('peak_megabytes_allocated', 227, 5)), + # 2012-09-21: 227 (amd64/Linux) + + only_ways(['normal']) + ], + compile_and_run, ['-O']) _______________________________________________ Cvs-ghc mailing list [email protected] http://www.haskell.org/mailman/listinfo/cvs-ghc
