سؤال

وأنا جديدة على Boost.Spirit وBoost.Test وأود أن أعرف كيف تحقق من صحة قواعد النحو الخاصة بك. وفيما يلي نسخة مبسطة من كيف أفعل ذلك في الوقت الحالي وأنا متأكد من أن هناك طريقة أفضل:

وكل حالة اختبار HASE زوج من سلسلتين تحتوي على النص إلى تحليل والنتيجة المتوقعة محددة بفواصل منقوطة.

وظائف تحليل يفعل إعراب الفعلي وإرجاع سلسلة التي ينبغي أن تكون مساوية النتيجة المتوقعة.

 std::string parse(std::string const & line) {
  std::string name;
  int hours;

  rule<> top_rule = ... ; // rule assignes values to 'name' and 'hours'

  parse_info<> info = parse(line.c_str(), top_rule);

  if(info.full) {
    std::stringstream sstr;
    sstr << name << ";" << hours;

    return sstr.str();
  }

  return "parser failed.";
}

BOOST_AUTO_TEST_SUITE( TestSuite )

BOOST_AUTO_TEST_CASE( TestCase ) {
  BOOST_CHECK_EQUAL(parse("Tom worked for 10 hours."), "Tom;10");
}

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

المحلول

في عام، نهجكم يبدو على ما يرام بالنسبة لي. وأود أن ربما فئة مجموعة من الاختبارات في وظيفة مع أسماء وصفية، مثل TestInvalidGrammar، TestErrorHandling، TestNestedGrammar وغيرها، وتلك استدعاؤها من الرئيسي.

وأنا متأكد من أنك قد قرأت وثائق ولكن إلقاء نظرة على الموقع أمثلة إذا كان يساعد.

نصائح أخرى

وهنا يمكنك أن ترى كيف انهم (الكتاب دفعة روح) اختبار موزعي الخاصة بها: <لأ href = "http://svn.boost.org/svn/boost/trunk/libs/spirit/test/qi/grammar .CPP "يختلط =" نوفولو "> http://svn.boost.org/svn/boost/trunk/libs/spirit/test/qi/grammar.cpp . لكل جزء من تشي يمكنك العثور على ملف C ++ هنا: HTTP : //svn.boost.org/svn/boost/trunk/libs/spirit/test/qi/

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