ما الجديد في QuickCheck 2؟
-
20-09-2019 - |
سؤال
ما هي الاختلافات الرئيسية بين 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))])
مثال الفشل الأقصر يعني تصحيح الأخطاء بشكل أسرع :-)