bitvec-1.1.5.0: bench/Bench/BitIndex.hs
module Bench.BitIndex
( benchBitIndex
) where
import Data.Bit
import qualified Data.Bit.ThreadSafe as TS
import Data.Bits
import qualified Data.Vector.Unboxed as U
import qualified Data.Vector.Unboxed.Mutable as MU
import Test.Tasty.Bench
import Bench.Common
allFalseButLast :: MU.Unbox a => (Bool -> a) -> Int -> U.Vector a
allFalseButLast f k = U.generate n (\i -> f (i == n - 1))
where
n = 1 `shiftL` k
benchBitIndex :: Int -> Benchmark
benchBitIndex k = bgroup (show (1 `shiftL` k :: Int))
[ bench labelBit $ nf (bitIndex (Bit True)) (allFalseButLast Bit k)
, bench labelBitTS $ nf (TS.bitIndex (TS.Bit True)) (allFalseButLast TS.Bit k)
, bench labelVector $ nf (U.elemIndex True) (allFalseButLast id k)
]