Tôi đã viết một thuật toán để tìm giải pháp cho vấn đề tổng hợp tập hợp con trong Haskell. Chữ ký làKiểm soát cách dữ liệu thử nghiệm được tạo trong QuickCheck
subsetSum :: (Ord a, Num a) => [a] -> a -> Maybe [a]
QuickCheck có vẻ phù hợp để kiểm tra điều đó. Ví dụ tôi đây là một trong những tài sản mà tôi có thể kiểm tra:
prop_sumEqualsS l s = case subsetSum l s of
Just solution -> (sum solution) == s
Nothing -> True
Vấn đề là các thuật toán khá tính toán chuyên sâu và chạy 100 xét nghiệm với danh sách đầu vào lớn mất lứa tuổi để chạy.
Tôi đã thử với QuickCheck 1 và nó đã chạy nhanh, nhưng tập dữ liệu được sử dụng để thử nghiệm rất nhỏ. Sau khi chuyển sang QuickCheck 2, nó có vẻ là vấn đề ngược lại. Có a manual đối với QC nhưng có vẻ như cũ (không có thông tin ngày) và tôi không biết số tiền vẫn còn áp dụng cho QC2. A Tutorial có sẵn trên Wiki Haskell nhưng không có nhiều chi tiết, chỉ một vài từ trên instantiating Arbitrary
.
Vì vậy, tôi có hai câu hỏi:
- gì thay đổi trong QuickCheck 2 làm cho nó trở nên chậm hơn nhiều so với QuickCheck?
- Cách tốt nhất để kiểm soát việc tạo tập dữ liệu để làm cho chúng hữu ích cho thử nghiệm nhất định là gì?
Edit: Để cụ thể hơn, tôi muốn thử nghiệm giải pháp của tôi với một kích thước danh sách 0-100, có chứa các số nguyên giữa -10.000 và 10000.
câu hỏi của bạn có vẻ một chút mơ hồ cho bối cảnh QuickCheck; có lẽ bạn nên hỏi một câu hỏi kiểm tra tổng quát hơn. Có một vài vấn đề với cách tiếp cận hiện tại của bạn mặc dù: nó sẽ không kiểm tra xem giải pháp có thực sự là một tập hợp con hay là nếu hàm trả về Không có gì thì thực tế không có giải pháp. – gatoatigrado
@gatoatigrado Tài sản chỉ là một ví dụ. Tôi tin rằng việc kiểm tra xem giải pháp là một tập hợp con thuộc về một thuộc tính khác. Liệu tôi có sai? Tôi không thấy một cách dễ dàng để kiểm tra rằng khi không có gì được trả về, thực tế không có giải pháp, ngoại trừ việc giải quyết vấn đề một lần nữa bằng một thuật toán khác. Điều này có vẻ hơi dư thừa. – Antoine
http://stackoverflow.com/questions/10712373/cookbook-for-converting-from-quickcheck1-to-quickcheck2 – gliptak