packages feed

ptr-poker-0.1.1: bench/Main.hs

module Main where

import Prelude
import Gauge.Main
import qualified PtrPoker.Write as Write
import qualified Data.Text.Encoding as Text


main =
  defaultMain [
    bgroup "textUtf8" $ let
      latinSampleBySize size =
        enumFromTo 'a' 'z' &
        replicate size &
        concat &
        fromString
      greekSampleBySize size =
        enumFromTo 'Α' 'Ω' &
        replicate size &
        concat &
        fromString
      !latinSample1 = latinSampleBySize 1
      !latinSample10 = latinSampleBySize 10
      !latinSample100 = latinSampleBySize 100
      !greekSample1 = greekSampleBySize 1
      !greekSample10 = greekSampleBySize 10
      !greekSample100 = greekSampleBySize 100
      in [
        bgroup "ptr-poker" [
          bgroup "latin" [
            bench "1" (nf (Write.writeToByteString . Write.textUtf8) latinSample1),
            bench "10" (nf (Write.writeToByteString . Write.textUtf8) latinSample10),
            bench "100" (nf (Write.writeToByteString . Write.textUtf8) latinSample100)
            ]
          ,
          bgroup "greek" [
            bench "1" (nf (Write.writeToByteString . Write.textUtf8) greekSample1),
            bench "10" (nf (Write.writeToByteString . Write.textUtf8) greekSample10),
            bench "100" (nf (Write.writeToByteString . Write.textUtf8) greekSample100)
            ]
          ]
        ,
        bgroup "text" [
          bgroup "latin" [
            bench "1" (nf Text.encodeUtf8 latinSample1),
            bench "10" (nf Text.encodeUtf8 latinSample10),
            bench "100" (nf Text.encodeUtf8 latinSample100)
            ]
          ,
          bgroup "greek" [
            bench "1" (nf Text.encodeUtf8 greekSample1),
            bench "10" (nf Text.encodeUtf8 greekSample10),
            bench "100" (nf Text.encodeUtf8 greekSample100)
            ]
          ]
        ]
    ]