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