{-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE TypeApplications #-} module Bench.Crypto.HASH ( benchmarks, ) where import Cardano.Binary import Data.Proxy import Cardano.Crypto.Hash.Blake2b import Cardano.Crypto.Hash.Class import Criterion import Bench.Crypto.BenchData benchmarks :: Benchmark benchmarks :: Benchmark benchmarks = String -> [Benchmark] -> Benchmark bgroup String "HASH" [ Proxy Blake2b_224 -> String -> Benchmark forall (proxy :: * -> *) h. HashAlgorithm h => proxy h -> String -> Benchmark benchHASH (forall t. Proxy t forall {k} (t :: k). Proxy t Proxy @Blake2b_224) String "Blake2b_224" , Proxy Blake2b_256 -> String -> Benchmark forall (proxy :: * -> *) h. HashAlgorithm h => proxy h -> String -> Benchmark benchHASH (forall t. Proxy t forall {k} (t :: k). Proxy t Proxy @Blake2b_256) String "Blake2b_256" ] benchHASH :: forall proxy h. HashAlgorithm h => proxy h -> [Char] -> Benchmark benchHASH :: forall (proxy :: * -> *) h. HashAlgorithm h => proxy h -> String -> Benchmark benchHASH proxy h _ String lbl = String -> [Benchmark] -> Benchmark bgroup String lbl [ String -> Benchmarkable -> Benchmark bench String "hashWith" (Benchmarkable -> Benchmark) -> Benchmarkable -> Benchmark forall a b. (a -> b) -> a -> b $ (ByteString -> Hash h ByteString) -> ByteString -> Benchmarkable forall b a. NFData b => (a -> b) -> a -> Benchmarkable nf (forall h a. HashAlgorithm h => (a -> ByteString) -> a -> Hash h a hashWith @h ByteString -> ByteString forall a. a -> a id) ByteString testBytes , IO ByteString -> (ByteString -> Benchmark) -> Benchmark forall env. NFData env => IO env -> (env -> Benchmark) -> Benchmark env (ByteString -> IO ByteString forall a. a -> IO a forall (m :: * -> *) a. Monad m => a -> m a return (Hash h ByteString -> ByteString forall a. ToCBOR a => a -> ByteString serialize' (forall h a. HashAlgorithm h => (a -> ByteString) -> a -> Hash h a hashWith @h ByteString -> ByteString forall a. a -> a id ByteString testBytes))) ((ByteString -> Benchmark) -> Benchmark) -> (ByteString -> Benchmark) -> Benchmark forall a b. (a -> b) -> a -> b $ String -> Benchmarkable -> Benchmark bench String "decodeHash" (Benchmarkable -> Benchmark) -> (ByteString -> Benchmarkable) -> ByteString -> Benchmark forall b c a. (b -> c) -> (a -> b) -> a -> c . (ByteString -> Hash h ByteString) -> ByteString -> Benchmarkable forall b a. NFData b => (a -> b) -> a -> Benchmarkable nf ((DecoderError -> Hash h ByteString) -> (Hash h ByteString -> Hash h ByteString) -> Either DecoderError (Hash h ByteString) -> Hash h ByteString forall a c b. (a -> c) -> (b -> c) -> Either a b -> c either (String -> Hash h ByteString forall a. HasCallStack => String -> a error (String -> Hash h ByteString) -> (DecoderError -> String) -> DecoderError -> Hash h ByteString forall b c a. (b -> c) -> (a -> b) -> a -> c . DecoderError -> String forall a. Show a => a -> String show) (forall a. a -> a id @(Hash h ByteString)) (Either DecoderError (Hash h ByteString) -> Hash h ByteString) -> (ByteString -> Either DecoderError (Hash h ByteString)) -> ByteString -> Hash h ByteString forall b c a. (b -> c) -> (a -> b) -> a -> c . ByteString -> Either DecoderError (Hash h ByteString) forall a. FromCBOR a => ByteString -> Either DecoderError a decodeFull') ]