اجعل Test.QuickCheck.Batch يستخدم النوع الافتراضي لاختبار وظائف القائمة
-
09-06-2019 - |
سؤال
أقوم باختبار وظيفة تسمى الاستخراجات والتي تعمل على أي قائمة.
extractions :: [a] -> [(a,[a])]
extractions [] = []
extractions l = extract l []
where extract [] _ = []
extract (x:xs) prev = (x, prev++xs) : extract xs (x : prev)
أريد اختباره، على سبيل المثال، مع
import Test.QuickCheck.Batch
prop_len l = length l == length (extractions l)
main = runTests "extractions" defOpt [run prop_len]
ولكن هذا لن يتم تجميعه؛لا بد لي من توفير نوع إما ل run
أو prop_len
, ، لأن QuickCheck لا يمكنه الإنشاء [a]
, يجب أن تولد شيئًا ملموسًا.لذلك اخترت Int
:
main = runTests "extractions" defOpt [r prop_len]
where r = run :: ([Int] -> Bool) -> TestOptions -> IO TestResult
هل هناك أي طريقة للحصول على QuickCheck للاختيار a
بالنسبة لي بدلاً من تحديده في نوع run
?
المحلول
ال دليل الفحص السريع يقول لا":
يجب أن تحتوي الخصائص على أنواع أحادية الشكل.يجب أن تقتصر الخصائص "متعددة الأشكال"، مثل تلك المذكورة أعلاه، على نوع معين لاستخدامها في الاختبار.من الملائم القيام بذلك عن طريق ذكر أنواع وسيطة واحدة أو أكثر في ملف
حيث الأنواع = (x1 ::t1، x2 ::ر2،...)
بند...
لا تنتمي إلى StackOverflow