base64

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

Main.hs (2286B)


      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-base64" Data.ByteString.Base64 as B64
     11 import qualified "base64-bytestring" Data.ByteString.Base64 as R0
     12 import qualified "base64" Data.ByteString.Base64 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-base64/encode" $
     24         nf B64.encode a
     25 
     26 minimal_decode :: Benchmark
     27 minimal_decode =
     28   let !a = B64.encode (BS.replicate 768 0x00)
     29   in  bench "ppad-base64/decode" $
     30         nf B64.decode a
     31 
     32 encode :: Benchmark
     33 encode = bgroup "encode" [
     34     bench "ppad-base64" $ nf B64.encode (BS.replicate 1024 0x00)
     35   , bench "base64-bytestring" $ nf R0.encode (BS.replicate 1024 0x00)
     36   , bench "base64" $ nf R1.encodeBase64' (BS.replicate 1024 0x00)
     37   ]
     38 
     39 decode :: Benchmark
     40 decode = bgroup "decode" [
     41     bench "ppad-base64" $ nf B64.decode
     42       (B64.encode (BS.replicate 768 0x00))
     43   , bench "base64-bytestring" $ nf R0.decode
     44       (B64.encode (BS.replicate 768 0x00))
     45   , bench "base64" $ nf R1.decodeBase64Untyped
     46       (B64.encode (BS.replicate 768 0x00))
     47   ]
     48 
     49 decode_various :: Benchmark
     50 decode_various = bgroup "base64" [
     51     bench "1024B input" $ nf B64.decode (B64.encode (BS.replicate 768 0x00))
     52   , bench "1028B input" $ nf B64.decode (B64.encode (BS.replicate 771 0x00))
     53   , bench "1032B input" $ nf B64.decode (B64.encode (BS.replicate 774 0x00))
     54   , bench "1036B input" $ nf B64.decode (B64.encode (BS.replicate 777 0x00))
     55   , bench "1040B input" $ nf B64.decode (B64.encode (BS.replicate 780 0x00))
     56   , bench "1044B input" $ nf B64.decode (B64.encode (BS.replicate 783 0x00))
     57   , bench "1048B input" $ nf B64.decode (B64.encode (BS.replicate 786 0x00))
     58   , bench "1052B input" $ nf B64.decode (B64.encode (BS.replicate 789 0x00))
     59   ]
     60 
     61 encode_various :: Benchmark
     62 encode_various = bgroup "base64" [
     63     bench "1024B input" $ nf B64.encode (BS.replicate 1024 0x00)
     64   , bench "1023B input" $ nf B64.encode (BS.replicate 1023 0x00)
     65   , bench "1022B input" $ nf B64.encode (BS.replicate 1022 0x00)
     66   ]