Sonnex-0.1.0.3: test/test-sonnex.hs
{-# LANGUAGE TemplateHaskell #-}
{-|
Module : TestSonnex
Description : Tests for HaMinitel
Copyright : (c) Frédéric BISSON, 2014
License : GPL-3
Maintainer : zigazou@free.fr
Stability : alpha
Portability : POSIX
Tests for Sonnex
-}
module Main where
import Control.Monad (unless)
import System.Exit (exitFailure)
import Test.QuickCheck
import Test.QuickCheck.All (quickCheckAll)
import Text.Sonnex
allTheSame :: (Eq a) => [a] -> Bool
allTheSame xs = all (== head xs) (tail xs)
homonymsList :: [[String]]
homonymsList =
[ [ "amande", "amende"]
, [ "ancre", "encre" ]
, [ "autel", "hôtel" ]
, [ "balade", "ballade" ]
, [ "basilic", "basilique"]
, [ "boulot", "bouleau" ]
, [ "cane", "canne" ]
, [ "censé", "sensé" ]
, [ "compte", "comte", "conte" ]
, [ "cygne", "signe" ]
, [ "date", "datte" ]
, [ "dessin", "dessein" ]
, [ "différend", "différent"]
, [ "du", "dû" ]
, [ "filtre", "philtre" ]
, [ "flan", "flanc" ]
, [ "foi", "foie", "fois" ]
, [ "gène", "gêne" ]
, [ "golf", "golfe" ]
, [ "héraut", "héro", "héros" ]
, [ "lacer", "lasser" ]
, [ "lire", "lyre" ]
, [ "maire", "mer", "mère" ]
, [ "mal","mâle", "malle" ]
, [ "mite", "mythe" ]
, [ "pain", "pin" ]
, [ "palais", "palet" ]
, [ "a", "à" ]
, [ "au", "aux", "haut" ]
, [ "cerf", "serf", "serre" ]
, [ "choeur", "chœur", "cœur", "coeur" ]
, [ "cahos", "chaos" ]
, [ "ce", "se" ]
, [ "ai", "es", "est", "et" ]
, [ "cric", "crique" ]
, [ "on", "ont" ]
, [ "champ", "chant" ]
, [ "ou", "où" ]
--, [ "c'est", "s'est", "ces", "ses", "sais", "sait" ]
, [ "col", "colle" ]
--, [ "mes", "mais", "m'est", "mets", "met" ]
, [ "colon", "côlon" ]
, [ "son", "sont", "sons" ]
--, [ "court", "cours", "courent", "cour", "courre" ]
, [ "ta", "t'a", "tas" ]
, [ "dans", "d'en", "dent" ]
, [ "ma", "m'a", "m'as", "mas", "mât" ]
, [ "mon", "m'ont", "mont" ]
, [ "la", "l'a", "l'as", "là" ]
, [ "au", "aux", "haut" ]
, [ "leur", "leurs", "l'heure", "leurre" ]
, [ "sa", "ça", "çà" ]
--, [ "les", "l'ai", "l'es", "l'est", "laid", "lait", "laie" ]
, [ "peu", "peut", "peux" ]
, [ "quand", "quant", "qu'en" ]
, [ "ni", "n'y", "nie", "nies", "nid", "nids" ]
, [ "ton", "t'ont", "thon" ]
, [ "sans", "s'en", "sang", "cent" ]
, [ "tant", "temps", "tend", "tends", "t'en" ]
, [ "sois", "soit", "soient", "soie" ]
, [ "quelque", "quelques" ]
, [ "mur", "mûr", "mûre", "mure" ]
, [ "dis", "dit", "dix" ]
--, [ "quel", "quels", "quelle", "quelles", "qu'elle", "qu'elles" ]
, [ "tous", "tout", "toux" ]
, [ "si", "s'y", "scie" ]
]
prop_homonyms = forAll (elements homonymsList) $ \homonyms ->
allTheSame (map sonnex homonyms)
tests :: [(String, String)]
tests =
[ ("sept", "sEt")
, ("septième", "sEtiEm")
, ("huit", "uit")
, ("potion", "posi3")
, ("constitution", "k3stitusi3")
, ("chrétien", "krEti1")
, ("châtier", "CatiE")
, ("tienne", "tiEn")
, ("manger", "m2jE")
, ("siffler", "siflE")
, ("passionnant", "pasion2")
]
prop_tests = forAll (elements tests) $ \(source, result) ->
sonnex source == result
return []
main = do
allPass <- $quickCheckAll
unless allPass exitFailure