packages feed

NaturalLanguageAlphabets-0.0.2.0: tests/properties.hs

module Main where

import           Control.Applicative
import           Data.String
import           Data.Stringable hiding (fromString)
import           Debug.Trace
import qualified Data.Aeson as A
import qualified Data.Binary as B
import qualified Data.Serialize as S
import           Test.Framework.Providers.QuickCheck2
import           Test.Framework.TH

import           NLP.Alphabet.IMMC



-- * IMMC

-- basic property of interning

prop_IMMC (t :: String)
  | t == u    = True
  | otherwise = traceShow (t, getIMMC i, u) False
  where i :: IMMC = fromString t
        u         = toString   i

-- binary

prop_Binary (t :: String) = t == toString j
  where i :: IMMC = fromString t
        j :: IMMC = B.decode $ B.encode i

-- cereal

prop_Serialize (t :: String) = Right t == (toString <$> j)
  where i ::               IMMC = fromString t
        j :: Either String IMMC = S.decode $ S.encode i

-- aeson (more complicated to due the json format!

prop_Aeson (t :: String) = Just [t] == (map toString <$> j)
  where i ::       [IMMC] = [fromString t]
        j :: Maybe [IMMC] = A.decode $ A.encode i

main :: IO ()
main = $(defaultMainGenerator)