packages feed

mersenne-random 0.1 → 0.1.1

raw patch · 4 files changed

+45/−32 lines, 4 files

Files

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 ()