하스켈에서 부분 집합 합계 문제에 대한 해결책을 찾기위한 알고리즘을 작성했습니다. 서명은QuickCheck에서 테스트 데이터 생성 방법 제어
subsetSum :: (Ord a, Num a) => [a] -> a -> Maybe [a]
입니다. QuickCheck는이를 테스트하는 데 적합합니다.
prop_sumEqualsS l s = case subsetSum l s of
Just solution -> (sum solution) == s
Nothing -> True
문제는 알고리즘이 매우 연산 집약적 큰 입력 목록과 100 개 테스트를 실행하는 실행 나이를 취한다는 것입니다 예를 들어 여기 내가 확인할 수있는 곳 중 한 곳입니다.
QuickCheck 1을 사용해 보았지만 빠르게 실행되었지만 테스트에 사용 된 데이터 세트는 매우 작았습니다. QuickCheck 2로 이동 한 후 반대 문제가되는 것 같습니다. QC에는 a manual이 있지만 오래되었으므로 (날짜 정보가 없음) QC2에 얼마나 많이 적용되는지 모릅니다. A Tutorial은 하스켈 위키에서 사용 가능하지만 자세한 내용은 많지 않습니다. Arbitrary
을 인스턴스화하는 데 대한 몇 마디. QuickCheck 2에 어떤 변화
- 가 너무 느린 QuickCheck보다가 되십시오 :
그래서 나는이 개 질문이?
- 주어진 테스트에 유용하도록 데이터 세트 생성을 제어하는 가장 좋은 방법은 무엇입니까?
편집 : 내가 QuickCheck 2 것을 도입하는 것이 -10000 10000
귀하의 질문 QuickCheck의 컨텍스트에 대해 조금 모호한 것을; 아마도 일반적인 테스트 질문을하는 것이 좋습니다. 그러나 현재의 접근 방식에는 몇 가지 문제가 있습니다. 솔루션이 실제로 하위 집합인지 또는 함수가 Nothing을 반환하는지 확인하지 않으며 실제로 솔루션이 없음을 확인합니다. – gatoatigrado
@ gatoatigrado 재산은 단지 예일뿐입니다. 솔루션이 하위 집합인지 확인하는 것은 다른 속성에 속한다고 생각합니다. 내가 잘못? Nothing이 반환 될 때 실제로 다른 알고리즘으로 문제를 해결하는 것 외에는 해결책이 없다는 것을 확인하는 쉬운 방법은 없습니다. 이것은 조금 중복 된 것 같습니다. – Antoine
http://stackoverflow.com/questions/10712373/cookbook-for-converting-from-quickcheck1-to-quickcheck2 – gliptak