packages feed

symantic-lib-0.0.3.20180213: test/HUnit.hs

{-# LANGUAGE NoMonomorphismRestriction #-}
{-# OPTIONS_GHC -fno-warn-missing-signatures #-}
module HUnit where

import Test.Tasty
import Prelude hiding ((&&), not, (||), id)

import Language.Symantic
import Language.Symantic.Lib

import qualified HUnit.Applicative as Applicative
import qualified HUnit.Bool        as Bool
import qualified HUnit.Foldable    as Foldable
import qualified HUnit.Functor     as Functor
import qualified HUnit.Map         as Map
import qualified HUnit.MonoFunctor as MonoFunctor
import qualified HUnit.Num         as Num
import qualified HUnit.Tuple2      as Tuple2

-- * Tests
hunits :: TestTree
hunits = testGroup "HUnit" $
 [ Applicative.hunits
 , Bool.hunits
 , Foldable.hunits
 , Functor.hunits
 , Map.hunits
 , MonoFunctor.hunits
 , Num.hunits
 , Tuple2.hunits
 ]

-- * EDSL tests
te1 = lam $ \x -> lam $ \y -> (x || y) && not (x && y)
te2 = lam $ \x -> lam $ \y -> (x && not y) || (not x && y)
te3 = let_ (bool True) $ \x -> x && x
te4 = let_ (lam $ \x -> x && x) $ \f -> f `app` bool True
te5 = lam $ \x0 -> lam $ \x1 -> x0 && x1
te6 = let_ (bool True) id && bool False
te7 = lam $ \f -> (f  `app` bool True) && bool True
te8 = lam $ \f -> f `app` (bool True && bool True)