Skip to content

Instantly share code, notes, and snippets.

@vollmerm
Created February 19, 2019 02:47
Show Gist options
  • Save vollmerm/1f694ddd8d59b010110a5dc1b7a4b2f4 to your computer and use it in GitHub Desktop.
Save vollmerm/1f694ddd8d59b010110a5dc1b7a4b2f4 to your computer and use it in GitHub Desktop.
benchmain.hs
#!/usr/bin/env stack
-- stack --resolver lts-13.8 --install-ghc runghc --package criterion
{-# LANGUAGE DeriveGeneric, DeriveAnyClass #-}
import Criterion.Main
import GHC.Generics (Generic)
import Control.DeepSeq
data Tree = Leaf Int | Inner Int Int Tree Tree
deriving (Eq, Generic, NFData)
sum_up :: Tree -> Tree
sum_up tr =
case tr of
Leaf n -> Leaf n
Inner sum x left right ->
let l = sum_up left
r = sum_up right
in Inner ((value l) + (value r)) x l r
set_even :: Tree -> Tree
set_even tr =
case tr of
Leaf n -> Leaf n
Inner sum x left right ->
let l = set_even left
r = set_even right
in Inner sum (sum `mod` 2) l r
value :: Tree -> Int
value tr =
case tr of
Leaf n -> n
Inner sum x left right -> sum
generateTree :: Int -> Tree
generateTree 0 = Leaf 2
generateTree n = Inner 0 0 (generateTree (n - 1)) (generateTree (n - 1))
sumup_seteven :: Tree -> Int
sumup_seteven tr = value $ sum_up $ set_even tr
tree_ident :: Tree -> Tree
tree_ident tr = tr
main = defaultMain [
let tree = generateTree 20 in
bgroup "gibbon" [ bench "sumup_seteven" $ nf sumup_seteven tree
, bench "ident" $ nf tree_ident tree ]
]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment