اجعل Test.QuickCheck.Batch يستخدم النوع الافتراضي لاختبار وظائف القائمة

StackOverflow https://stackoverflow.com/questions/64197

سؤال

أقوم باختبار وظيفة تسمى الاستخراجات والتي تعمل على أي قائمة.

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،...)

بند...

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top