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 ]