Source

text / benchmarks / haskell / Multilang.hs

{-# LANGUAGE BangPatterns, OverloadedStrings, RankNTypes #-}

module Main (
  main
  ) where

import Control.Monad (forM_)
import qualified Data.ByteString as B
import qualified Data.Text as Text
import Data.Text.Encoding (decodeUtf8)
import Data.Text (Text)
import System.IO (hFlush, stdout)
import Timer (timer)

type BM = Text -> ()

bm :: forall a. (Text -> a) -> BM
bm f t = f t `seq` ()

benchmarks :: [(String, Text.Text -> ())]
benchmarks = [
    ("find_first", bm $ Text.isInfixOf "en:Benin")
  , ("find_index", bm $ Text.findIndex (=='c'))
  ]

main :: IO ()
main = do
  !contents <- decodeUtf8 `fmap` B.readFile "../tests/text-test-data/yiwiki.xml"
  forM_ benchmarks $ \(name, bmark) -> do
    putStr $ name ++ " "
    hFlush stdout
    putStrLn =<< (timer 100 contents bmark)