full-text-search-0.2.2.0: tests/Test/Data/SearchEngine/DocIdSet.hs
{-# OPTIONS_GHC -fno-warn-orphans #-}
module Test.Data.SearchEngine.DocIdSet where
import Data.SearchEngine.DocIdSet (DocIdSet(DocIdSet), DocId(DocId))
import qualified Data.SearchEngine.DocIdSet as DocIdSet
import qualified Data.Vector.Unboxed as Vec
import qualified Data.List as List
import Test.QuickCheck
instance Arbitrary DocIdSet where
arbitrary = DocIdSet.fromList `fmap` (listOf arbitrary)
instance Arbitrary DocId where
arbitrary = DocId `fmap` choose (0,15)
prop_insert :: DocIdSet -> DocId -> Bool
prop_insert dset x =
let dset' = DocIdSet.insert x dset
in DocIdSet.invariant dset && DocIdSet.invariant dset'
&& all (`member` dset') (x : DocIdSet.toList dset)
prop_delete :: DocIdSet -> DocId -> Bool
prop_delete dset x =
let dset' = DocIdSet.delete x dset
in DocIdSet.invariant dset && DocIdSet.invariant dset'
&& all (`member` dset') (List.delete x (DocIdSet.toList dset))
&& not (x `member` dset')
prop_delete' :: DocIdSet -> Bool
prop_delete' dset =
all (prop_delete dset) (DocIdSet.toList dset)
prop_union :: DocIdSet -> DocIdSet -> Bool
prop_union dset1 dset2 =
let dset = DocIdSet.union dset1 dset2
dset' = DocIdSet.fromList (List.union (DocIdSet.toList dset1) (DocIdSet.toList dset2))
in DocIdSet.invariant dset && DocIdSet.invariant dset'
&& dset == dset'
prop_union' :: DocIdSet -> DocIdSet -> Bool
prop_union' dset1 dset2 =
let dset = DocIdSet.union dset1 dset2
dset' = List.foldl' (\s i -> DocIdSet.insert i s) dset1 (DocIdSet.toList dset2)
dset'' = List.foldl' (\s i -> DocIdSet.insert i s) dset2 (DocIdSet.toList dset1)
in DocIdSet.invariant dset && DocIdSet.invariant dset' && DocIdSet.invariant dset''
&& dset == dset'
&& dset' == dset''
member :: DocId -> DocIdSet -> Bool
member x (DocIdSet vec) =
x `List.elem` Vec.toList vec