nom-0.1.0.0: test/Language/Nominal/NomSpec.hs
module Language.Nominal.NomSpec
( spec
) where
import Test.Hspec
import Test.QuickCheck
import Language.Nominal.Properties.SpecUtilities ()
import Language.Nominal.Properties.NomSpec
spec :: Spec
spec = do
it "Nom creates local binding, which is unpacked separately by equality." $ property prop_x_neq_x
it "Check restriction creates local scope. Should return False." $ property prop_split_scope
it "n' # n if n' is chosen fresh, after n" $ property prop_fresh_neq
it "freshName () /= freshName (). Lazy evaluation means distinct fresh names generated." $ property prop_fresh_neq'
it "Same thing using let." $ property prop_fresh_neq''
it "But if we unpack a single fresh name monadically, we can compare it for equality." $ property prop_fresh_eq
it "~ (n # (n,n'))" $ property prop_freshFor1
it "n # n'" $ property prop_freshFor2
it "Nom Maybe -> Maybe Nom -> Nom Maybe = id" $ property prop_transposeNomMaybe
it "Maybe Nom -> Nom Maybe -> Maybe Nom = id" $ property prop_transposeMaybeNom
it "a,b#x |- (a b).x = x" $ property prop_new'
it "a#x |/- (a b).x = x" $ property prop_not_new'
it "a,b#x |- (a b).x = x" $ property prop_new
it "n#l iff n not in l, for n a name and l a list of names" $ property prop_freshFor_notElem
it "atoms-restriction precisely removes atoms from support (atom list)" $ property prop_support_nom_atmlist
it "atoms-restriction precisely removes atoms from support (nom of atom list)" $ property prop_support_nom_nomatmlist
it "if we freshen all atoms in an element, its support is apart from the original (atom list)" $ property prop_freshen_apart_atmlist
it "if we freshen all atoms in an element, its support is apart from the original (nom atom list)" $ property prop_freshen_apart_nom_atmlist
it "a freshened list of atoms is disjoint from its original" $ property prop_freshen_apart_disjoint
it "two notions of trivial Nom binding are equal" $ property prop_isTrivial_equal
it "isTrivial sanity check (supp version)" $ property prop_isTrivial_sane
it "isTrivial sanity check (freshFor version)" $ property prop_isTrivial_sane'
it "Commute Nom and List" $ property prop_transposeNomList
it "Commute Nom and Nom (one way)" $ property prop_transposeNomNom
-- it "Commute List and Nom" $ property prop_transposeListNom
-- it "Commute Nom and Nom (the other way)" $ property prop_transposeNomNom'
-- it "Commute Nom and Nom (two types of atom)" $ property prop_transposeNomNom''