Adding simple test fot cf grammar

This commit is contained in:
IlushaShurupov 2023-08-12 08:08:47 +03:00 committed by Ilya Shurupov
parent 24d554abc3
commit 2c8151ec3e
2 changed files with 60 additions and 1 deletions

View file

@ -1,4 +1,62 @@
int main() {
#include "NewPlacement.hpp"
#include "Testing.hpp"
#include "Parser.hpp"
using namespace tp;
TEST_DEF(Simple) {
String source = R"(
Start Body
Body : [ Function ] | List | &;
List : [ LIST ];
)";
auto state = CfGrammar::initializeCfGrammarParser();
CfGrammar grammar;
if (!grammar.parse(state, source)) {
TEST(0 && "Parsing is failed\n");
CfGrammar::deinitializeCfGrammarParser(state);
return;
}
if (!grammar.compile()) {
TEST(0 && "Compilation is failed\n");
CfGrammar::deinitializeCfGrammarParser(state);
return;
}
CfGrammar::deinitializeCfGrammarParser(state);
printf("Grammar accepted.\n");
List<CfGrammar::Sentence> sentences;
grammar.generateSentences(sentences);
TEST_ASSERT(sentences.length() == 3);
TEST_ASSERT(sentences.first()->data.terms.length() == 1);
TEST_ASSERT(sentences.last()->data.terms.length() == 1);
TEST(sentences.first()->data.terms.first()->data.id == "Function");
TEST(sentences.last()->data.terms.first()->data.id == "LIST");
printf("Example sentences formed from grammar: \n");
for (auto sentence : sentences) tp::CfGrammar::printSentence(sentence.data());
}
int main(int argc, const char* argv[]) {
tp::ModuleManifest* deps[] = { &tp::gModuleParser, nullptr };
tp::ModuleManifest testModule("CommandLineTest", nullptr, nullptr, deps);
if (!testModule.initialize()) {
return 1;
}
testSimple();
testModule.deinitialize();
return 0;
}