Added a unit test.

This commit is contained in:
yhirose 2015-06-12 18:13:20 -04:00
parent 46470071f3
commit fdf10521c6

View File

@ -266,7 +266,7 @@ TEST_CASE("mutable lambda test", "[general]")
{ {
vector<string> vec; vector<string> vec;
peg pg("ROOT <- 'mutable lambda test'"); peg pg("ROOT <- 'mutable lambda test'");
// This test makes sure if the following code can be compiled. // This test makes sure if the following code can be compiled.
pg["TOKEN"] = [=](const char* s, size_t n) mutable { pg["TOKEN"] = [=](const char* s, size_t n) mutable {
@ -505,6 +505,25 @@ TEST_CASE("Predicate test", "[general]")
REQUIRE(ret == false); REQUIRE(ret == false);
} }
TEST_CASE("Ignore semantic value of 'and' predicate test", "[general]")
{
peg parser(
" START <- _ &HELLO HELLO_WORLD '.' "
" HELLO_WORLD <- HELLO 'World' _ "
" HELLO <- 'Hello' _ "
" ~_ <- [ \t\r\n]* "
);
parser.enable_ast(false);
shared_ptr<Ast> ast;
auto ret = parser.parse("Hello World.", ast);
REQUIRE(ret == true);
REQUIRE(ast->nodes.size() == 1);
REQUIRE(ast->nodes[0]->name == "HELLO_WORLD");
}
bool exact(Grammar& g, const char* d, const char* s) { bool exact(Grammar& g, const char* d, const char* s) {
auto n = strlen(s); auto n = strlen(s);
auto r = g[d].parse(s, n); auto r = g[d].parse(s, n);