diff options
Diffstat (limited to 'bench/Main.hs')
-rw-r--r-- | bench/Main.hs | 26 |
1 files changed, 26 insertions, 0 deletions
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 | ] |