From ba448dfc6e7705cea865845695b11bfab12db167 Mon Sep 17 00:00:00 2001 From: Matthew Leon Date: Mon, 5 Jun 2017 12:06:20 +0100 Subject: [PATCH] simple benchmarks addresses #101 --- bench/Bench/Data/Map.purs | 32 ++++++++++++++++++++++++++++++++ bench/Bench/Data/StrMap.purs | 32 ++++++++++++++++++++++++++++++++ bench/Bench/Main.purs | 20 ++++++++++++++++++++ bower.json | 3 ++- package.json | 6 +++++- 5 files changed, 91 insertions(+), 2 deletions(-) create mode 100644 bench/Bench/Data/Map.purs create mode 100644 bench/Bench/Data/StrMap.purs create mode 100644 bench/Bench/Main.purs diff --git a/bench/Bench/Data/Map.purs b/bench/Bench/Data/Map.purs new file mode 100644 index 00000000..d879d0d4 --- /dev/null +++ b/bench/Bench/Data/Map.purs @@ -0,0 +1,32 @@ +module Bench.Data.Map where + +import Prelude +import Control.Monad.Eff (Eff) +import Control.Monad.Eff.Console (CONSOLE, log) +import Performance.Minibench (bench) + +import Data.Tuple (Tuple(..)) +import Data.List as L +import Data.Map as M + +benchMap :: Eff (console :: CONSOLE) Unit +benchMap = do + log "insertion benchmark" + benchInsert + + log "" + + log "lookup benchmark" + benchLookup + +benchInsert :: Eff (console :: CONSOLE) Unit +benchInsert = + let natPairs = (flip Tuple) unit <$> L.range 0 999999 + bigMap = M.fromFoldable $ natPairs + in bench \_ -> M.insert 0 unit bigMap + +benchLookup :: Eff (console :: CONSOLE) Unit +benchLookup = + let natPairs = (flip Tuple) unit <$> L.range 0 999999 + bigMap = M.fromFoldable $ natPairs + in bench \_ -> M.lookup 0 bigMap diff --git a/bench/Bench/Data/StrMap.purs b/bench/Bench/Data/StrMap.purs new file mode 100644 index 00000000..230b1d4a --- /dev/null +++ b/bench/Bench/Data/StrMap.purs @@ -0,0 +1,32 @@ +module Bench.Data.StrMap where + +import Prelude +import Control.Monad.Eff (Eff) +import Control.Monad.Eff.Console (CONSOLE, log) +import Performance.Minibench (bench) + +import Data.Tuple (Tuple(..)) +import Data.List as L +import Data.Map as M + +benchStrMap :: Eff (console :: CONSOLE) Unit +benchStrMap = do + log "insertion benchmark" + benchInsert + + log "" + + log "lookup benchmark" + benchLookup + +benchInsert :: Eff (console :: CONSOLE) Unit +benchInsert = + let natPairs = (flip Tuple) unit <<< show <$> L.range 0 999999 + bigMap = M.fromFoldable $ natPairs + in bench \_ -> M.insert "0" unit bigMap + +benchLookup :: Eff (console :: CONSOLE) Unit +benchLookup = + let natPairs = (flip Tuple) unit <<< show <$> L.range 0 999999 + bigMap = M.fromFoldable $ natPairs + in bench \_ -> M.lookup "0" bigMap diff --git a/bench/Bench/Main.purs b/bench/Bench/Main.purs new file mode 100644 index 00000000..b2163842 --- /dev/null +++ b/bench/Bench/Main.purs @@ -0,0 +1,20 @@ +module Bench.Main where + +import Prelude +import Control.Monad.Eff (Eff) +import Control.Monad.Eff.Console (CONSOLE, log) + +import Bench.Data.Map (benchMap) +import Bench.Data.StrMap (benchStrMap) + +main :: Eff (console :: CONSOLE) Unit +main = do + log "Map benchmarks" + log "==============" + benchMap + + log "" + + log "StrMap benchmarks" + log "====================" + benchStrMap diff --git a/bower.json b/bower.json index 4527f5a7..e56480f3 100644 --- a/bower.json +++ b/bower.json @@ -27,6 +27,7 @@ "purescript-st": "^3.0.0" }, "devDependencies": { - "purescript-quickcheck": "^4.0.0" + "purescript-quickcheck": "^4.0.0", + "purescript-minibench": "^1.0.0" } } diff --git a/package.json b/package.json index 132cefcd..0373d0c9 100644 --- a/package.json +++ b/package.json @@ -3,7 +3,11 @@ "scripts": { "clean": "rimraf output && rimraf .pulp-cache", "build": "eslint src && pulp build -- --censor-lib --strict", - "test": "pulp test" + "test": "pulp test", + + "bench:build": "purs compile 'bench/**/*.purs' 'src/**/*.purs' 'bower_components/*/src/**/*.purs'", + "bench:run": "node -e 'require(\"./output/Bench.Main/index.js\").main()'", + "bench": "npm run bench:build && npm run bench:run" }, "devDependencies": { "eslint": "^3.17.1",