packages feed

hosc-utils-0.12: benchmarks/benchmark.hs

import Criterion.Main

import qualified Data.ByteString.Lazy as B
import Sound.OpenSoundControl
import Sound.OpenSoundControl.NFData ()
import qualified Sound.OpenSoundControl.Coding.Decode.Binary as Binary
import qualified Sound.OpenSoundControl.Coding.Encode.Builder as Builder
import qualified Sound.OpenSoundControl.Coding.Decode.Base as Decode
import qualified Sound.OpenSoundControl.Coding.Encode.Base as Encode

type EncodingFunc = Bundle -> B.ByteString
type DecodingFunc = B.ByteString -> Packet

main :: IO ()
main =
    defaultMain [
        bgroup "encodeOSC" [
            bench "Encode"  (nf (Encode.encodeBundle :: EncodingFunc) b)
          , bench "Builder" (nf (Builder.encodeBundle :: EncodingFunc) b)
          ]
      , bgroup "decodeOSC" [
            bench "Decode" (nf (Decode.decodePacket :: DecodingFunc) p)
          , bench "Binary" (nf (Binary.decodePacket :: DecodingFunc) p)
          ]
      ]
    where
        m = Message "/fooblah" [Float 42
                               ,Int 16
                               ,String "yeah"
                               ,Blob (B.pack [0..128])]
        b = Bundle (NTPr pi) (replicate 12 m)
        p = Encode.encodeBundle b