البرمجة

توليف تعريفات Arbitrary بشكل تلقائي في Haskell

في هذا السياق، يمكنك استخدام ميزة تفسير غير عادية للحصول على تكرار أقل في تعريفات Arbitrary. يمكنك الاستفادة من المشتقات العميقة لـ Generic لتوليد تعريفات Arbitrary بشكل تلقائي لكل حالة من حالات بياناتك الجبرية. يمكنك تحقيق هذا باستخدام الوحدة النمطية generic-arbitrary المتاحة على Hackage. هذا يتطلب تعريفات DeriveGeneric لبنية البيانات والمستوردة المذكورة.

أولاً، يمكنك تحقيق الكود المطلوب عن طريق تثبيت الحزمة المذكورة أعلاه، والتي توفر وظائف للعمل مع Generic:

haskell
{-# LANGUAGE DeriveGeneric #-} import GHC.Generics import Test.QuickCheck import Test.QuickCheck.Arbitrary.Generic data ProtocolPacket = Packet1 Word8 Text Int8 | Packet2 Text | Packet3 Int Text Text Text Text | Packet4 Int Double Double Double Int16 Int16 Int16 ... deriving (Show, Eq, Generic) instance Arbitrary ProtocolPacket where arbitrary = genericArbitrary

مع تعريف genericArbitrary، سيتم توليد تعريفات Arbitrary تلقائياً لـ ProtocolPacket وجميع النوع البيانية الفرعية التي يتم تحديدها بواسطتها.

بعد ذلك، يمكنك استخدام هذه الحزمة في تعريف Arbitrary لـ ProtocolPacket بسهولة، وسيتم توليد بيانات الاختبار التلقائي بشكل آمن.

المزيد من المعلومات

بالتأكيد! يعتمد استخدام generic-arbitrary على تضمين دعم Generic في اللغة، وهذا متوفر في GHC (Glasgow Haskell Compiler)، وهو المترجم الأساسي لـ Haskell. عند تعريف بياناتك بإشارة deriving Generic، يقوم GHC بتوليد كود خاص بـ Generic يمكن استخدامه لإجراء تعاملات جبرية مع بنية البيانات الخاصة بك.

باستخدام generic-arbitrary، يمكنك تجنب الحاجة إلى تكرار نفس الكود لتعريف Arbitrary لكل حالة من حالات بياناتك الجبرية، مما يجعل عملية إنشاء اختبارات أوتوماتيكية أسهل وأكثر فعالية.

يجب ملاحظة أنه يجب أن تكون عملية التحويل Generic متاحة في النوع البياني الذي تريد توليف Arbitrary له. إذا كان لديك أنواع معقدة تحتوي على عمليات تحويل مخصصة، قد تحتاج إلى توفير تعريفات Arbitrary مخصصة لها بشكل يدوي.

مقالات ذات صلة

زر الذهاب إلى الأعلى
إغلاق

أنت تستخدم إضافة Adblock

يرجى تعطيل مانع الإعلانات حيث أن موقعنا غير مزعج ولا بأس من عرض الأعلانات لك فهي تعتبر كمصدر دخل لنا و دعم مقدم منك لنا لنستمر في تقديم المحتوى المناسب و المفيد لك فلا تبخل بدعمنا عزيزي الزائر