HongoDB-0.0.1: Test.hs
{-# Language OverloadedStrings #-}
import Database.HongoDB
import Control.Monad as M
import Control.Monad.Trans
import qualified Data.ByteString.Char8 as C
import Data.Enumerator as E
import Data.Enumerator.List as EL
import System.Directory
import System.Random
main :: IO ()
main = do
testHashMem
testHashFile
benchHashFile
testHashMem :: IO ()
testHashMem = do
runHashMem $ do
set "a" "b"
set "c" "d"
v <- get "a"
liftIO $ print v
e <- enum
let f = do
mkv <- EL.head
case mkv of
Just (k, v) -> liftIO (print (k, v)) >> f
Nothing -> return ()
run_ $ e $$ f
return ()
fname = "tmp.hgdb"
testHashFile :: IO ()
testHashFile = do
e <- doesFileExist fname
when e $ removeFile fname
f <- openHashFile fname
runHashFile f $ do
set "a" "hogehogehogehogehogehogehogeho"
remove "a"
liftIO . print =<< get "a"
set "a" "mogemoge"
liftIO . print =<< get "a"
remove "a"
runHashFile f $ do
liftIO . print =<< count
set "a" "b"
liftIO . print =<< count
set "c" "d"
liftIO . print =<< count
liftIO . print =<< get "a"
liftIO . print =<< get "b"
liftIO . print =<< get "c"
set "a" "x"
liftIO . print =<< count
liftIO . print =<< get "a"
set "a" "xyz"
liftIO . print =<< count
liftIO . print =<< get "a"
liftIO . print =<< get "b"
liftIO . print =<< get "c"
remove "a"
liftIO . print =<< count
liftIO . print =<< get "a"
remove "c"
liftIO . print =<< count
runHashFile f $ do
set "a" "a"
set "b" "b"
set "c" "c"
runHashFile f $ do
e <- enum
let f = do
mkv <- EL.head
case mkv of
Just kv -> liftIO (print ("enum", kv)) >> f
Nothing -> return ()
run_ $ e $$ f
runHashFile f $ do
liftIO . print =<< count
liftIO . print =<< get "c"
clear
liftIO . print =<< count
liftIO . print =<< get "c"
closeHashFile f
return ()
benchHashFile :: IO ()
benchHashFile = do
let iter = 100000
e <- doesFileExist fname
when e $ removeFile fname
f <- openHashFile' (iter*2) fname
{-
runHashFile f $ do
forM_ [1..iter] $ \i -> do
key <- liftIO $ M.replicateM 10 (randomRIO ('a', 'z'))
val <- liftIO $ M.replicateM 10 (randomRIO ('a', 'z'))
-- liftIO $ print (i, key, val)
when (i `mod` 10000 == 0) $ liftIO $ print i
set (C.pack key) (C.pack val)
-}
runHashFile f $ do
forM_ [1..iter] $ \i -> do
kl <- liftIO $ randomRIO (1, 3)
vl <- liftIO $ randomRIO (0, 32)
b <- liftIO $ randomRIO (False, True)
key <- liftIO $ M.replicateM kl (randomRIO ('a', 'z'))
val <- liftIO $ M.replicateM vl (randomRIO ('a', 'z'))
-- liftIO $ print (i, key, val)
when (i `mod` 10000 == 0) $ liftIO $ print i
if b
then set (C.pack key) (C.pack val)
else remove (C.pack key) >> return ()
closeHashFile f