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 ]