Używam QuickCheck
przetestować następujący program:Dlaczego funkcja QuickCheck rezygnuje?
{-# 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)
Choć odpowiedź jest różna, ja ciągle pojawia się komunikat
*** Gave up! Passed only x tests.
jest to coś powinienem być zaniepokojony? A może charakter wejścia testowego określa, jak długo będzie działać QuickCheck?
miał ten sam problem z tym samym [99 Haskell Problemy pytaniem] (http://www.haskell.org/haskellwiki/99_questions/1_to_10) i wydaje się działać prawidłowo. Ale uruchomienie 'verboseCheck prop_elementAt' dla mnie zwraca nieskończone listy składające się tylko z elementu'() ', co oznacza, że implementacja' elementAt (x: xs) _ = x' nadal przechodzi. Masz pomysł, jak wygenerować listę z rzeczywistymi elementami? – ThomasH
To dlatego, że zawiera błędny typ prop_elemAt. Podaj wyraźny typ (przykład 'prop_elementAt :: Foo [Int] Int -> Bool'). – Satvik
To rozwiązało, dzięki! – ThomasH