@@ -0,0 +1,37 @@
1+import Control.Monad (replicateM)
2+import Control.Parallel.Strategies
3+import Criterion.Main
4+import Data.Maybe (fromJust)
5+import qualified Data.ByteString.Lazy as BL
6+import qualified Data.ByteString.Lazy.Internal as BL
7+import qualified Data.UUID as U
8+import qualified Data.UUID.Internal as U
9+import System.Random
10+
11+
12+instance NFData BL.ByteString where
13+ rnf BL.Empty = ()
14+ rnf (BL.Chunk _ ts) = rnf ts
15+
16+instance NFData U.UUID where
17+ rnf (U.UUID tl tm th ch cl node) =
18+ rnf tl `seq` rnf tm `seq` rnf th `seq` rnf ch `seq` rnf cl `seq` rnf node
19+
20+instance NFData U.Node where
21+ rnf (U.Node w1 w2 w3 w4 w5 w6) =
22+ rnf w1 `seq` rnf w2 `seq` rnf w3 `seq` rnf w4 `seq` rnf w5 `seq` rnf w6
23+
24+
25+
26+main :: IO ()
27+main = do
28+ u1 <- randomIO
29+ let s1 = U.toString u1
30+ b1 = U.toByteString u1
31+ defaultMain [
32+ bench "toString" $ B (rnf . U.toString) u1,
33+ bench "fromString" $ B (rnf . U.fromString) s1,
34+ bench "toByteString" $ B (rnf . U.toByteString) u1,
35+ bench "fromByteString" $ B (rnf . U.fromByteString) b1,
36+ bench "random gen" $ (randomIO :: IO U.UUID)
37+ ]