@@ -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
4import Data.Maybe (fromJust)
5import Data.Maybe (fromJust)
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
@@ -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 [
38+ bench "null" $ B U.null u1,
39+ bench "null nil" $ B U.null U.nil
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
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