packages feed

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