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