base16

Pure Haskell base16 encoding/decoding (docs.ppad.tech/base16).
git clone git://git.ppad.tech/base16.git
Log | Files | Refs | README | LICENSE

Main.hs (2363B)


      1 {-# OPTIONS_GHC -fno-warn-unused-imports #-}
      2 {-# LANGUAGE BangPatterns #-}
      3 {-# LANGUAGE OverloadedStrings #-}
      4 {-# LANGUAGE PackageImports #-}
      5 
      6 module Main where
      7 
      8 import Criterion.Main
      9 import qualified Data.ByteString as BS
     10 import qualified "ppad-base16" Data.ByteString.Base16 as B16
     11 import qualified "base16-bytestring" Data.ByteString.Base16 as R0
     12 import qualified "base16" Data.ByteString.Base16 as R1
     13 
     14 main :: IO ()
     15 main = defaultMain [
     16     minimal_encode
     17   , minimal_decode
     18   ]
     19 
     20 minimal_encode :: Benchmark
     21 minimal_encode =
     22   let !a = BS.replicate 1024 0x00
     23   in  bench "ppad-base16/encode" $
     24         nf B16.encode a
     25 
     26 minimal_decode :: Benchmark
     27 minimal_decode =
     28   let !a = B16.encode (BS.replicate 512 0x00)
     29   in  bench "ppad-base16/decode" $
     30         nf B16.decode a
     31 
     32 encode :: Benchmark
     33 encode = bgroup "encode" [
     34     bench "ppad-base16" $ nf B16.encode (BS.replicate 1024 0x00)
     35   , bench "base16-bytestring" $ nf R0.encode (BS.replicate 1024 0x00)
     36   , bench "base16" $ nf R1.encodeBase16' (BS.replicate 1024 0x00)
     37   ]
     38 
     39 decode :: Benchmark
     40 decode = bgroup "decode" [
     41     bench "ppad-base16" $ nf B16.decode
     42       (B16.encode (BS.replicate 512 0x00))
     43   , bench "base16-bytestring" $ nf R0.decode
     44       (B16.encode (BS.replicate 512 0x00))
     45   , bench "base16" $ nf R1.decodeBase16Untyped
     46       (B16.encode (BS.replicate 512 0x00))
     47   ]
     48 
     49 decode_various :: Benchmark
     50 decode_various = bgroup "base16" [
     51     bench "1024B input" $ nf B16.decode (B16.encode (BS.replicate 512 0x00))
     52   , bench "1026B input" $ nf B16.decode (B16.encode (BS.replicate 513 0x00))
     53   , bench "1028B input" $ nf B16.decode (B16.encode (BS.replicate 514 0x00))
     54   , bench "1030B input" $ nf B16.decode (B16.encode (BS.replicate 515 0x00))
     55   , bench "1032B input" $ nf B16.decode (B16.encode (BS.replicate 516 0x00))
     56   , bench "1034B input" $ nf B16.decode (B16.encode (BS.replicate 517 0x00))
     57   , bench "1036B input" $ nf B16.decode (B16.encode (BS.replicate 518 0x00))
     58   , bench "1038B input" $ nf B16.decode (B16.encode (BS.replicate 519 0x00))
     59   , bench "1040B input" $ nf B16.decode (B16.encode (BS.replicate 520 0x00))
     60   ]
     61 
     62 encode_various :: Benchmark
     63 encode_various = bgroup "base16" [
     64     bench "1024B input" $ nf B16.encode (BS.replicate 1024 0x00)
     65   , bench "1023B input" $ nf B16.encode (BS.replicate 1023 0x00)
     66   , bench "1022B input" $ nf B16.encode (BS.replicate 1022 0x00)
     67   ]