packages feed

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)