diff options
author | Sam T <pxqr.sta@gmail.com> | 2013-08-26 21:42:27 +0400 |
---|---|---|
committer | Sam T <pxqr.sta@gmail.com> | 2013-08-26 21:42:27 +0400 |
commit | 5e395da12ef08ff5b69a0e436fe045c36e41dfd2 (patch) | |
tree | ab3b001fa221dcf766370c151590d790c7327a32 | |
parent | 2dd7c644253beb50fd8a2256bba5bff7e32c0978 (diff) |
+ Add bench for generics.
-rw-r--r-- | TODO.org | 2 | ||||
-rw-r--r-- | bench/Main.hs | 26 |
2 files changed, 27 insertions, 1 deletions
@@ -1,7 +1,7 @@ | |||
1 | * DONE generic decode | 1 | * DONE generic decode |
2 | * DONE tests for generics with record selectors | 2 | * DONE tests for generics with record selectors |
3 | * TODO lens compatible selectors renaming | 3 | * TODO lens compatible selectors renaming |
4 | * TODO benchmarks for generic decode | 4 | * DONE benchmarks for generic decode |
5 | * DONE documentation | 5 | * DONE documentation |
6 | * TODO v0.2.0.0 (reason: dictAssoc is hidded now) | 6 | * TODO v0.2.0.0 (reason: dictAssoc is hidded now) |
7 | * TODO use HashMap | 7 | * TODO use HashMap |
diff --git a/bench/Main.hs b/bench/Main.hs index db9b47c..0822395 100644 --- a/bench/Main.hs +++ b/bench/Main.hs | |||
@@ -1,4 +1,5 @@ | |||
1 | {-# LANGUAGE PackageImports #-} | 1 | {-# LANGUAGE PackageImports #-} |
2 | {-# LANGUAGE DeriveGeneric #-} | ||
2 | module Main (main) where | 3 | module Main (main) where |
3 | 4 | ||
4 | import Control.DeepSeq | 5 | import Control.DeepSeq |
@@ -10,6 +11,8 @@ import Data.List as L | |||
10 | import Criterion.Main | 11 | import Criterion.Main |
11 | import System.Environment | 12 | import System.Environment |
12 | 13 | ||
14 | import GHC.Generics | ||
15 | |||
13 | import "bencode" Data.BEncode as A | 16 | import "bencode" Data.BEncode as A |
14 | import Data.AttoBencode as B | 17 | import Data.AttoBencode as B |
15 | import Data.AttoBencode.Parser as B | 18 | import Data.AttoBencode.Parser as B |
@@ -31,6 +34,23 @@ instance NFData B.BValue where | |||
31 | getRight :: Either String a -> a | 34 | getRight :: Either String a -> a |
32 | getRight = either error id | 35 | getRight = either error id |
33 | 36 | ||
37 | data List a = Cons a (List a) | Nil | ||
38 | deriving Generic | ||
39 | |||
40 | instance BEncodable a => BEncodable (List a) | ||
41 | |||
42 | instance NFData a => NFData (List a) where | ||
43 | rnf Nil = () | ||
44 | rnf (Cons x xs) = rnf (x, xs) | ||
45 | |||
46 | replicate' :: Int -> a -> List a | ||
47 | replicate' c x | ||
48 | | c >= 0 = go c | ||
49 | | otherwise = Nil | ||
50 | where | ||
51 | go 0 = Nil | ||
52 | go n = Cons x $ go (pred n) | ||
53 | |||
34 | main :: IO () | 54 | main :: IO () |
35 | main = do | 55 | main = do |
36 | (path : args) <- getArgs | 56 | (path : args) <- getArgs |
@@ -91,4 +111,10 @@ main = do | |||
91 | nf (getRight . C.decoded . BL.toStrict . C.encoded | 111 | nf (getRight . C.decoded . BL.toStrict . C.encoded |
92 | :: [Int] -> [Int] ) | 112 | :: [Int] -> [Int] ) |
93 | d | 113 | d |
114 | |||
115 | , let d = replicate' 10000 0 | ||
116 | in bench "list10000int/bencoding/encode>>decode/generic" $ | ||
117 | nf (getRight . C.decoded . BL.toStrict . C.encoded | ||
118 | :: List Int -> List Int) | ||
119 | d | ||
94 | ] | 120 | ] |