on master help sign in
added comprehensive benchmarks
0b1aeceMark Lentczner
tests/BenchUUID.hs+20−5
@@ -1,11 +1,15 @@
1import Control.Monad (replicateM)
1import Control.Monad (replicateM)
2import Control.Parallel.Strategies
2import Control.Parallel.Strategies
3import Criterion.Main
3import Criterion.Main
4+import Data.Char (ord)
4import Data.Maybe (fromJust)
5import Data.Maybe (fromJust)
6+import Data.Word
5import qualified Data.ByteString.Lazy as BL
7import qualified Data.ByteString.Lazy as BL
6import qualified Data.ByteString.Lazy.Internal as BL
8import qualified Data.ByteString.Lazy.Internal as BL
7import qualified Data.UUID as U
9import qualified Data.UUID as U
8import qualified Data.UUID.Internal as U
10import qualified Data.UUID.Internal as U
11+import qualified Data.UUID.V1 as U
12+import qualified Data.UUID.V5 as U
9import System.Random
13import System.Random
10
14
11
15
@@ -28,10 +32,21 @@ main = do
28 u1 <- randomIO
32 u1 <- randomIO
29 let s1 = U.toString u1
33 let s1 = U.toString u1
30 b1 = U.toByteString u1
34 b1 = U.toByteString u1
35+ n1 = (map (fromIntegral . ord) "http://www.haskell.org/") :: [Word8]
31 defaultMain [
36 defaultMain [
37+ bgroup "null" [
38+ bench "null" $ B U.null u1,
39+ bench "null nil" $ B U.null U.nil
40+ ],
41+ bgroup "conversion" [
32− bench "toString" $ B (rnf . U.toString) u1,
42+ bench "toString" $ B (rnf . U.toString) u1,
33− bench "fromString" $ B (rnf . U.fromString) s1,
43+ bench "fromString" $ B (rnf . U.fromString) s1,
34− bench "toByteString" $ B (rnf . U.toByteString) u1,
44+ bench "toByteString" $ B (rnf . U.toByteString) u1,
35− bench "fromByteString" $ B (rnf . U.fromByteString) b1,
45+ bench "fromByteString" $ B (rnf . U.fromByteString) b1
46+ ],
47+ bgroup "generation" [
48+ bench "V1" $ rnf `fmap` U.nextUUID,
36− bench "random gen" $ rnf `fmap` (randomIO :: IO U.UUID)
49+ bench "V4" $ rnf `fmap` (randomIO :: IO U.UUID),
50+ bench "V5" $ B (rnf . U.generateNamed U.namespaceURL) n1
51+ ]
37 ]
52 ]