packages feed

LambdaDB-0.0.0.6: test/Spec.hs

import Control.Monad

import Test.QuickCheck
import Database.LambdaDB

instance Arbitrary DBData where
  arbitrary = oneof [ liftM DBNone (return None),
                      liftM DBBool arbitrary,
                      liftM DBChar arbitrary,
                      liftM DBString arbitrary,
                      liftM DBInt arbitrary,
                      liftM DBInteger arbitrary,
                      liftM DBList (sized list')]
    where list' n = list'' 5 n
          list'' 0 _ = return []
          list'' _ 0 = return []
          list'' n m = (:) <$> oneof [ liftM DBNone (return None),
                                    liftM DBBool arbitrary,
                                    liftM DBChar arbitrary,
                                    liftM DBString arbitrary,
                                    liftM DBInt arbitrary,
                                    liftM DBInteger arbitrary,
                                    liftM DBList (list'' n (m-1))] <*> list'' (n-1) m

ruleInsertFind :: Key -> [DBData] -> Bool
ruleInsertFind k vs =
  let ruleHelper key [] db = (findData key db) == DBNone None
      ruleHelper key (x:[]) db =
        let dbn = insertData key x db
            xFind = (findData key dbn)
        in xFind == x
      ruleHelper key (x:xs) db =
        let dbn = insertData key x db
            xFind = (findData key dbn)
        in xFind == x && ruleHelper key xs dbn
  in
    ruleHelper k vs initDB

main :: IO ()
main = quickCheck ruleInsertFind