packages feed

monarch-0.9.0.0: test/benchmark.hs

{-# LANGUAGE OverloadedStrings #-}
import Criterion.Main
import qualified Database.Monarch as Monarch
import qualified Database.TokyoTyrant.FFI as FFI
import Data.ByteString.Char8 ()

main :: IO ()
main = defaultMain
       [ bgroup "TokyoTyrant (multiple put)"
         [ bench "monarch" $ nfIO mmonarch
         , bench "tokyotyrant-haskell" $ nfIO mffi
         ]
       , bgroup "TokyoTyrant (put)"
         [ bench "monarch" $ nfIO monarch
         , bench "tokyotyrant-haskell" $ nfIO ffi
         ]
       ]

size :: Int
size = 10000

ffi :: IO ()
ffi = do
  Right conn <- FFI.open "127.0.0.1" 1978
  FFI.put conn "foo" "bar"
  FFI.close conn

mffi :: IO ()
mffi = do
  Right conn <- FFI.open "127.0.0.1" 1978
  FFI.mput conn $ replicate size ("foo", "bar")
  FFI.close conn

monarch :: IO ()
monarch = do
  Right () <- Monarch.withMonarchConn "127.0.0.1" 1978 $
              Monarch.runMonarchConn $
              Monarch.put "foo" "bar"
  return ()

mmonarch :: IO ()
mmonarch = do
  Right () <- Monarch.withMonarchConn "127.0.0.1" 1978 $ Monarch.runMonarchConn $
         Monarch.multiplePut $ replicate size ("foo", "bar")
  return ()