extrapolate-0.4.4: test/step-by-step.hs
-- Copyright (c) 2017-2019 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
, testableBackground 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 $ testableAtoms prop)
== [ b_
, i_
, is_
, nil
, 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_)
, val [0::Int]
, one
]
, snd thyes
== [ b_
, false
, true
, not' b_
, is_ -==- is_
, is_ -==- nil
, is_ -/=- is_
, is_ -/=- nil
, 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 (testableGrounds prop) thyes (prop' xxs)
== [ true
, xxs -/=- nil
, elem' zero xxs
]
, validConditions thyes (testableGrounds prop) (prop' xxs)
== [false]
, candidateConditions (testableGrounds prop) thyes (prop' $ xx -:- xxs)
== [ true
, xxs -/=- nil
, elem' xx xxs
, elem' zero xxs
, xx -/=- zero
, xx -<=- zero
, zero -<=- xx
, xx -<- zero
, zero -<- xx
]
, validConditions thyes (testableGrounds prop) (prop' $ xx -:- xxs)
== [ elem' xx xxs
, false
]
]
thyes :: (Thy,[Expr])
thyes = theoryAndReprConds (===) (testableMaxConditionSize prop) (testableAtoms prop)
where
e1 === e2 = isTrue grounds $ e1 -==- e2
grounds = testableGrounds prop
(-==-) = testableMkEquation prop
prop' :: Expr -> Expr
prop' e = propE :$ e
propE :: Expr
propE = value "prop" prop_nubid
prop :: (WithOption ([Int] -> Bool))
prop = prop_nubid `With` MaxConditionSize 3
prop_nubid :: [Int] -> Bool
prop_nubid xs = nub xs == xs
elemE, lengthE :: Expr
lengthE = value "length" (length :: [Int] -> Int)
elemE = value "elem" (elem :: Int -> [Int] -> Bool)