packages feed

lmdb-simple-0.1.0.0: test/criterion.hs

module Main where

import Criterion.Main
import Database.LMDB.Simple
import Harness

import Control.Monad (forM, forM_)

main :: IO ()
main = do
  (env, db) <- setup
  defaultMain
    [ bench ("insertion of " ++ elements) $ whnfIO (insertion env db)
    , bench ("retrieval of " ++ elements) $   nfIO (retrieval env db)
    ]

n :: Int
n = 10000

elements :: String
elements = show n ++ " elements"

insertion :: Environment ReadWrite -> Database Int String -> IO ()
insertion env db = transaction env $ do
  clear db
  forM_ [1..n] $ \i -> put db i (Just $ show i)

retrieval :: Environment mode -> Database Int String -> IO [Maybe String]
retrieval env db = readOnlyTransaction env $ forM [1..n] $ \i -> get db i