packages feed

express-0.1.0: test/utils.hs

-- Copyright (c) 2017-2018 Rudy Matela.  -- Distributed under the 3-Clause BSD licence (see the file LICENSE).
import Test

import Data.Express.Utils.List
import Data.Express.Utils.String
import Data.Express.Utils.Typeable

main :: IO ()
main = mainTest tests 5040

tests :: Int -> [Bool]
tests n =
  [ True

  , holds n $ \xs -> nubSort xs == nub (sort xs :: [Int])
  , holds n $ \xs -> nubSort xs == sort (nub xs :: [Int])

  , holds n $ isSubsetOf ==== (\xs ys -> all (`elem` ys) (xs :: [Int]))

  , elementTy (typeOf [True]) == boolTy
  , elementTy (elementTy (typeOf [[False]])) == boolTy
  , show (mkComparisonTy boolTy) == "Bool -> Bool -> Bool"
  , show (mkComparisonTy intTy)  == "Int -> Int -> Bool"
  , show (mkCompareTy boolTy) == "Bool -> Bool -> Ordering"
  , show (mkCompareTy intTy)  == "Int -> Int -> Ordering"

  , primeCycle [] == []
  , ["x", "y", "z", "x'", "y'", "z'", "x''"] `isPrefixOf` primeCycle ["x","y","z"]
  , ["x","x'","x''","x'''","x''''","x'''''"] `isPrefixOf` primeCycle ["x"]
  , ["i", "j", "k", "i'", "j'", "k'", "i''"] `isPrefixOf` primeCycle ["i","j","k"]
  , ["xy", "zw", "xy'", "zw'", "xy''"]       `isPrefixOf` primeCycle ["xy","zw"]

  , ["x","y","z","x'","y'"]    `isPrefixOf` variableNamesFromTemplate "x"
  , ["xs","ys","zs","xs'"]     `isPrefixOf` variableNamesFromTemplate "xs"
  , ["xss","yss","zss","xss'"] `isPrefixOf` variableNamesFromTemplate "xss"
  , ["c","d","e","c'","d'"]    `isPrefixOf` variableNamesFromTemplate "c"
  , ["s","t","u","s'","t'"]    `isPrefixOf` variableNamesFromTemplate "s"
  , ["0","1","2","3","4"]      `isPrefixOf` variableNamesFromTemplate "0"
  , ["1","2","3","4","5"]      `isPrefixOf` variableNamesFromTemplate "1"
  , ["z","z1","z2","z3","z4"]  `isPrefixOf` variableNamesFromTemplate "z"
  , ["y","y1","y2","y3","y4"]  `isPrefixOf` variableNamesFromTemplate "y"
  , ["x1","x2","x3","x4"]      `isPrefixOf` variableNamesFromTemplate "x1"
  , ["a0","a1","a2","a3"]      `isPrefixOf` variableNamesFromTemplate "a0"
  , ["e1","e2","e3","e4"]      `isPrefixOf` variableNamesFromTemplate "e1"
  , ["xs1","xs2","xs3"]        `isPrefixOf` variableNamesFromTemplate "xs1"
  , ["xy","zw","xy'","zw'"]    `isPrefixOf` variableNamesFromTemplate "xy"
  , ["ab","cd","ab'","cd'"]    `isPrefixOf` variableNamesFromTemplate "ab"
  , ["xys","zws","xys'"]       `isPrefixOf` variableNamesFromTemplate "xys"
  , ["xyz","uvw","xyz'","uvw'"]    `isPrefixOf` variableNamesFromTemplate "xyz"
  , ["thing1", "thing2", "thing3"] `isPrefixOf` variableNamesFromTemplate "thing1"
  , ["thingAndThing", "thingAndThing'", "thingAndThing''", "thingAndThing'''"]
    `isPrefixOf` variableNamesFromTemplate "thingAndThing"
  ]