diff --git a/bench/Data/Array.purs b/bench/Data/Array.purs new file mode 100644 index 00000000..dc94c7d8 --- /dev/null +++ b/bench/Data/Array.purs @@ -0,0 +1,28 @@ +module Bench.Data.Array where + +import Prelude + +import Data.Array as Array +import Data.Maybe (Maybe(..)) +import Effect (Effect) +import Effect.Console (log) +import Performance.Minibench (benchWith) + +benchArray :: Effect Unit +benchArray = do + log "mapMaybe" + log "---------------" + benchMapMaybe + + where + + benchMapMaybe = do + let shortNats = Array.range 0 100 + longNats = Array.range 0 10000 + onlyEven x = if x `mod` 2 == 0 then Just x else Nothing + + log $ "mapMaybe (" <> show (Array.length shortNats) <> ")" + benchWith 1000 \_ -> Array.mapMaybe onlyEven shortNats + + log $ "mapMaybe (" <> show (Array.length longNats) <> ")" + benchWith 100 \_ -> Array.mapMaybe onlyEven longNats diff --git a/bench/Main.purs b/bench/Main.purs new file mode 100644 index 00000000..f8a27459 --- /dev/null +++ b/bench/Main.purs @@ -0,0 +1,13 @@ +module Bench.Main where + +import Prelude + +import Bench.Data.Array (benchArray) +import Effect (Effect) +import Effect.Console (log) + +main :: Effect Unit +main = do + log "Array" + log "===" + benchArray diff --git a/bower.json b/bower.json index 3b108a88..5a978572 100644 --- a/bower.json +++ b/bower.json @@ -29,6 +29,7 @@ "purescript-unsafe-coerce": "master" }, "devDependencies": { + "purescript-minibench": "master", "purescript-assert": "master", "purescript-console": "master", "purescript-const": "master" diff --git a/package.json b/package.json index 8985bcfd..4f2c191a 100644 --- a/package.json +++ b/package.json @@ -3,7 +3,10 @@ "scripts": { "clean": "rimraf output && rimraf .pulp-cache", "build": "eslint src && pulp build -- --censor-lib --strict", - "test": "pulp test" + "test": "pulp test", + "bench:build": "pulp build --include bench -- --censor-lib --strict", + "bench:run": "node --expose-gc -e \"require('./output/Bench.Main/index.js').main()\"", + "bench": "npm run bench:build && npm run bench:run" }, "devDependencies": { "eslint": "^4.19.1",