@@ -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)
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
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"
41+ -- setup for random generation
42+ randomState <- newPureMT >>= newIORef
44+ state <- readIORef randomState
45+ let (uuid, state') = random state
46+ writeIORef randomState state'
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
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