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 ]