Skip to content

Commit ec1bb3c

Browse files
committed
initial benchmarks for List.map
2017 MacBook Pro 2.3 GHz Intel Core i5, 8 GB 2133 MHz LPDDR3 Node v8.9.1 List ==== map --- map: empty list mean = 1.31 μs stddev = 11.87 μs min = 799.00 ns max = 375.82 μs map: singleton list mean = 2.40 μs stddev = 11.03 μs min = 1.03 μs max = 342.18 μs map: list (1000 elems) mean = 143.41 μs stddev = 225.12 μs min = 97.16 μs max = 2.03 ms map: list (2000 elems) mean = 274.16 μs stddev = 295.84 μs min = 199.66 μs max = 2.06 ms map: list (5000 elems) mean = 531.84 μs stddev = 512.61 μs min = 229.45 μs max = 2.95 ms map: list (10000 elems) mean = 895.24 μs stddev = 777.87 μs min = 464.59 μs max = 2.94 ms map: list (100000 elems) mean = 33.45 ms stddev = 7.65 ms min = 22.07 ms max = 63.47 ms
1 parent 6c8aaad commit ec1bb3c

File tree

4 files changed

+68
-2
lines changed

4 files changed

+68
-2
lines changed

bench/Bench/Data/List.purs

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
module Bench.Data.List where
2+
3+
import Prelude
4+
import Control.Monad.Eff (Eff)
5+
import Control.Monad.Eff.Console (CONSOLE, log)
6+
import Performance.Minibench (bench)
7+
8+
import Data.List as L
9+
10+
benchList :: Eff (console :: CONSOLE) Unit
11+
benchList = do
12+
log "map"
13+
log "---"
14+
benchMap
15+
16+
where
17+
18+
benchMap = do
19+
let nats = L.range 0 999999
20+
mapFn = map (_ + 1)
21+
list1000 = L.take 1000 nats
22+
list2000 = L.take 2000 nats
23+
list5000 = L.take 5000 nats
24+
list10000 = L.take 10000 nats
25+
list100000 = L.take 100000 nats
26+
27+
log "map: empty list"
28+
let emptyList = L.Nil
29+
bench \_ -> mapFn emptyList
30+
31+
log "map: singleton list"
32+
let singletonList = L.Cons 0 L.Nil
33+
bench \_ -> mapFn singletonList
34+
35+
log $ "map: list (" <> show (L.length list1000) <> " elems)"
36+
bench \_ -> mapFn list1000
37+
38+
log $ "map: list (" <> show (L.length list2000) <> " elems)"
39+
bench \_ -> mapFn list2000
40+
41+
log $ "map: list (" <> show (L.length list5000) <> " elems)"
42+
bench \_ -> mapFn list5000
43+
44+
log $ "map: list (" <> show (L.length list10000) <> " elems)"
45+
bench \_ -> mapFn list10000
46+
47+
log $ "map: list (" <> show (L.length list100000) <> " elems)"
48+
bench \_ -> mapFn list100000

bench/Main.purs

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
module Bench.Main where
2+
3+
import Prelude
4+
import Control.Monad.Eff (Eff)
5+
import Control.Monad.Eff.Console (CONSOLE, log)
6+
7+
import Bench.Data.List (benchList)
8+
9+
main :: Eff (console :: CONSOLE) Unit
10+
main = do
11+
log "List"
12+
log "===="
13+
benchList

bower.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
"purescript-arrays": "^4.0.0",
3232
"purescript-assert": "^3.0.0",
3333
"purescript-console": "^3.0.0",
34-
"purescript-math": "^2.0.0"
34+
"purescript-math": "^2.0.0",
35+
"purescript-minibench": "matthewleon/purescript-minibench#gc"
3536
}
3637
}

package.json

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,11 @@
33
"scripts": {
44
"clean": "rimraf output && rimraf .pulp-cache",
55
"build": "pulp build -- --censor-lib --strict",
6-
"test": "pulp test"
6+
"test": "pulp test",
7+
8+
"bench:build": "purs compile 'bench/**/*.purs' 'src/**/*.purs' 'bower_components/*/src/**/*.purs'",
9+
"bench:run": "node --expose-gc -e 'require(\"./output/Bench.Main/index.js\").main()'",
10+
"bench": "npm run bench:build && npm run bench:run"
711
},
812
"devDependencies": {
913
"pulp": "^11.0.0",

0 commit comments

Comments
 (0)