ich QuickCheck
bin mit dem folgenden Programm zu testen:Warum gibt QuickCheck auf?
{-# LANGUAGE TemplateHaskell #-}
import Test.QuickCheck
import Test.QuickCheck.All
elementAt :: (Integral b) => [a] -> b -> a
elementAt [x] _ = x
elementAt (x:xs) 1 = x
elementAt (x:xs) b = elementAt xs (b - 1)
prop_elementAt xs b = length xs > 0 && b >= 0 && b < length xs ==> elementAt xs (b + 1) == xs !! b
main = $(quickCheckAll)
Obwohl die Antwort variiert, erhalte ich ständig die Nachricht
*** Gave up! Passed only x tests.
Ist das etwas, ich besorgt sein sollte? Oder bestimmt die Art der Testeingabe, wie lange QuickCheck laufen soll?
hatten das gleiche Problem mit der gleichen [99 Frage Haskell Probleme] (http://www.haskell.org/haskellwiki/99_questions/1_to_10) und es scheint gut zu funktionieren. Aber das Ausführen von 'verboseCheck prop_elementAt' für mich gibt endlose Listen zurück, die nur aus dem Element'() 'bestehen, was bedeutet, dass eine Implementierung von 'elementAt (x: xs) _ = x' noch besteht. Irgendeine Idee, wie man eine Liste mit tatsächlichen Elementen darin erzeugt? – ThomasH
Das ist, weil es die falsche Art von prop_elemAt leitet. Geben Sie einen expliziten Typ ein (Beispiel: prop_elementAt :: Foo [Int] Int -> Bool). – Satvik
Das hat es gelöst, danke! – ThomasH