-- ill-hit.hs: failing to hit a function completely
--
-- Based on an example sent by Colin Runciman
--
-- Even though sum' is defined for 6 values,
-- Conjure only ever hits 4 of them.
import Conjure
sum' :: [Int] -> Int
sum' [] = 0
sum' [1] = 1
sum' [1,2] = 3
sum' [1,2,3] = 6
sum' [3,4,5] = 12
sum' [1,2,3,4] = 10
sumSpec :: [([Int],Int)]
sumSpec = [ [] -= 0
, [1] -= 1
, [1,2] -= 3
, [1,2,3] -= 6
, [3,4,5] -= 12
, [1,2,3,4] -= 10
]
main :: IO ()
main = do
-- the following does not hit all 6 defined values, only 4
conjure "sum" (sum' :: [Int] -> Int) primitives
-- the following forces 3 argument values, totaling 6
conjureWith as "sum" (sum' :: [Int] -> Int) primitives
-- the following conjures from a spec
conjure1 "sum" sumSpec primitives
as :: Args
as = args
{ forceTests = map (map val)
[ [[1,2]]
, [[3,4,5::Int]]
, [[1,2,3,4]]
]
}
primitives :: [Expr]
primitives =
[ val (0 :: Int)
, val (1 :: Int)
, value "+" ((+) :: Int -> Int -> Int)
, value "*" ((*) :: Int -> Int -> Int)
, value "null" (null :: [Int] -> Bool)
, value "head" (head :: [Int] -> Int)
, value "tail" (tail :: [Int] -> [Int])
]