packages feed

speculate-0.2.8: tests/test-misc.hs

-- Test library
import Test

-- Functions under test
import Test.Speculate.Misc

-- Utils
import Test.Speculate.Expr
import Test.Speculate.Utils

main :: IO ()
main = mainTest tests 10000

-- NOTE: remember that in the expressions returned by functions<N> the
-- variables are actually values (bound by the arguments of the returned
-- function)

tests :: Int -> [Bool]
tests n =
  [ True
  , fillings (ord' c_) [cc,dd,xx] == [ord' cc, ord' dd]

  , map (show *** ($1))                  (functions1 (i_ -+- i_) :: [(Expr,Int->Int)])
    == [("x + x :: Int", 2)]

  , map (show *** (($1).($2)))           (functions2 (i_ -+- i_) :: [(Expr,Int->Int->Int)])
    == [ ("x + x :: Int", 4)
       , ("x + y :: Int", 3)
       , ("y + x :: Int", 3)
       , ("y + y :: Int", 2) ]

  , map (show *** (($1).($2).($3)))      (functions3 (i_ -+- i_) :: [(Expr,Int->Int->Int->Int)])
    == [ ("x + x :: Int",6)
       , ("x + y :: Int",5)
       , ("y + x :: Int",5)
       , ("x + z :: Int",4)
       , ("y + y :: Int",4)
       , ("z + x :: Int",4)
       , ("y + z :: Int",3)
       , ("z + y :: Int",3)
       , ("z + z :: Int",2) ]

  , map (show *** (($1).($2).($3).($4))) (functions4 (i_ -+- i_) :: [(Expr,Int->Int->Int->Int->Int)])
    == [ ("x + x :: Int",8)
       , ("x + y :: Int",7)
       , ("y + x :: Int",7)
       , ("x + z :: Int",6)
       , ("y + y :: Int",6)
       , ("z + x :: Int",6)
       , ("x + w :: Int",5)
       , ("y + z :: Int",5)
       , ("z + y :: Int",5)
       , ("w + x :: Int",5)
       , ("y + w :: Int",4)
       , ("z + z :: Int",4)
       , ("w + y :: Int",4)
       , ("z + w :: Int",3)
       , ("w + z :: Int",3)
       , ("w + w :: Int",2) ]

  , take 3 (expressionsOf [ zero, xx, absE, plusE ])
    == [ [ zero, xx, absE, plusE ]
       , [ abs' zero, abs' xx, plusE :$ zero, plusE :$ xx ]
       , [ abs' (abs' zero)
         , abs' (abs' xx)
         , plusE :$ abs' zero
         , plusE :$ abs' xx
         , zero -+- zero
         , zero -+- xx
         , xx -+- zero
         , xx -+- xx ] ]

  , take 3 (valuedExpressionsOf [ zero, one, absE, plusE ])
    == [ [ (zero, 0 :: Int)
         , (one,  1) ]
       , [ (abs' zero, 0)
         , (abs' one,  1) ]
       , [ (abs' (abs' zero), 0)
         , (abs' (abs' one),  1)
         , (zero -+- zero, 0)
         , (zero -+- one,  1)
         , (one -+- zero,  1)
         , (one -+- one,   2) ] ]

  , take 3 (mapT (id *** ($ (10::Int))) $ valuedExpressionsOf [ zero, one, absE, plusE ])
    == [ [ (absE, 10 :: Int) ]
       , [ (plusE :$ zero, 10)
         , (plusE :$ one,  11) ]
       , [ (plusE :$ abs' zero, 10)
         , (plusE :$ abs' one,  11) ] ]
  ]