chatter-0.0.0.2: tests/src/NLP/POSTests.hs
{-# LANGUAGE OverloadedStrings #-}
module NLP.POSTests where
import Test.HUnit ( (@=?), Assertion )
import Test.Framework ( testGroup, Test )
import Test.Framework.Providers.HUnit (testCase)
import Test.QuickCheck.Instances ()
import Test.Framework.Providers.QuickCheck2 (testProperty)
import Data.Map (Map)
import qualified Data.Map as Map
import Data.Text (Text)
import NLP.Types
import NLP.POS
import qualified NLP.POS.LiteralTagger as LT
import TestUtils
tests :: Test
tests = testGroup "NLP.POS"
[ testGroup "Evaluation" $ map (genTestF $ eval mamalTagger)
[ ("Half", [ [ ("the", Tag "DT"), ("cat", Tag "NN")]
, [ ("the", Tag "DT"), ("dog", Tag "NN")] ], 0.5)
, ("All ", [ [ ("dog", Tag "NN"), ("cat", Tag "NN")] ], 1.0)
, ("None", [ [ ("the", Tag "DT"), ("couch", Tag "NN")] ], 0)
]
, testGroup "Serialization"
[ testProperty "1 LiteralTagger" (prop_taggersRoundTrip mamalTagger)
, testProperty "2 LiteralTaggers" (prop_taggersRoundTrip animalTagger)
]
]
animalTagger :: POSTagger
animalTagger = LT.mkTagger (Map.fromList [("owl", Tag "NN"), ("flea", Tag "NN")]) (Just mamalTagger)
mamalTagger :: POSTagger
mamalTagger = LT.mkTagger (Map.fromList [("cat", Tag "NN"), ("dog", Tag "NN")]) Nothing
-- TODO need to make random taggers to really test this...
prop_taggersRoundTrip :: POSTagger -> String -> Bool
prop_taggersRoundTrip tgr input =
let Right roundTripped = deserialize taggerTable $ serialize tgr
in tagStr tgr ("cat owl " ++ input) == tagStr roundTripped ("cat owl " ++ input)