Question

Je suis nouveau sur Boost.Spirit et Boost.Test et j'aimerais savoir comment vous vérifiez l'exactitude de vos grammaires. Vous trouverez ci-dessous une version simplifiée de la façon dont je le fais en ce moment et je suis presque sûr qu'il existe un meilleur moyen:

Chaque scénario de test est composé de deux chaînes contenant le texte à analyser et le résultat attendu délimité par un point-virgule.

Les fonctions d’analyse effectuent l’analyse actuelle et renvoient une chaîne qui devrait être égale au résultat attendu.

 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()
Était-ce utile?

La solution

En général, votre approche me semble bonne. Je grouperais probablement la classe de tests en fonction avec des noms descriptifs, par exemple. TestInvalidGrammar, TestErrorHandling, TestNestedGrammar, etc., ainsi que ceux qui ont été appelés depuis le répertoire principal.

Je suis sûr que vous avez lu la documentation, mais consultez exemples si cela vous aide.

Autres conseils

Vous pouvez voir ici comment (les auteurs de Boost Spirit) testent leurs propres analyseurs: http://svn.boost.org/svn/boost/trunk/libs/spirit/test/qi/grammar.cpp . Pour chaque partie du qi, vous pouvez trouver un fichier C ++ ici: http : //svn.boost.org/svn/boost/trunk/libs/spirit/test/qi/ .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top