raaz-0.3.0: benchmarks/internal/Benchmark/CSPRG.hs
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE MonoLocalBinds #-}
module Benchmark.CSPRG where
import Control.Monad
import GHC.TypeLits
import Raaz.Core
import Benchmark.Types
import Buffer
import Implementation
-- | Number of blocks.
nblocks :: BlockCount Prim
nblocks = atLeast nBytes
allocAndRun :: (BufferPtr -> IO ()) -> IO ()
allocAndRun = allocaBuffer (nblocks <> additionalBlocks)
bench :: KnownNat BufferAlignment => RaazBench
bench = (name, toBenchmarkable $ action . fromIntegral)
where action count = allocAndRun $ doit count
doit count ptr = withMemory $ \ mem -> replicateM_ count (randomBlocks ptr nblocks mem)