11module Bench.Data.Map where
22
33import Prelude
4+
45import Control.Monad.Eff (Eff )
56import Control.Monad.Eff.Console (CONSOLE , log )
6- import Performance.Minibench (bench , benchWith )
7-
8- import Data.Tuple (Tuple (..))
7+ import Data.Foldable (foldl )
8+ import Data.List (zipWith )
99import Data.List as L
1010import Data.Map as M
11+ import Data.Tuple (Tuple (..))
12+ import Performance.Minibench (bench , benchWith )
1113
1214benchMap :: Eff (console :: CONSOLE ) Unit
1315benchMap = do
@@ -21,15 +23,22 @@ benchMap = do
2123 log " ------------"
2224 benchFromFoldable
2325
26+ log " "
27+
28+ log " foldl"
29+ log " ------------"
30+ benchFoldl
31+
2432 where
2533
34+ nats = L .range 0 999999
35+ natPairs = zipWith Tuple nats nats
36+ singletonMap = M .singleton 0 0
37+ smallMap = M .fromFoldable $ L .take 100 natPairs
38+ midMap = M .fromFoldable $ L .take 10000 natPairs
39+ bigMap = M .fromFoldable $ natPairs
40+
2641 benchSize = do
27- let nats = L .range 0 999999
28- natPairs = (flip Tuple ) unit <$> nats
29- singletonMap = M .singleton 0 unit
30- smallMap = M .fromFoldable $ L .take 100 natPairs
31- midMap = M .fromFoldable $ L .take 10000 natPairs
32- bigMap = M .fromFoldable $ natPairs
3342
3443 log " size: singleton map"
3544 bench \_ -> M .size singletonMap
@@ -53,3 +62,19 @@ benchMap = do
5362
5463 log $ " fromFoldable (" <> show (L .length natPairs) <> " )"
5564 benchWith 10 \_ -> M .fromFoldable natPairs
65+
66+ benchFoldl = do
67+ let sum = foldl (+) 0
68+
69+ log " foldl: singleton map"
70+ bench \_ -> sum singletonMap
71+
72+ log $ " foldl: small map (" <> show (M .size smallMap) <> " )"
73+ bench \_ -> sum smallMap
74+
75+ log $ " foldl: midsize map (" <> show (M .size midMap) <> " )"
76+ benchWith 100 \_ -> sum midMap
77+
78+ log $ " foldl: big map (" <> show (M .size bigMap) <> " )"
79+ benchWith 10 \_ -> sum bigMap
80+
0 commit comments