This repository was archived by the owner on Oct 4, 2020. It is now read-only.
File tree 4 files changed +68
-8
lines changed
4 files changed +68
-8
lines changed Original file line number Diff line number Diff line change @@ -10,8 +10,19 @@ import Data.List as L
10
10
import Data.Map as M
11
11
12
12
benchMap :: Eff (console :: CONSOLE ) Unit
13
- benchMap = benchSize
13
+ benchMap = do
14
+ log " size"
15
+ log " ---------------"
16
+ benchSize
17
+
18
+ log " "
19
+
20
+ log " fromFoldable"
21
+ log " ------------"
22
+ benchFromFoldable
23
+
14
24
where
25
+
15
26
benchSize = do
16
27
let nats = L .range 0 999999
17
28
natPairs = (flip Tuple ) unit <$> nats
@@ -31,3 +42,14 @@ benchMap = benchSize
31
42
32
43
log $ " size: big map (" <> show (M .size bigMap) <> " )"
33
44
benchWith 10 \_ -> M .size bigMap
45
+
46
+ benchFromFoldable = do
47
+ let natStrs = show <$> L .range 0 99999
48
+ natPairs = (flip Tuple ) unit <$> natStrs
49
+ shortPairList = L .take 10000 natPairs
50
+
51
+ log $ " fromFoldable (" <> show (L .length shortPairList) <> " )"
52
+ benchWith 100 \_ -> M .fromFoldable shortPairList
53
+
54
+ log $ " fromFoldable (" <> show (L .length natPairs) <> " )"
55
+ benchWith 10 \_ -> M .fromFoldable natPairs
Original file line number Diff line number Diff line change
1
+ module Bench.Data.StrMap where
2
+
3
+ import Prelude
4
+ import Control.Monad.Eff (Eff )
5
+ import Control.Monad.Eff.Console (CONSOLE , log )
6
+ import Performance.Minibench (benchWith )
7
+
8
+ import Data.Tuple (Tuple (..))
9
+ import Data.List as L
10
+ import Data.StrMap as M
11
+
12
+ benchStrMap :: Eff (console :: CONSOLE ) Unit
13
+ benchStrMap = do
14
+ log " fromFoldable"
15
+ benchFromFoldable
16
+
17
+ where
18
+ benchFromFoldable = do
19
+ let natStrs = show <$> L .range 0 99999
20
+ natPairs = (flip Tuple ) unit <$> natStrs
21
+ shortPairList = L .take 10000 natPairs
22
+
23
+ log $ " fromFoldable (" <> show (L .length shortPairList) <> " )"
24
+ benchWith 100 \_ -> M .fromFoldable shortPairList
25
+
26
+ log $ " fromFoldable (" <> show (L .length natPairs) <> " )"
27
+ benchWith 10 \_ -> M .fromFoldable natPairs
Original file line number Diff line number Diff line change 1
1
module Bench.Main where
2
2
3
+ import Prelude
3
4
import Control.Monad.Eff (Eff )
4
- import Control.Monad.Eff.Console (CONSOLE )
5
- import Data.Unit (Unit )
5
+ import Control.Monad.Eff.Console (CONSOLE , log )
6
6
7
7
import Bench.Data.Map (benchMap )
8
+ import Bench.Data.StrMap (benchStrMap )
8
9
9
10
main :: Eff (console :: CONSOLE ) Unit
10
- main = benchMap
11
+ main = do
12
+ log " Map"
13
+ log " ==="
14
+ benchMap
15
+
16
+ log " "
17
+
18
+
19
+ log " StrMap"
20
+ log " ======"
21
+ benchStrMap
Original file line number Diff line number Diff line change @@ -43,7 +43,7 @@ module Data.StrMap
43
43
44
44
import Prelude
45
45
46
- import Control.Monad.Eff (Eff , runPure )
46
+ import Control.Monad.Eff (Eff , runPure , foreachE )
47
47
import Control.Monad.ST as ST
48
48
49
49
import Data.Array as A
@@ -204,10 +204,10 @@ update f k m = alter (maybe Nothing f) k m
204
204
205
205
-- | Create a map from a foldable collection of key/value pairs
206
206
fromFoldable :: forall f a . Foldable f => f (Tuple String a ) -> StrMap a
207
- fromFoldable l = pureST ( do
207
+ fromFoldable l = pureST do
208
208
s <- SM .new
209
- for_ l ( \(Tuple k v) -> SM .poke s k v)
210
- pure s)
209
+ foreachE ( A .fromFoldable l) \(Tuple k v) -> void ( SM .poke s k v)
210
+ pure s
211
211
212
212
foreign import _lookupST :: forall a h r z . Fn4 z (a -> z ) String (SM.STStrMap h a ) (Eff (st :: ST.ST h | r ) z )
213
213
You can’t perform that action at this time.
0 commit comments