mersenne-random 0.1 → 0.1.1
raw patch · 4 files changed
+45/−32 lines, 4 files
Files
- TODO +2/−1
- mersenne-random.cabal +2/−4
- tests/Makefile +1/−1
- tests/Unit.hs +40/−26
TODO view
@@ -23,5 +23,6 @@ -- too complex. -- coverage tests- -- not working+ -- fixed in head. +-- move to .Unsafe
mersenne-random.cabal view
@@ -1,5 +1,5 @@ name: mersenne-random-version: 0.1+version: 0.1.1 homepage: http://code.haskell.org/~dons/code/mersenne-random synopsis: Generate high quality pseudorandom numbers using a SIMD Fast Mersenne Twister description:@@ -36,9 +36,8 @@ author: Don Stewart maintainer: Don Stewart <dons@galois.com> cabal-version: >= 1.2.0-build-type: Configure tested-with: GHC ==6.8.2, Hugs ==2005-build-type: Configure+build-type: Simple flag small_base description: Build with new smaller base library@@ -106,4 +105,3 @@ include-dirs: include includes: SFMT.h install-includes: SFMT.h- extra-libraries: m
tests/Makefile view
@@ -2,7 +2,7 @@ ghc -O2 -ddump-simpl-stats -no-recomp Unit.hs --make ./Unit ghc -O2 pi.hs --make- ./pi 100000000+ ./pi 10000000 hpc: ghc --make -i. -i../ -optc-DMEXP=19937 -optc-DNDEBUG -optc-O3 -optc-finline-functions -optc-fomit-frame-pointer -optc-fno-strict-aliasing -optc--param -optcmax-inline-insns-single=1800 -#include "SFMT.h" -package base-3.0.1.0 -package old-time-1.0.0.0 -O -Wall -O2 -fvia-C -XCPP -XForeignFunctionInterface -XBangPatterns Unit.hs -o Unit -fhpc -no-recomp ../dist/build/cbits/SFMT.o -I../include
tests/Unit.hs view
@@ -13,29 +13,45 @@ import qualified System.Random as Old import System.Random.Mersenne+import Control.Concurrent+import Control.Concurrent.MVar main = do print version- g <- newMTGen (Just 5) - time $ gen g- ranges_strict g+ s <- newMVar 0 :: IO (MVar Int)+ putStr "Callibrating ... " >> hFlush stdout++ tid <- forkIO $ do+ let go !i = do !a <- random g :: IO Double+ !_ <- swapMVar s i+ go (i+1)+ go 0++ threadDelay (1000 * 1000)+ killThread tid+ putStrLn "done."+ n <- readMVar s -- 1 sec worth of generation+ print n++ time $ gen n g+ ranges_strict n g -- ranges_strict_range g- ranges_ty g+ ranges_ty n g -- ranges g - speed (undefined :: Int) g- speed (undefined :: Integer) g- speed (undefined :: Double) g+ speed n (undefined :: Int) g+ speed n (undefined :: Integer) g+ speed n (undefined :: Double) g - time $ sums g- time $ sum_lazy g+ time $ sums n g+ time $ sum_lazy n g -gen g = do- forM_ [0 .. 10000] $ \i -> do+gen n g = do+ forM_ [0 .. n] $ \i -> do x <- random g :: IO Word- when (i < 1000) $ do+ when (i < 100) $ do printf "%12u " (fromIntegral x :: Int) when (i `rem` 4 == 3) $ putChar '\n'@@ -52,9 +68,8 @@ -- overhead cause by random's badness-sums g = do+sums lim g = do - let lim = 100000000 printf "Generating %d randoms ...\n" lim @@ -67,8 +82,7 @@ print =<< go 0 0 -sum_lazy g = do- let lim = 100000000+sum_lazy lim g = do printf "Generating %d randoms lazily ...\n" lim xs <- randoms g :: IO [Int]@@ -95,8 +109,7 @@ -} -- overhead cause by random's badness-ranges_ty g = do- let n = 10000000+ranges_ty n g = do test_type g n (undefined :: Bool) test_type g n (undefined :: Word8) test_type g n (undefined :: Word16)@@ -110,8 +123,7 @@ test_type g n (undefined :: Int8) -- overhead cause by random's badness-ranges_strict g = do- let n = 100000000+ranges_strict n g = do test_strict g n (undefined :: Word) test_strict g n (undefined :: Word8) test_strict g n (undefined :: Word16)@@ -235,12 +247,11 @@ -- overhead cause by random's badness speed :: forall a . (Show a, Ord a, Typeable a, Old.Random a, Num a, MTRandom a)- => a -> MTGen -> IO ()-speed ty g = do-- let lim = 5000000+ => Int -> a -> MTGen -> IO ()+speed lim ty g = do - time $ do+-- x <- + time $ do putStrLn $ "System.Random: " ++ show lim ++ " " ++ show (show $ typeOf ty) let g = Old.mkStdGen 5 @@ -252,7 +263,8 @@ in go g' (n+1) (if a > acc then a else acc) print (go g 0 0) - time $ do+-- y <-+ time $ do putStrLn $ "System.Random.Mersenne: " ++ show lim ++ " " ++ show (show $ typeOf ty) let go !n !acc | n >= lim = return acc@@ -261,4 +273,6 @@ go (n+1::Int) (if a > acc then a else acc) print =<< go 0 0 +-- printf "MT is %s times faster generating %s\n" (show $x`div`y) (show (typeOf ty))+-- return ()