packages feed

fast-bech32-1.0.0: bench/Encoding.hs

-- This Source Code Form is subject to the terms of the Mozilla Public
-- License, v. 2.0. If a copy of the MPL was not distributed with this
-- file, You can obtain one at http://mozilla.org/MPL/2.0/.

{-# OPTIONS_GHC -fno-warn-incomplete-uni-patterns #-}

module Main where

import Prelude

import Criterion
    ( bench, bgroup, env, whnf )
import Criterion.Main
    ( defaultMain )
import Data.ByteString.Bech32
    ( HumanReadablePart (..), encodeBech32 )
import Data.ByteString.Random
    ( random )

import qualified Codec.Binary.Bech32 as Bech32

main :: IO ()
main = defaultMain
    [ env cases $ \ ~(_10, _100, _1000) -> do
        bgroup "encode"
            [ bgroup "10"
                [ bench "bech32" $ whnf bech32 _10
                , bench "fast-bech32" $ whnf fastBech32 _10
                ]
            , bgroup "100"
                [ bench "bech32" $ whnf bech32 _100
                , bench "fast-bech32" $ whnf fastBech32 _100
                ]
            , bgroup "1000"
                [ bench "bech32" $ whnf bech32 _1000
                , bench "fast-bech32" $ whnf fastBech32 _1000
                ]
            ]
    ]
  where
    Right hrp = Bech32.humanReadablePartFromText "bench_"
    bech32 = Bech32.encode hrp . Bech32.dataPartFromBytes

    fastBech32 = encodeBech32 hrp'
    hrp' = HumanReadablePart "bench_"

    cases = (,,)
        <$> random 10
        <*> random 100
        <*> random 1000