cabal-version: 2.2
name: streaming-benchmarks
version: 0.4.1
license: MIT
license-file: LICENSE
author: Composewell Technologies
maintainer: streamly@composewell.com
stability: provisional
homepage: https://streamly.composewell.com
bug-reports: http://github.com/composewell/streaming-benchmarks/issues
copyright: Copyright (c) 2017 Harendra Kumar
category: Streamly, Streaming, Benchmark
synopsis: Measures and compares the performance of streaming libraries
description:
This package provides micro-benchmarks to measure and compare the
performance of various streaming implementations in Haskell.
.
The following packages are supported:
.
* base (Haskell lists)
* streamly
* streaming
* pipes
* machines
* conduit
* drinkery
tested-with:
GHC==8.10.7
, GHC==9.2.8
, GHC==9.4.4
, GHC==9.6.3
, GHC==9.8.4
, GHC==9.10.3
, GHC==9.12.4
, GHC==9.14.1
build-type: Simple
extra-source-files:
Benchmarks/VectorCommon.hs
bench-runner/Main.hs
bench-runner/bench-runner.cabal
bench-runner/cabal.project.user
extra-doc-files:
Changelog.md
README.md
docs/benchmarking-notes.md
source-repository head
type: git
location: https://github.com/composewell/streaming-benchmarks
flag no-fusion-plugin
description: Disable fusion plugin for streamly benchmarks
manual: True
default: False
flag use-gauge
description: Use gauge instead of tasty-bench for benchmarking
manual: True
default: False
flag drinkery
description: Use drinkery
manual: True
default: False
flag conduit
description: Use conduit
manual: True
default: False
flag pipes
description: Use pipes
manual: True
default: False
flag machines
description: Use machines
manual: True
default: False
flag streaming
description: Use streaming
manual: True
default: False
common lib-options
default-language: Haskell2010
ghc-options:
-Wall
-Wcompat
-Wunrecognised-warning-flags
-Widentities
-Wincomplete-record-updates
-Wincomplete-uni-patterns
-Wredundant-constraints
-Wnoncanonical-monad-instances
-Rghc-timing
+RTS -M512M -RTS
-O2
build-depends:
base == 4.*,
deepseq >= 1.4.4 && < 1.6,
mtl >= 2.2.2 && < 2.4,
random >= 1.0 && < 2.0,
transformers >= 0.5.5 && < 0.7,
template-haskell >= 2.14 && < 2.25
if flag(use-gauge)
build-depends: gauge >= 0.2.4 && < 0.3
else
build-depends: tasty-bench >= 0.3 && < 0.6
, tasty >= 1.4.1 && < 1.6
mixins: tasty-bench
(Test.Tasty.Bench as Gauge
, Test.Tasty.Bench as Gauge.Main
)
common bench-options
import: lib-options
ghc-options:
-rtsopts
-with-rtsopts "-T"
build-depends: streaming-benchmarks
common streamly-options
import: bench-options
ghc-options:
-fdicts-strict
-fspec-constr-recursive=16
-fmax-worker-args=16
if !flag(no-fusion-plugin)
ghc-options: -fplugin Fusion.Plugin
build-depends:
streamly-core >= 0.1.0 && < 0.3.1
if !flag(no-fusion-plugin)
build-depends: fusion-plugin >= 0.2 && < 0.3
library
import: lib-options
hs-source-dirs: lib
exposed-modules:
Benchmarks.Common
, Benchmarks.BenchTH
, Benchmarks.BenchmarkTH
, Benchmarks.DefaultMain
-- Streams
benchmark Streamly
import: streamly-options
type: exitcode-stdio-1.0
main-is: Benchmarks/Streamly.hs
ghc-options: -main-is Benchmarks.Streamly
benchmark StreamlyPure
import: streamly-options
type: exitcode-stdio-1.0
main-is: Benchmarks/StreamlyPure.hs
ghc-options: -main-is Benchmarks.StreamlyPure
benchmark List
import: bench-options
type: exitcode-stdio-1.0
main-is: Benchmarks/List.hs
ghc-options: -main-is Benchmarks.List
benchmark DList
import: bench-options
type: exitcode-stdio-1.0
main-is: Benchmarks/DList.hs
ghc-options: -main-is Benchmarks.DList
build-depends: dlist >= 0.7 && < 1.1
benchmark Streaming
import: bench-options
type: exitcode-stdio-1.0
main-is: Benchmarks/Streaming.hs
ghc-options: -main-is Benchmarks.Streaming
if flag(streaming)
build-depends: streaming >= 0.1.4 && < 0.3
else
buildable: False
benchmark Machines
import: bench-options
type: exitcode-stdio-1.0
main-is: Benchmarks/Machines.hs
ghc-options: -main-is Benchmarks.Machines
if flag(machines)
build-depends: machines >= 0.6.0 && < 0.8
else
buildable: False
benchmark Pipes
import: bench-options
type: exitcode-stdio-1.0
main-is: Benchmarks/Pipes.hs
ghc-options: -main-is Benchmarks.Pipes
if flag(pipes)
build-depends: pipes >= 4 && < 4.4
else
buildable: False
benchmark Conduit
import: bench-options
type: exitcode-stdio-1.0
main-is: Benchmarks/Conduit.hs
ghc-options: -main-is Benchmarks.Conduit
if flag(conduit)
build-depends: conduit >= 1.3 && < 1.4
else
buildable: False
benchmark Drinkery
import: bench-options
type: exitcode-stdio-1.0
main-is: Benchmarks/Drinkery.hs
ghc-options: -main-is Benchmarks.Drinkery
if flag(drinkery)
build-depends: drinkery >= 0.3 && < 0.5
else
buildable: False
-- benchmark SimpleConduit
-- import: bench-options
-- type: exitcode-stdio-1.0
-- main-is: Benchmarks/SimpleConduit.hs
-- ghc-options: -main-is Benchmarks.SimpleConduit
-- build-depends: simple-conduit >= 0.6 && < 0.7
-- Arrays
benchmark StreamlyArray
import: streamly-options
type: exitcode-stdio-1.0
main-is: Benchmarks/StreamlyArray.hs
ghc-options:
-main-is Benchmarks.StreamlyArray
+RTS -M1500M -RTS
benchmark Sequence
import: bench-options
type: exitcode-stdio-1.0
main-is: Benchmarks/Sequence.hs
ghc-options: -main-is Benchmarks.Sequence
build-depends: containers >= 0.5 && < 0.9
benchmark ByteString
import: bench-options
type: exitcode-stdio-1.0
main-is: Benchmarks/ByteString.hs
ghc-options: -main-is Benchmarks.ByteString
build-depends: bytestring >= 0.9 && < 0.13
benchmark ByteStringLazy
import: bench-options
type: exitcode-stdio-1.0
main-is: Benchmarks/ByteStringLazy.hs
ghc-options: -main-is Benchmarks.ByteStringLazy
build-depends: bytestring >= 0.9 && < 0.13
benchmark Text
import: bench-options
type: exitcode-stdio-1.0
main-is: Benchmarks/Text.hs
ghc-options: -main-is Benchmarks.Text
build-depends: text >= 1.0 && < 3.0
benchmark VectorStreams
import: bench-options
type: exitcode-stdio-1.0
main-is: Benchmarks/VectorStreams.hs
ghc-options: -main-is Benchmarks.VectorStreams
build-depends: vector >= 0.12 && < 0.14
benchmark Vector
import: bench-options
type: exitcode-stdio-1.0
main-is: Benchmarks/Vector.hs
ghc-options: -main-is Benchmarks.Vector
build-depends: vector >= 0.12 && < 0.14
benchmark VectorUnboxed
import: bench-options
type: exitcode-stdio-1.0
main-is: Benchmarks/VectorUnboxed.hs
ghc-options: -main-is Benchmarks.VectorUnboxed
build-depends: vector >= 0.12 && < 0.14
benchmark VectorStorable
import: bench-options
type: exitcode-stdio-1.0
main-is: Benchmarks/VectorStorable.hs
ghc-options: -main-is Benchmarks.VectorStorable
build-depends: vector >= 0.12 && < 0.14