Fare La Prova.QuickCheck.Lotto di utilizzare un tipo di default per il test funzioni di lista
-
09-06-2019 - |
Domanda
Sto testando una funzione chiamata estrazioni che opera su qualsiasi elenco.
extractions :: [a] -> [(a,[a])]
extractions [] = []
extractions l = extract l []
where extract [] _ = []
extract (x:xs) prev = (x, prev++xs) : extract xs (x : prev)
Voglio provarla, per esempio, con
import Test.QuickCheck.Batch
prop_len l = length l == length (extractions l)
main = runTests "extractions" defOpt [run prop_len]
Ma questo non compilare;Ho per la fornitura di un tipo per run
o prop_len
, perché QuickCheck non può generare [a]
, essa ha per generare qualcosa di concreto.Così ho scelto Int
:
main = runTests "extractions" defOpt [r prop_len]
where r = run :: ([Int] -> Bool) -> TestOptions -> IO TestResult
C'è un modo per ottenere QuickCheck di scegliere a
per me invece di averlo specificato nel tipo di run
?
Soluzione
Il quickcheck manuale dice "no":
Proprietà deve avere monomorfa tipi.`Polimorfici proprietà, come quella di cui sopra, deve essere limitata a un particolare tipo usato per il test.È conveniente fare così dichiarando i tipi di uno o più argomenti in un
dove types = (x1 ::t1, x2 ::t2, ...)
clausola...
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow