on master help sign in
Benchmark for Storable instance
4fb273bAntoine Latter
tests/BenchUUID.hs+12−1
@@ -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
21
22
@@ -47,6 +48,11 @@ main = do
47 writeIORef randomState state'
48 writeIORef randomState state'
48 return uuid
49 return uuid
49
50
51+ -- setup for Storable benchmark
52+ alloca $ \ uuidPtr -> do
53+
54+ poke uuidPtr u1
55+
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
69 ],
75 ],
70− bench "set making" $ nf Set.fromList uuids
76+ bench "set making" $ nf Set.fromList uuids,
77+
78+ bgroup "storable" [
79+ bench "peek" $ nfIO (peek uuidPtr),
80+ bench "poke" $ poke uuidPtr u1
81+ ]
71 ]
82 ]
72
83
73-- 50 uuids, so tests can be repeatable
84-- 50 uuids, so tests can be repeatable