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