@@ -16,6 +16,7 @@ import qualified Data.UUID as U
16import qualified Data.UUID.V1 as U
16import qualified Data.UUID.V1 as U
17import qualified Data.UUID.V3 as U3
17import qualified Data.UUID.V3 as U3
18import qualified Data.UUID.V5 as U5
18import qualified Data.UUID.V5 as U5
19+import Foreign (alloca, peek, poke)
19import System.Random
20import System.Random
20import System.Random.Mersenne.Pure64
21import System.Random.Mersenne.Pure64
@@ -47,6 +48,11 @@ main = do
47 writeIORef randomState state'
48 writeIORef randomState state'
48 return uuid
49 return uuid
51+ -- setup for Storable benchmark
52+ alloca $ \ uuidPtr -> do
50 defaultMain [
56 defaultMain [
51 bgroup "testing" [
57 bgroup "testing" [
52 bench "null non-nil" $ whnf U.null u1,
58 bench "null non-nil" $ whnf U.null u1,
@@ -67,7 +73,12 @@ main = do
67 bench "V3" $ nf (U3.generateNamed U3.namespaceURL) n1,
73 bench "V3" $ nf (U3.generateNamed U3.namespaceURL) n1,
68 bench "V5" $ nf (U5.generateNamed U5.namespaceURL) n1
74 bench "V5" $ nf (U5.generateNamed U5.namespaceURL) n1
70− bench "set making" $ nf Set.fromList uuids
76+ bench "set making" $ nf Set.fromList uuids,
79+ bench "peek" $ nfIO (peek uuidPtr),
80+ bench "poke" $ poke uuidPtr u1
73-- 50 uuids, so tests can be repeatable
84-- 50 uuids, so tests can be repeatable