on master help sign in
speed up V4 benchmark
commit1d8922b2935d70413a87a8d76deb2538cdb73948 authorAntoine Latter <aslatter@gmail.com> dateSun 10 Jan 2010, 19:47 (17 years ago) parentb12345f
2 files changed+14−3
tests/BenchUUID.hs+12−2 uuid.cabal+2−1
tests/BenchUUID.hs+12−2
@@ -1,6 +1,7 @@
11import Control.Parallel.Strategies
22import Criterion.Main
33import Data.Char (ord)
4+import Data.IORef
45import Data.Maybe (fromJust)
56import Data.Word
67import qualified Data.Set as Set
@@ -11,7 +12,7 @@ import qualified Data.UUID.V1 as U
1112import qualified Data.UUID.V3 as U3
1213import qualified Data.UUID.V5 as U5
1314import System.Random
14−
15+import System.Random.Mersenne.Pure64
1516
1617instance NFData BL.ByteString where
1718 rnf BL.Empty = ()
@@ -36,6 +37,15 @@ main = do
3637 BL.pack [0x16, 0x9a, 0x5a, 0x43, 0xc0, 0x51, 0x4a, 0x16,
3738 0x98, 0xf4, 0x08, 0x44, 0x7d, 0xdd, 0x5d, 0xc0]
3839 u3 = fromJust $ U.fromString "dea6f619-1038-438b-b4af-f1cdec1e6e23"
40+
41+ -- setup for random generation
42+ randomState <- newPureMT >>= newIORef
43+ let randomUUID = do
44+ state <- readIORef randomState
45+ let (uuid, state') = random state
46+ writeIORef randomState state'
47+ return uuid
48+
3949 defaultMain [
4050 bgroup "testing" [
4151 bench "null non-nil" $ whnf U.null u1,
@@ -52,7 +62,7 @@ main = do
5262 ],
5363 bgroup "generation" [
5464 bench "V1" $ nfIO U.nextUUID,
55− bench "V4" $ nfIO (randomIO :: IO U.UUID),
65+ bench "V4" $ nfIO (randomUUID :: IO U.UUID),
5666 bench "V3" $ nf (U3.generateNamed U3.namespaceURL) n1,
5767 bench "V5" $ nf (U5.generateNamed U5.namespaceURL) n1
5868 ],
uuid.cabal+2−1
@@ -56,7 +56,8 @@ Executable benchuuid
5656 Buildable: True
5757 Build-Depends: random, binary, bytestring, Crypto, maccatcher,
5858 time, base >=3, base < 5, containers,
59− criterion >= 0.3 && < 0.5, parallel >= 2.1 && < 2.3
59+ criterion >= 0.3 && < 0.5, parallel >= 2.1 && < 2.3,
60+ mersenne-random-pure64 >= 0.2 && < 0.3
6061 Else
6162 Buildable: False
6263