11module Bench.Data.List where
22
33import 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_ )
49import Effect (Effect )
510import Effect.Console (log )
611import Performance.Minibench (bench )
712
8- import Data.List as L
9-
1013benchList :: Effect Unit
1114benchList = do
12- log " map"
13- log " ---"
14- benchMap
15+ benchLists " map" $ map (_ + 1 )
16+ benchLists " foldr" $ foldr add 0
1517
1618 where
1719
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
4323
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
4627
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