on fbff84e help sign in
typeable/uuid/tests/BenchUUID.hs
120 lines 4.6 kB history raw
1import Control.Monad (replicateM)
2import Control.Parallel.Strategies
3import Criterion.Main
4import Data.Char (ord)
5import Data.Maybe (fromJust)
6import Data.Word
7import qualified Data.Set as Set
8import qualified Data.ByteString.Lazy as BL
9import qualified Data.ByteString.Lazy.Internal as BL
10import qualified Data.UUID as U
11import qualified Data.UUID.Internal as U
12import qualified Data.UUID.V1 as U
13import qualified Data.UUID.V5 as U
14import System.Random
17instance NFData BL.ByteString where
18 rnf BL.Empty = ()
19 rnf (BL.Chunk _ ts) = rnf ts
21instance NFData U.UUID where
22 rnf (U.UUID tl tm th ch cl node) =
23 rnf tl `seq` rnf tm `seq` rnf th `seq` rnf ch `seq` rnf cl `seq` rnf node
25instance NFData U.Node where
26 rnf (U.Node w1 w2 w3 w4 w5 w6) =
27 rnf w1 `seq` rnf w2 `seq` rnf w3 `seq` rnf w4 `seq` rnf w5 `seq` rnf w6
31main :: IO ()
32main = do
33 u1 <- randomIO
34 let s1 = U.toString u1
35 b1 = U.toByteString u1
36 n1 = (map (fromIntegral . ord) "http://www.haskell.org/") :: [Word8]
37 defaultMain [
38 bgroup "null" [
39 bench "null" $ whnf U.null u1,
40 bench "null nil" $ whnf U.null U.nil
41 ],
42 bgroup "conversion" [
43 bench "toString" $ nf U.toString u1,
44 bench "fromString" $ nf U.fromString s1,
45 bench "toByteString" $ nf U.toByteString u1,
46 bench "fromByteString" $ nf U.fromByteString b1
47 ],
48 bgroup "generation" [
49 bench "V1" $ nfIO U.nextUUID,
50 bench "V4" $ nfIO (randomIO :: IO U.UUID),
51 bench "V5" $ nf (U.generateNamed U.namespaceURL) n1
52 ],
53 bench "set making" $ nf Set.fromList uuids
54 ]
56-- 50 uuids, so tests can be repeatable
57uuids :: [U.UUID]
58uuids
59 = map (fromJust . U.fromString)
60 [
61 "35d42593-1fca-4465-b588-a2e78cb996ba",
62 "1e97e407-eca7-4c5d-a947-6fbe9dc168b6",
63 "a41fd7ce-a053-4c0a-a742-77c95b85da2a",
64 "f7e3913a-0fd7-4355-a92f-d73f9b046efa",
65 "8961a35d-55c2-42f3-8680-08fce3986647",
66 "96246c58-d0b4-4e56-a543-356bd59686a9",
67 "72c46194-648c-4b1e-a9fb-2eba060ab43b",
68 "0fc252d4-a37b-4eca-9309-e3d2a59a3a22",
69 "a8aceb5a-6a8e-43f3-85bb-9653a3c1ebcd",
70 "b23d1118-6bc8-4add-9d56-99634d78949f",
71 "5f8c7896-9c4f-4d7e-a4d2-961bda298012",
72 "219a4137-7bc5-42b1-ac95-490948a978e1",
73 "5af5024f-fbe9-45ab-991d-49b655994437",
74 "569dfb33-185d-4a3c-99c4-bc2b83250a7c",
75 "43a58442-aa51-4a5d-8e00-b8a83b5fc5b0",
76 "2865ced1-b54d-4725-8f01-b408f4617424",
77 "b8cfaff0-4dee-4f32-af2f-0469b3e535fc",
78 "63f45bc0-f303-4f1a-b0d6-76f876be626d",
79 "d171eaf3-f20d-45d6-9268-0cc22dfbe887",
80 "7c28f457-ad27-494a-8642-6e47e7f3efb8",
81 "f8de9193-66ff-49e8-9826-fc50858d7855",
82 "2af85f28-cace-4740-b8bb-2b5860f5fdb3",
83 "b12a7a22-edb3-4694-b8f4-0532eaad6112",
84 "5e052a08-8e49-4668-bbe7-77cdbc4679a3",
85 "42d5a68d-3f08-4e39-9b8c-71cc17c538ed",
86 "ba2b1487-b3a4-4a19-98cc-59530f36613f",
87 "e4a5c569-b8ac-4851-8ad2-fbdb89986be2",
88 "35b4a1b6-b5ca-4646-803b-c337ee730d9a",
89 "f0df1206-05d9-49d6-a726-d49fb253e645",
90 "9656a0f0-89b2-4cec-bb1c-fdf5633e1cd7",
91 "d13382f5-04a1-422d-94d6-e47219425816",
92 "b8d0c762-4c6b-4bd0-ad0b-f68988a87166",
93 "06360e85-f18a-44f6-aa72-45f1e60b6b77",
94 "347491ca-62b3-48e8-ac94-6ffebe1318ed",
95 "014339d0-7b2d-4dda-914b-14ee5cb4391b",
96 "dc57931b-4744-41be-b3c4-e24dbeeb606a",
97 "2c9fdcf0-e1d6-4a2d-951d-4766b99032cb",
98 "b6bde422-eea8-4231-bf1c-ee0e56699511",
99 "921073c5-f7c1-4583-ac03-aeb7aef8662b",
100 "eff6a517-aeb1-453e-9810-1b4b324c5a1e",
101 "eadaae8c-cbf8-4e0b-ab80-e34284b07dad",
102 "4d307c36-70d9-453f-8455-ec7e2ba405ed",
103 "53ddef9a-2413-4f7f-8363-cff56ee17c6c",
104 "4dd4c27a-b300-4a00-ab87-eef505275492",
105 "4a5d7001-f0c1-4e2f-8362-8833bda2114b",
106 "0c46f438-9365-406a-b04e-34436806ec25",
107 "b35469cf-05f8-40ff-a38b-117604347957",
108 "f1c54df0-5f59-4891-b3c6-82bac0d814ca",
109 "8091837c-6456-42c3-a686-f4731a41d4f9",
110 "2a0e2efb-a11c-4a44-81ee-3efc37379b48"
111 ]
113#if !(MIN_VERSION_criterion(0,4,0))
114nf f arg = B ( rnf . f) arg
115whnf f arg = B f arg
116#endif
118#if !(MIN_VERSION_criterion(0,4,1))
119nfIO act = rnf `fmap` act
120#endif