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