packages feed

packed-dawg-0.2.0.0: Tests.hs

import qualified Data.DAWG.Packed as D
import Paths_packed_dawg
import Data.List
import Data.Maybe

import Test.Tasty.HUnit
import Test.Tasty.QuickCheck
import Test.Tasty
import Test.QuickCheck

prop_preserve_elems :: Property
prop_preserve_elems = forAll (arbitrary :: Gen [String])
    (\xs -> (sort $ D.toList $ D.fromList xs) == (sort $ nub xs))

prop_elem :: [String] -> Property
prop_elem xs = (not $ null xs) ==> 
    forAll (elements xs) (\x -> D.member x dawg) 
    where dawg = D.fromList xs

prop_discriminate_elems :: [String] -> Property
prop_discriminate_elems xs = (not $ null xs) ==>
    forAll (arbitrary :: Gen String) 
        (\x -> elem x xs == D.member x dawg) 
    where dawg = D.fromList xs

prop_lookupPrefix :: [String] -> Property
prop_lookupPrefix xs = (not $ null xs) ==> 
    forAll (elements xs >>= elements . inits) 
        (\x -> isJust (D.lookupPrefix x dawg))
    where dawg = D.fromList xs

test_twl06 :: FilePath -> Assertion
test_twl06 path = do 
    ws <- fmap lines $ readFile path
    ws @?= (sort $ D.toList $ D.fromList ws)

test_serialization :: FilePath -> Assertion
test_serialization path = do
    dawg <- fmap (D.fromList . lines) $ readFile path
    D.toFile "twl06.dawg" dawg
    dawg' <- D.fromFile "twl06.dawg"
    dawg @?= dawg'


main = do
    dictPath <- getDataFileName "TWL06.txt"
    defaultMain $ testGroup "Tests" [
        testGroup "Properties" [
            testProperty "preserving source elements" prop_preserve_elems,
            testProperty "elem" prop_elem,
            testProperty "discriminate elem" prop_discriminate_elems,
            testProperty "lookupPrefix" prop_lookupPrefix
            ],
        testCase "twl06 DAWG validity" (test_twl06 dictPath),
        testCase "serialization" (test_serialization dictPath)
        ]