on master help sign in
speed up V4 benchmark
1d8922bAntoine Latter
tests/BenchUUID.hs+12−2
@@ -1,6 +1,7 @@
1import Control.Parallel.Strategies
1import Control.Parallel.Strategies
2import Criterion.Main
2import Criterion.Main
3import Data.Char (ord)
3import Data.Char (ord)
4+import Data.IORef
4import Data.Maybe (fromJust)
5import Data.Maybe (fromJust)
5import Data.Word
6import Data.Word
6import qualified Data.Set as Set
7import qualified Data.Set as Set
@@ -11,7 +12,7 @@ import qualified Data.UUID.V1 as U
11import qualified Data.UUID.V3 as U3
12import qualified Data.UUID.V3 as U3
12import qualified Data.UUID.V5 as U5
13import qualified Data.UUID.V5 as U5
13import System.Random
14import System.Random
14−
15+import System.Random.Mersenne.Pure64
15
16
16instance NFData BL.ByteString where
17instance NFData BL.ByteString where
17 rnf BL.Empty = ()
18 rnf BL.Empty = ()
@@ -36,6 +37,15 @@ main = do
36 BL.pack [0x16, 0x9a, 0x5a, 0x43, 0xc0, 0x51, 0x4a, 0x16,
37 BL.pack [0x16, 0x9a, 0x5a, 0x43, 0xc0, 0x51, 0x4a, 0x16,
37 0x98, 0xf4, 0x08, 0x44, 0x7d, 0xdd, 0x5d, 0xc0]
38 0x98, 0xf4, 0x08, 0x44, 0x7d, 0xdd, 0x5d, 0xc0]
38 u3 = fromJust $ U.fromString "dea6f619-1038-438b-b4af-f1cdec1e6e23"
39 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+
39 defaultMain [
49 defaultMain [
40 bgroup "testing" [
50 bgroup "testing" [
41 bench "null non-nil" $ whnf U.null u1,
51 bench "null non-nil" $ whnf U.null u1,
@@ -52,7 +62,7 @@ main = do
52 ],
62 ],
53 bgroup "generation" [
63 bgroup "generation" [
54 bench "V1" $ nfIO U.nextUUID,
64 bench "V1" $ nfIO U.nextUUID,
55− bench "V4" $ nfIO (randomIO :: IO U.UUID),
65+ bench "V4" $ nfIO (randomUUID :: IO U.UUID),
56 bench "V3" $ nf (U3.generateNamed U3.namespaceURL) n1,
66 bench "V3" $ nf (U3.generateNamed U3.namespaceURL) n1,
57 bench "V5" $ nf (U5.generateNamed U5.namespaceURL) n1
67 bench "V5" $ nf (U5.generateNamed U5.namespaceURL) n1
58 ],
68 ],
uuid.cabal+2−1
@@ -56,7 +56,8 @@ Executable benchuuid
56 Buildable: True
56 Buildable: True
57 Build-Depends: random, binary, bytestring, Crypto, maccatcher,
57 Build-Depends: random, binary, bytestring, Crypto, maccatcher,
58 time, base >=3, base < 5, containers,
58 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
60 Else
61 Else
61 Buildable: False
62 Buildable: False
62
63