{-| Module : Crypto.Lol.Utils.Benchmarks Description : Infrastructure for benchmarking Lol. Copyright : (c) Eric Crockett, 2011-2017 Chris Peikert, 2011-2017 License : GPL-3 Maintainer : ecrockett0@email.com Stability : experimental Portability : POSIX Infrastructure for benchmarking Lol. -} {-# LANGUAGE DataKinds #-} {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE GADTs #-} {-# LANGUAGE MultiParamTypeClasses #-} {-# LANGUAGE PolyKinds #-} {-# LANGUAGE RankNTypes #-} {-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE TypeFamilies #-} module Crypto.Lol.Utils.Benchmarks (mkBench, mkBenchIO -- Re-exports ,C.bgroup, C.Benchmark) where import Control.DeepSeq import qualified Criterion as C -- | Make a `Benchmark` from a function and its input mkBench :: NFData b => String -> (a -> b) -> a -> C.Benchmark mkBench name f input = C.bench name $ C.nf f input -- | Make a `Benchmark` from an IO function and its input mkBenchIO :: NFData b => String -> IO b -> C.Benchmark mkBenchIO name i = C.bench name $ C.nfIO i