-- | This module benchmarks all block function and shows the

import Control.Monad

import Prelude
import System.IO
import Text.PrettyPrint

import           Benchmark.Types
import qualified Benchmark.Blake2b.CPortable     as Blake2bCP
import qualified Benchmark.Blake2b.CHandWritten  as Blake2bCHW

import qualified Benchmark.Blake2s.CHandWritten  as Blake2sCHW

import qualified Benchmark.ChaCha20.CPortable    as ChaCha20CP
import qualified Benchmark.ChaCha20.CHandWritten as ChaCha20CHW

import qualified Benchmark.Poly1305.CPortable    as Poly1305CP

import qualified Benchmark.Sha256.CPortable      as Sha256CP
import qualified Benchmark.Sha256.CHandWritten   as Sha256CHW

import qualified Benchmark.Sha512.CPortable      as Sha512CP
import qualified Benchmark.Sha512.CHandWritten   as Sha512CHW

import qualified Benchmark.CSPRG.CPortable       as CSPRGCP


main :: IO ()
main = do
  hSetEncoding stdout utf8
  putStrLn $ render header
  mapM_ printBench [ Blake2bCP.bench
                   , Blake2bCHW.bench

                   , Blake2sCHW.bench

                   , Poly1305CP.bench

                   , CSPRGCP.bench

                   , ChaCha20CP.bench
                   , ChaCha20CHW.bench

                   , Sha256CP.bench
                   , Sha256CHW.bench

                   , Sha512CP.bench
                   , Sha512CHW.bench
                   ]

  where printBench = runRaazBench >=> pure . render >=> putStrLn