سؤال

ما هي الاختلافات الرئيسية بين QuickCheck 1 وQuickCheck 2؟من خلال النظر إلى مستندات Haddock، أستطيع أن أرى أنها مقسمة عبر المزيد من الوحدات، coarbitrary تم استبداله بالجديد Fun اكتب و FunArbitrary class (الذي يبدو أسهل في الفهم بالنسبة لي)، ويتم الآن دعم اختبار الكود الأحادي.ماذا يجب أن أكون على علم به؟

هل كانت مفيدة؟

المحلول

لقد رأيت تقدمًا كبيرًا في QuickCheck 2، وأعتقد أنه لا يقل أهمية عن اختبار الكود الأحادي، إن لم يكن أكثر:

class Arbitrary  a where
    arbitrary :: Gen a
    shrink :: a -> [a]

هذا هو حقًا مذهل.تعد طريقة التقليص اختيارية، ولكن إذا كان بإمكانك تقديم قائمة بالتخفيضات "المحتملة الفارغة" من النوع الخاص بك، فعندما يعثر QuickCheck على فحص خاطئ، سيحاول تقليل بياناتك الخاطئة إلى الحد الأدنى عن طريق محاولة تقليصها ثم إعادة -قم بتجريبه.إنه يتقلص طالما فشل.

عينة صغيرة لإقناعك، دون تقليص:

FormulaPrim deparsing    : *** Failed! Falsifiable (after 4 tests):
Poly (Polynome "p" [(CoeffRatio (26 % 25),PolyRest (CoeffRatio (129 % 40))),(CoeffInt 96,PolyRest (CoeffInt 11)),(CoeffInt 29,PolyRest (CoeffRatio (147 % 121))),(CoeffRatio (62 % 9),PolyRest (CoeffRatio (90 % 43))),(CoeffInt 56,PolyRest (CoeffInt 27))])

مع :

FormulaPrim deparsing    : *** Failed! Falsifiable (after 2 tests and 3 shrinks):
Poly (Polynome "t" [(CoeffInt 14,PolyRest (CoeffInt 126))])

مثال الفشل الأقصر يعني تصحيح الأخطاء بشكل أسرع :-)

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