@@ -516,10 +516,9 @@ filterAllInNestedList str = do
516516moduleName :: String
517517moduleName = "Data.Stream.StreamK"
518518
519−o_1_space :: [Benchmark]
520−o_1_space =
521− [ bgroup (o_1_space_prefix moduleName)
522− [ bgroup "generation"
519+o_1_space_generation :: Int -> Benchmark
520+o_1_space_generation value =
521+ bgroup "generation"
523522 [ benchFold "unfoldr" toNull (sourceUnfoldr value)
524523 , benchFold "unfoldrM" toNull (sourceUnfoldrM value)
525524
@@ -530,7 +529,10 @@ o_1_space =
530529 , benchFold "concatMapFoldableWith" toNull (sourceFoldMapWith value)
531530 , benchFold "concatMapFoldableWithM" toNull (sourceFoldMapWithM value)
532531 ]
533− , bgroup "elimination"
532+
533+o_1_space_elimination :: Int -> Benchmark
534+o_1_space_elimination value =
535+ bgroup "elimination"
534536 [ benchFold "toNull" toNull (sourceUnfoldrM value)
535537 , benchFold "mapM_" mapM_ (sourceUnfoldrM value)
536538 , benchFold "uncons" uncons (sourceUnfoldrM value)
@@ -538,7 +540,10 @@ o_1_space =
538540 , benchFold "foldl'" foldl (sourceUnfoldrM value)
539541 , benchFold "last" last (sourceUnfoldrM value)
540542 ]
541− , bgroup "nested"
543+
544+o_1_space_nested :: Int -> Benchmark
545+o_1_space_nested value =
546+ bgroup "nested"
542547 [ benchFold "toNullAp" toNullApNested (sourceUnfoldrMN value2)
543548 , benchFold "toNull" toNullNested (sourceUnfoldrMN value2)
544549 , benchFold "toNull3" toNullNested3 (sourceUnfoldrMN value3)
@@ -550,7 +555,14 @@ o_1_space =
550555 , benchFold "filterAllInPure" filterAllInNested (sourceUnfoldrN value2)
551556 , benchFold "filterAllOutPure" filterAllOutNested (sourceUnfoldrN value2)
552557 ]
553− , bgroup "transformation"
558+ where
559+ value2 = round (P.fromIntegral value**(1/2::P.Double)) -- double nested loop
560+ value3 = round (P.fromIntegral value**(1/3::P.Double)) -- triple nested loop
561+
562+o_1_space_transformation :: Int -> Benchmark
563+o_1_space_transformation value =
564+ bgroup "transformation"
565+ [ bgroup "X1"
554566 [ benchFold "foldrS" (foldrS 1) (sourceUnfoldrM value)
555567 , benchFold "scan" (scan 1) (sourceUnfoldrM value)
556568 , benchFold "map" (map 1) (sourceUnfoldrM value)
@@ -558,7 +570,7 @@ o_1_space =
558570 , benchFold "mapM" (mapM 1) (sourceUnfoldrM value)
559571 , benchFold "mapMSerial" (mapMSerial 1) (sourceUnfoldrM value)
560572 ]
561− , bgroup "transformationX4"
573+ , bgroup "X4"
562574 [ benchFold "scan" (scan 4) (sourceUnfoldrM value)
563575 , benchFold "map" (map 4) (sourceUnfoldrM value)
564576 , benchFold "fmap" (fmapK 4) (sourceUnfoldrM value)
@@ -567,7 +579,11 @@ o_1_space =
567579 -- XXX this is horribly slow
568580 -- , benchFold "concatMap" (concatMap 4) (sourceUnfoldrMN value16)
569581 ]
570− , bgroup "concat"
582+ ]
583+
584+o_1_space_concat :: Int -> Benchmark
585+o_1_space_concat value =
586+ bgroup "concat"
571587 [ benchIOSrc1 "concatMapPure (n of 1)"
572588 (concatMapPure value 1)
573589 , benchIOSrc1 "concatMapPure (sqrt n of sqrt n)"
@@ -596,7 +612,13 @@ o_1_space =
596612 , benchIOSrc1 "concatMapWith (1 of n)"
597613 (concatStreamsWith 1 value)
598614 ]
599− , bgroup "filtering"
615+ where
616+ value2 = round (P.fromIntegral value**(1/2::P.Double)) -- double nested loop
617+
618+o_1_space_filtering :: Int -> Benchmark
619+o_1_space_filtering value =
620+ bgroup "filtering"
621+ [ bgroup "X1"
600622 [ benchFold "filter-even" (filterEven 1) (sourceUnfoldrM value)
601623 , benchFold "filter-all-out" (filterAllOut maxValue 1) (sourceUnfoldrM value)
602624 , benchFold "filter-all-in" (filterAllIn maxValue 1) (sourceUnfoldrM value)
@@ -607,7 +629,7 @@ o_1_space =
607629 , benchFold "dropWhile-true" (dropWhileTrue maxValue 1) (sourceUnfoldrM value)
608630 , benchFold "dropWhile-false" (dropWhileFalse 1) (sourceUnfoldrM value)
609631 ]
610− , bgroup "filteringX4"
632+ , bgroup "X4"
611633 [ benchFold "filter-even" (filterEven 4) (sourceUnfoldrM value)
612634 , benchFold "filter-all-out" (filterAllOut maxValue 4) (sourceUnfoldrM value)
613635 , benchFold "filter-all-in" (filterAllIn maxValue 4) (sourceUnfoldrM value)
@@ -618,10 +640,22 @@ o_1_space =
618640 , benchFold "dropWhile-true" (dropWhileTrue maxValue 4) (sourceUnfoldrM value)
619641 , benchFold "dropWhile-false" (dropWhileFalse 4) (sourceUnfoldrM value)
620642 ]
621− , bgroup "zipping"
643+ ]
644+ where
645+
646+ maxValue = value
647+
648+
649+o_1_space_zipping :: Int -> Benchmark
650+o_1_space_zipping value =
651+ bgroup "zipping"
622652 [ benchFold "zip" zip (sourceUnfoldrM value)
623653 ]
624− , bgroup "mixed"
654+
655+o_1_space_mixed :: Int -> Benchmark
656+o_1_space_mixed value =
657+ bgroup "mixed"
658+ [ bgroup "X1"
625659 [ benchFold "scan-map" (scanMap 1) (sourceUnfoldrM value)
626660 , benchFold "drop-map" (dropMap 1) (sourceUnfoldrM value)
627661 , benchFold "drop-scan" (dropScan 1) (sourceUnfoldrM value)
@@ -633,7 +667,7 @@ o_1_space =
633667 , benchFold "filter-scan" (filterScan maxValue 1) (sourceUnfoldrM value)
634668 , benchFold "filter-map" (filterMap maxValue 1) (sourceUnfoldrM value)
635669 ]
636− , bgroup "mixedX2"
670+ , bgroup "X2"
637671 [ benchFold "scan-map" (scanMap 2) (sourceUnfoldrM value)
638672 , benchFold "drop-map" (dropMap 2) (sourceUnfoldrM value)
639673 , benchFold "drop-scan" (dropScan 2) (sourceUnfoldrM value)
@@ -645,7 +679,7 @@ o_1_space =
645679 , benchFold "filter-scan" (filterScan maxValue 2) (sourceUnfoldrM value)
646680 , benchFold "filter-map" (filterMap maxValue 2) (sourceUnfoldrM value)
647681 ]
648− , bgroup "mixedX4"
682+ , bgroup "X4"
649683 [ benchFold "scan-map" (scanMap 4) (sourceUnfoldrM value)
650684 , benchFold "drop-map" (dropMap 4) (sourceUnfoldrM value)
651685 , benchFold "drop-scan" (dropScan 4) (sourceUnfoldrM value)
@@ -658,14 +692,44 @@ o_1_space =
658692 , benchFold "filter-map" (filterMap maxValue 4) (sourceUnfoldrM value)
659693 ]
660694 ]
661− ]
662695 where
663696
664− value = 100000
697+ maxValue = value
698+
699+o_1_space_list :: Int -> Benchmark
700+o_1_space_list value =
701+ bgroup "list"
702+ [ bgroup "elimination"
703+ [ benchList "last" (\xs -> [List.last xs]) (sourceUnfoldrList value)
704+ ]
705+ , bgroup "nested"
706+ [ benchList "toNullAp" toNullApNestedList (sourceUnfoldrList value2)
707+ , benchList "toNull" toNullNestedList (sourceUnfoldrList value2)
708+ , benchList "toNull3" toNullNestedList3 (sourceUnfoldrList value3)
709+ , benchList "filterAllIn" filterAllInNestedList (sourceUnfoldrList value2)
710+ , benchList "filterAllOut" filterAllOutNestedList (sourceUnfoldrList value2)
711+ ]
712+ ]
713+ where
714+
665715 value2 = round (P.fromIntegral value**(1/2::P.Double)) -- double nested loop
666716 value3 = round (P.fromIntegral value**(1/3::P.Double)) -- triple nested loop
667− maxValue = value
668717
718+o_1_space :: Benchmark
719+o_1_space =
720+ bgroup (o_1_space_prefix moduleName)
721+ [ o_1_space_generation value
722+ , o_1_space_elimination value
723+ , o_1_space_nested value
724+ , o_1_space_transformation value
725+ , o_1_space_concat value
726+ , o_1_space_filtering value
727+ , o_1_space_zipping value
728+ , o_1_space_mixed value
729+ , o_1_space_list value
730+ ]
731+ where
732+ value = 100000
669733
670734o_n_heap :: [Benchmark]
671735o_n_heap =
@@ -738,31 +802,9 @@ o_n_space =
738802benchList :: P.String -> ([Int] -> [Int]) -> (Int -> [Int]) -> Benchmark
739803benchList name run f = bench name $ nfIO $ randomRIO (1,1) >>= return . run . f
740804
741−o_1_space_list :: [Benchmark]
742−o_1_space_list =
743− [ bgroup "list"
744− [ bgroup "elimination"
745− [ benchList "last" (\xs -> [List.last xs]) (sourceUnfoldrList value)
746− ]
747− , bgroup "nested"
748− [ benchList "toNullAp" toNullApNestedList (sourceUnfoldrList value2)
749− , benchList "toNull" toNullNestedList (sourceUnfoldrList value2)
750− , benchList "toNull3" toNullNestedList3 (sourceUnfoldrList value3)
751− , benchList "filterAllIn" filterAllInNestedList (sourceUnfoldrList value2)
752− , benchList "filterAllOut" filterAllOutNestedList (sourceUnfoldrList value2)
753− ]
754− ]
755− ]
756− where
757−
758− value = 100000
759− value2 = round (P.fromIntegral value**(1/2::P.Double)) -- double nested loop
760− value3 = round (P.fromIntegral value**(1/3::P.Double)) -- triple nested loop
761−
762805main :: IO ()
763806main = defaultMain $ concat
764− [ o_1_space
765− , [bgroup (o_1_space_prefix moduleName) o_1_space_list]
807+ [ [ o_1_space ]
766808 , o_n_stack
767809 , o_n_heap
768810 , o_n_space