From c0732ad9cb546d7811f18d8df8fe917d32c9f951 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Gr=C3=B6ber?= Date: Mon, 18 Jul 2016 01:09:32 +0200 Subject: [PATCH] Add a criterion benchmark --- bench/Bench.hs | 29 ++++++++++++++++++++++ bench/data/simple-cabal/Main.hs | 4 +++ bench/data/simple-cabal/Setup.hs | 2 ++ bench/data/simple-cabal/simple-cabal.cabal | 13 ++++++++++ ghc-mod.cabal | 29 ++++++++++++++++++++++ 5 files changed, 77 insertions(+) create mode 100644 bench/Bench.hs create mode 100644 bench/data/simple-cabal/Main.hs create mode 100644 bench/data/simple-cabal/Setup.hs create mode 100644 bench/data/simple-cabal/simple-cabal.cabal diff --git a/bench/Bench.hs b/bench/Bench.hs new file mode 100644 index 0000000..93bf144 --- /dev/null +++ b/bench/Bench.hs @@ -0,0 +1,29 @@ +import Criterion.Main +import Language.Haskell.GhcMod.Target +import TestUtils +import Dir +import System.IO.Temp +import System.Process hiding (env) +import Control.Monad + +main = defaultMain [ + env setup $ \dir -> bgroup "simple-cabal" [ + bench "nop" $ whnfIO (simpleCabalNop dir 1) + , bench "nop10" $ whnfIO (simpleCabalNop dir 10) + ] + ] + +setup = do + tdir <- createTempDirectory "/tmp" "ghc-mod-bench" + system $ "cp -rv \"bench/data/simple-cabal/\" \""++ tdir ++"\"" + + simpleCabalNop tdir 1 -- warmup dist/ + + return tdir + +simpleCabalNop :: FilePath -> Int -> IO () +simpleCabalNop dir n = withDirectory_ (dir "simple-cabal") $ do + _ <- runGhcModT defaultOptions $ + forM_ [1..n] $ \_ -> do + runGmlT [Left "Main.hs"] (return ()) + return () diff --git a/bench/data/simple-cabal/Main.hs b/bench/data/simple-cabal/Main.hs new file mode 100644 index 0000000..65ae4a0 --- /dev/null +++ b/bench/data/simple-cabal/Main.hs @@ -0,0 +1,4 @@ +module Main where + +main :: IO () +main = putStrLn "Hello, Haskell!" diff --git a/bench/data/simple-cabal/Setup.hs b/bench/data/simple-cabal/Setup.hs new file mode 100644 index 0000000..9a994af --- /dev/null +++ b/bench/data/simple-cabal/Setup.hs @@ -0,0 +1,2 @@ +import Distribution.Simple +main = defaultMain diff --git a/bench/data/simple-cabal/simple-cabal.cabal b/bench/data/simple-cabal/simple-cabal.cabal new file mode 100644 index 0000000..c4c0cfb --- /dev/null +++ b/bench/data/simple-cabal/simple-cabal.cabal @@ -0,0 +1,13 @@ +name: simple-cabal +version: 0.1.0.0 +license: BSD3 +license-file: LICENSE +author: Daniel Gröber +maintainer: dxld@darkboxed.org +build-type: Simple +cabal-version: >=1.10 + +executable simple-cabal + main-is: Main.hs + build-depends: base + default-language: Haskell2010 diff --git a/ghc-mod.cabal b/ghc-mod.cabal index e94c413..d882262 100644 --- a/ghc-mod.cabal +++ b/ghc-mod.cabal @@ -94,6 +94,8 @@ Extra-Source-Files: ChangeLog test/data/stack-project/app/*.hs test/data/stack-project/src/*.hs test/data/stack-project/test/*.hs + bench/data/simple-cabal/simple-cabal.cabal + bench/data/simple-cabal/*.hs Custom-Setup Setup-Depends: base @@ -294,6 +296,33 @@ Test-Suite spec Build-Depends: hspec >= 2.0.0 X-Build-Depends-Like: CLibName +Benchmark criterion + Type: exitcode-stdio-1.0 + Default-Language: Haskell2010 + Default-Extensions: ScopedTypeVariables, RecordWildCards, NamedFieldPuns, + ConstraintKinds, FlexibleContexts, + DataKinds, KindSignatures, TypeOperators, ViewPatterns + HS-Source-Dirs: bench, test + Main-Is: Bench.hs + Build-Depends: base + , directory < 1.3 + , filepath < 1.5 + , pretty < 1.2 + , process < 1.5 + , split < 0.3 + , mtl < 2.3 && >= 2.0 + , ghc < 8.1 + + , monad-journal < 0.8 && >= 0.4 + , fclabels == 2.0.* + , temporary < 1.3 + + , hspec >= 2.0.0 + + , criterion + + , ghc-mod + Source-Repository head Type: git Location: https://github.com/DanielG/ghc-mod.git