module Main where import Test.Framework (Test, defaultMain) import Test.Framework.Providers.QuickCheck2 (testProperty) import Test.QuickCheck ((==>)) import Language.GroteTrap.Range (validRange, includes, unionRange, distRange, size) import Language.GroteTrap.Trees (up, down, left, right) main :: IO () main = defaultMain tests tests :: [Test] tests = [ testProperty "range/propUnionRange" propUnionRange , testProperty "range/propDistRange" propDistRange , testProperty "range/propDistRangeComm" propDistRangeComm , testProperty "trees/propDownUp" propDownUp , testProperty "trees/propUpDown" propUpDown , testProperty "trees/propLeftRight" propLeftRight , testProperty "trees/propRightLeft" propRightLeft ] -- ranges propUnionRange r1 r2 = validRange r1 && validRange r2 ==> u `includes` r1 && u `includes` r2 where u = unionRange r1 r2 propDistRange r1 r2 = validRange r1 && validRange r2 && r1 `includes` r2 ==> distRange r1 r2 <= size r1 propDistRangeComm r1 r2 = distRange r1 r2 == distRange r2 r1 -- tree paths propDownUp path = up (down path) == path propUpDown path = not (null path) ==> init (down (up path)) == init path propLeftRight path = not (null path) && last path > 0 ==> right (left path) == path propRightLeft path = not (null path) && last path >= 0 ==> left (right path) == path