
module Test where

import Bio.Util.TestBase
import Test.QuickCheck
import Bio.Sequence

import BloomFilter

tests :: [Test]
tests = [ T "self-matches" prop_matches
        , T "matches, other" prop_match_other
        , T "match rev query" prop_match_rev1
        -- , T "match rev target" prop_match_rev2
        , T "match multi" prop_match_multi
        ]

test = mapM_ test1 tests
    where test1 (T str t) = do
            putStr ("Running test: "++str++"...")
            quickCheck t

prop_matches (E s) = matchcount (mkBloomFilter [s]) s == max 0 (fromIntegral (seqlength s)+1-k)
prop_match_other (E s) (E t) = matchcount (mkBloomFilter [s]) t <= max 0 (fromIntegral (seqlength t)+1-k)

prop_match_rev1 (E s) (E t) = matchcount (mkBloomFilter [s]) t == matchcount (mkBloomFilter [s]) (revcompl t)
-- False positives cause this to fail, I think
prop_match_rev2 (E s) (E t) = matchcount (mkBloomFilter [s]) t == matchcount (mkBloomFilter [revcompl s]) t

prop_match_multi (E s) (E t) = let f = matchcount (mkBloomFilter [s,t]) 
                               in f s == max 0 (fromIntegral (seqlength s)+1-k)
