[test symmetry of lgg using quickcheck
Helmut Grohne <grohne@cs.uni-bonn.de>**20150415144415
 Ignore-this: c005da85f8bb93bb4c3998411919dffe
] hunk ./src/Tests.hs 8
+import Data.Function (on)
hunk ./src/Tests.hs 14
-import Control.Monad.Reader (runReader, mapReaderT)
+import Control.Monad.Reader (mapReaderT, runReader, runReaderT)
hunk ./src/Tests.hs 248
+compareEither :: (a -> a -> Bool) -> (b -> b -> Bool) -> Either a b -> Either a b -> Bool
+compareEither _ f (Right x) (Right y) = f x y
+compareEither f _ (Left x)  (Left y)  = f x y
+compareEither _ _ _         _         = False
+
+lggSymmetric :: (AUnify t, Pretty t, Term t) => t -> t -> t -> QC.Property
+lggSymmetric _witness t1 t2 = (compareLgg `on` runContextT . lgg) [t1, t2] [t2, t1]
+    where strAnyEq :: String -> String -> Bool
+          strAnyEq _ _ = True
+          compareLgg = qcCompare (compareEither strAnyEq equal)
+          runContextT = flip runReaderT defaultContext
+
hunk ./src/Tests.hs 263
+    testProperty "Types: lgg [a, b] == lgg [b, a]" (lggSymmetric typeWitness),
+    testProperty "Exprs: lgg [a, b] == lgg [b, a]" (lggSymmetric texpWitness),