module Main where import Test.HUnit import Control.Monad import Database.TokyoCabinet.Map new_delete_test = do m <- new delete m m' <- new2 10 delete m' dup_test = do m1 <- new put m1 "foo" "bar" m2 <- dup m1 get m2 "foo" >>= (Just "bar" @=?) putxx_test = do m <- new put m "foo" "bar" get m "foo" >>= (Just "bar" @=?) putkeep m "foo" "baz" get m "foo" >>= (Just "bar" @=?) putcat m "foo" "baz" get m "foo" >>= (Just "barbaz" @=?) get m "hoge" >>= (Nothing @=?) out_test = do m <- new put m "foo" "bar" get m "foo" >>= (Just "bar" @=?) out m "foo" get m "foo" >>= (Nothing @=?) move_test = do m <- new put m "foo" "100" put m "bar" "200" put m "baz" "300" keys m >>= ("foo" @=?) . head move m "bar" True keys m >>= ("bar" @=?) . head move m "foo" False keys m >>= ("foo" @=?) . last iter_test = do m <- new zipWithM_ (put m) ["foo", "bar", "baz"] ([1..] :: [Int]) iterinit m iternext m >>= (Just "foo" @=?) iternext m >>= (Just "bar" @=?) iternext m >>= (Just "baz" @=?) util_test = do m <- new zipWithM_ (put m) ["foo", "bar", "baz"] ([1..] :: [Int]) rnum m >>= (3 @=?) siz <- msiz m (siz > 0) @? "msiz returns positive int value" m' <- new rnum m' >>= (0 @=?) keys_vals_test = do m <- new zipWithM_ (put m) ["foo", "bar", "baz"] ([1..] :: [Int]) keys m >>= (["foo", "bar", "baz"] @=?) vals m >>= ([1..3] @=?) m' <- new :: IO (Map String String) keys m' >>= ([] @=?) vals m' >>= ([] @=?) add_test = do mi <- new put mi "foo" (1 :: Int) addint mi "foo" 23 >>= (Just 24 @=?) addint mi "bar" 23 >>= (Just 23 @=?) md <- new put md "foo" (1 :: Double) adddouble md "foo" 2.0 >>= (Just 3.0 @=?) adddouble md "bar" 2.0 >>= (Just 2.0 @=?) clear_test = do m <- new zipWithM_ (put m) ["foo", "bar", "baz"] ([1..] :: [Int]) rnum m >>= (3 @=?) get m "foo" >>= (Just 1 @=?) clear m rnum m >>= (0 @=?) get m "foo" >>= (Nothing @=?) cutfront_test = do m <- new zipWithM_ (put m) ["foo", "bar", "baz"] ([1..] :: [Int]) keys m >>= ("foo" @=?) . head cutfront m 2 keys m >>= ("baz" @=?) . head m' <- new :: IO (Map Int Int) cutfront m' 10 keys m' >>= ([] @=?) dump_load_test = do m <- new zipWithM_ (put m) ["foo", "bar", "baz"] ([1..] :: [Int]) bytes <- dump m m' <- load bytes liftM2 (==) (keys m) (keys m') @? "original and dumped have the same keys" liftM2 (==) (vals m) (vals m') @? "original and dumped have the same vals" delete m tests = test [ "new delete test" ~: new_delete_test , "dup test" ~: dup_test , "putxx test" ~: putxx_test , "out test" ~: out_test , "move test" ~: move_test , "iter test" ~: iter_test , "util test" ~: util_test , "keys vals test" ~: keys_vals_test , "add test" ~: add_test , "clear test" ~: clear_test , "cutfront test" ~: cutfront_test , "dump load test" ~: dump_load_test ] main = runTestTT tests