packages feed

base58-bytestring-0.1.0: bench/Main.hs

module Main where

import Data.Word
import Criterion.Main
import Data.ByteString ( ByteString )
import Data.ByteString.Base58

import qualified Data.ByteString as BS

symChars :: [Word8]
symChars = cycle
           $ BS.unpack
           $ unAlphabet bitcoinAlphabet

symN :: Int -> ByteString
symN n = BS.pack
         $ take n
         $ symChars

nameVal :: [(String, Int)]
nameVal = [ ("10 bytes", 10)
          , ("42 bytes", 100)
          , ("100 bytes", 1000) ]

main :: IO ()
main = defaultMain
       [ bgroup "encodeBase58I"
         [ bench "approx 10 bytes (1e24)" $  nf (encodeBase58I bitcoinAlphabet) 1000000000000000000000000
         , bench "approx 42 bytes (1e100)" $ nf (encodeBase58I bitcoinAlphabet) 10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
         , bench "approx 100 bytes (1e240)" $ nf (encodeBase58I bitcoinAlphabet) 100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
         ]

       , bgroup "decodeBase58I"
         $ map (\(name, val) -> bench name $ nf (decodeBase58I bitcoinAlphabet) $ symN val) nameVal

       , bgroup "encodeBase58"
         $ map (\(name, val) -> bench name $ nf (encodeBase58 bitcoinAlphabet) $ symN val) nameVal

       , bgroup "decodeBase58"
         $ map (\(name, val) -> bench name $ nf (decodeBase58 bitcoinAlphabet) $ symN val) nameVal
       ]