packages feed

streaming-benchmarks-0.4.1: streaming-benchmarks.cabal

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