1
1
module Bench.Data.List where
2
2
3
3
import Prelude
4
+ import Data.Foldable (maximum )
5
+ import Data.Int (pow )
6
+ import Data.List (List (..), take , range , foldr , length )
7
+ import Data.Maybe (fromMaybe )
8
+ import Data.Traversable (traverse_ )
4
9
import Effect (Effect )
5
10
import Effect.Console (log )
6
11
import Performance.Minibench (bench )
7
12
8
- import Data.List as L
9
-
10
13
benchList :: Effect Unit
11
14
benchList = do
12
- log " map"
13
- log " ---"
14
- benchMap
15
+ benchLists " map" $ map (_ + 1 )
16
+ benchLists " foldr" $ foldr add 0
15
17
16
18
where
17
19
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
20
+ listSizes = Cons 0 $ map (pow 10 ) $ range 0 5
21
+ nats = range 0 $ (fromMaybe 0 $ maximum listSizes) - 1
22
+ lists = map (\n -> take n nats) listSizes
43
23
44
- log $ " map: list (" <> show (L .length list10000) <> " elems)"
45
- bench \_ -> mapFn list10000
24
+ benchLists :: forall b . String -> (List Int -> b ) -> Effect Unit
25
+ benchLists label func =
26
+ traverse_ (benchAList label func) lists
46
27
47
- log $ " map: list (" <> show (L .length list100000) <> " elems)"
48
- bench \_ -> mapFn list100000
28
+ benchAList :: forall a b . String -> (List a -> b ) -> List a -> Effect Unit
29
+ benchAList label func list = do
30
+ log " ---"
31
+ log $ label <> " : list (" <> show (length list) <> " elems)"
32
+ bench \_ -> func list
0 commit comments