2012-08-13 43 views
6

Tôi đang sử dụng QuickCheck để kiểm tra mã của mình cho một số phép tính số. Về cơ bản tôi có một chức năng chính xác và một số xấp xỉ của nó có hiệu quả hơn nhiều.Kiểm tra nhanh các thử nghiệm không phải là boolean

tôi đang thực hiện các thuộc tính Tôi muốn thử nghiệm một cái gì đó như:

prop_blah input = (abs $ (exact input)-(approx input)) < threshold 

Nhưng nó sẽ thực sự tốt đẹp để biết chính xác cách chính xác từng thuật toán xấp xỉ là gì và so sánh chúng với nhau. Một cách dễ dàng để làm điều này là để có được các báo cáo về độ lệch chuẩn và trung bình của phía bên tay trái của sự bất bình đẳng. Điều này bằng cách nào đó có thể?

+3

Vâng, bạn vẫn có thể sử dụng khung QuickCheck của để tạo đầu vào ngẫu nhiên. Để tính toán số liệu thống kê, bạn có thể thích gói [statistics thống kê] rõ ràng (http://hackage.haskell.org/package/statistics). –

+0

Tôi nghĩ rằng bạn cần một số bằng chứng rằng 'khoảng' sẽ không phải là một yếu tố * x * đi từ câu trả lời chính xác, với kiến ​​thức rằng tài sản quickcheck là tầm thường. Nghĩa là, nó có thể giúp phân tích hàm xấp xỉ của bạn về mặt lý thuyết. – Tarrasch

+1

@Tarrasch Tôi đồng ý rằng bằng chứng như vậy sẽ là tốt đẹp, nhưng tiếc là các thuật toán này thường làm khá tốt, nhưng có hiệu suất trường hợp xấu nhất tồi tệ. Sắp xếp như một heuristic cho NP-hoàn thành vấn đề. –

Trả lời

2

Nếu bạn chỉ cần nó được in ra, bạn nên kiểm tra QuickCheck Callbacks được thực hiện sau một lần kiểm tra. Định nghĩa của chúng nằm ở Test.QuickCheck.Property

Nếu không, bạn có thể sử dụng Function collect :: (Show a, Testable prop) => a -> prop -> Property nằm trong Test.QuickCheck.Property.

let a = (abs $ (exact input)-(approx input)) 
in collect a (a < threshold) 

Bằng cách này, bạn đã ít nhất một chuỗi biểu diễn xấp xỉ và cũng biết được có bao nhiêu thử nghiệm đơn lẻ cho cùng một xấp xỉ.

Bạn thậm chí có thể thoát khỏi chất lượng xấp xỉ và chỉ liệt kê các yếu tố bằng cách thực hiện:

prop = collect (abs $ (exact input)-(approx input)) True 
Các vấn đề liên quan