packages feed

extrapolate-0.3.0: tests/test-step-by-step.hs

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

main :: IO ()
main = mainTest tests 10000

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

  , tBackground prop
    == [ operatorE (_is -==- _is)
       , operatorE (_is -/=- _is)
       , operatorE (_is -<=- _is)
       , operatorE (_is -<-  _is)
       , lengthE
       , elemE

       , operatorE (_b -==- _b)
       , operatorE (_b -/=- _b)
       , notE

       , operatorE (_i -==- _i)
       , operatorE (_i -/=- _i)
       , operatorE (_i -<-  _i)
       , operatorE (_i -<=- _i) ]

  , concat (take 2 $ atoms prop)
    == [ _b
       , _i
       , _is
       , ll
       , false
       , true
       , zero

       , operatorE (_is -==- _is)
       , operatorE (_is -/=- _is)
       , operatorE (_is -<=- _is)
       , operatorE (_is -<-  _is)
       , lengthE
       , elemE

       , operatorE (_b -==- _b)
       , operatorE (_b -/=- _b)
       , notE

       , operatorE (_i -==- _i)
       , operatorE (_i -/=- _i)
       , operatorE (_i -<-  _i)
       , operatorE (_i -<=- _i)

       , showConstant [0::Int]
       , one
       ]

  , snd thyes
    == [ _b
       , false
       , true
       , not' _b

       , _is  -==- _is
       , _is  -==- ll
       , _is  -/=- _is
       , _is  -/=- ll
       , _is  -<=- _is
       , _is  -<-  _is
       , elem' _i _is
       , elem' zero _is

       , _b   -==- _b
       , _b   -/=- _b

       , _i   -==- _i
       , _i   -==- zero
       , _i   -/=- _i
       , _i   -/=- zero
       , _i   -<-  _i
       , _i   -<-  zero
       , zero -<-  _i
       , _i   -<=- _i
       , _i   -<=- zero
       , zero -<=- _i
       ]

  , candidateConditions thyes prop [xxs]
    == [ true
       , xxs -/=- ll
       , elem' zero xxs
       ]

  , validConditions thyes prop [xxs]
    == [(false, 0)]

  , candidateConditions thyes prop [xx -:- xxs]
    == [ true
       , xxs -/=- ll
       , elem' xx xxs
       , elem' zero xxs
       , xx -/=- zero
       , xx -<- zero
       , zero -<- xx
       , xx -<=- zero
       , zero -<=- xx
       ]

  , validConditions thyes prop [xx -:- xxs]
    =$ map fst
    $= [ (elem' xx xxs, 323) -- TODO: why is this 317 on GHC 8.0?
       , (false, 0)
       ]
  ]

thyes  =  theoryAndReprConds prop
prop   =  prop_nubid `With` MaxConditionSize 3 `With` ConstantBound Nothing

prop_nubid :: [Int] -> Bool
prop_nubid xs  =  nub xs == xs