This repository was archived by the owner on Oct 4, 2020. It is now read-only.
File tree Expand file tree Collapse file tree 5 files changed +53
-3
lines changed Expand file tree Collapse file tree 5 files changed +53
-3
lines changed Original file line number Diff line number Diff line change 1+ module Bench.Data.Map where
2+
3+ import Prelude
4+ import Control.Monad.Eff (Eff )
5+ import Control.Monad.Eff.Console (CONSOLE , log )
6+ import Performance.Minibench (bench , benchWith )
7+
8+ import Data.Tuple (Tuple (..))
9+ import Data.List as L
10+ import Data.Map as M
11+
12+ benchMap :: Eff (console :: CONSOLE ) Unit
13+ benchMap = benchSize
14+ where
15+ benchSize = do
16+ let nats = L .range 0 999999
17+ natPairs = (flip Tuple ) unit <$> nats
18+ singletonMap = M .singleton 0 unit
19+ smallMap = M .fromFoldable $ L .take 100 natPairs
20+ midMap = M .fromFoldable $ L .take 10000 natPairs
21+ bigMap = M .fromFoldable $ natPairs
22+
23+ log " size: singleton map"
24+ bench \_ -> M .size singletonMap
25+
26+ log $ " size: small map (" <> show (M .size smallMap) <> " )"
27+ bench \_ -> M .size smallMap
28+
29+ log $ " size: midsize map (" <> show (M .size midMap) <> " )"
30+ benchWith 100 \_ -> M .size midMap
31+
32+ log $ " size: big map (" <> show (M .size bigMap) <> " )"
33+ benchWith 10 \_ -> M .size bigMap
Original file line number Diff line number Diff line change 1+ module Bench.Main where
2+
3+ import Control.Monad.Eff (Eff )
4+ import Control.Monad.Eff.Console (CONSOLE )
5+ import Data.Unit (Unit )
6+
7+ import Bench.Data.Map (benchMap )
8+
9+ main :: Eff (console :: CONSOLE ) Unit
10+ main = benchMap
Original file line number Diff line number Diff line change 2828 "purescript-gen" : " ^1.1.0"
2929 },
3030 "devDependencies" : {
31- "purescript-quickcheck" : " ^4.0.0"
31+ "purescript-quickcheck" : " ^4.0.0" ,
32+ "purescript-minibench" : " ^1.0.0"
3233 }
3334}
Original file line number Diff line number Diff line change 33 "scripts" : {
44 "clean" : " rimraf output && rimraf .pulp-cache" ,
55 "build" : " eslint src && 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 -e 'require(\" ./output/Bench.Main/index.js\" ).main()'" ,
10+ "bench" : " npm run bench:build && npm run bench:run"
711 },
812 "devDependencies" : {
913 "eslint" : " ^3.17.1" ,
Original file line number Diff line number Diff line change @@ -473,7 +473,9 @@ isSubmap m1 m2 = LL.all f $ (toUnfoldable m1 :: LL.List (Tuple k v))
473473
474474-- | Calculate the number of key/value pairs in a map
475475size :: forall k v . Map k v -> Int
476- size = length <<< values
476+ size Leaf = 0
477+ size (Two m1 _ _ m2) = 1 + size m1 + size m2
478+ size (Three m1 _ _ m2 _ _ m3) = 2 + size m1 + size m2 + size m3
477479
478480-- | Apply a function of two arguments to each key/value pair, producing a new map
479481mapWithKey :: forall k v v' . (k -> v -> v' ) -> Map k v -> Map k v'
You can’t perform that action at this time.
0 commit comments