module Main where import Control.Applicative import Data.HashMap.Strict (fromList,union) import Debug.Trace import qualified Data.Aeson as A import qualified Data.Binary as B import qualified Data.Serialize as S import Test.Tasty.QuickCheck import Test.Tasty.TH import NLP.Text.BTI import NLP.Scoring.SimpleUnigram import NLP.Scoring.SimpleUnigram.Default -- | Test aeson conversion. We add random @(key,value)@ pairs in the form -- of @xs@ to the default scoring. We also randomize the individual scoring -- constants. -- -- Testing is done by serialization followed by deserialization and testing -- for equality. prop_Aeson ( xs :: [((String,String),Double)] , ( (gs :: Double, go :: Double, ge :: Double) , (dm :: Double, di :: Double) , (pso :: Double, pse :: Double) ) ) = Just def' == A.decode (A.encode def') where def = clvDefaults xs' = fromList $ map (\((x,y),s) -> ((btiFromCS x,btiFromCS y),s)) xs def' = def { simpleScore = simpleScore def `union` xs' , gapScore = gs , gapOpen = go , gapExt = ge , defMatch = dm , defMismatch = di , preSufOpen = pso , preSufExt = pse } main :: IO () main = $(defaultMainGenerator)