tree-sitter/spec/compiler/build_tables/item_set_closure_spec.cc

42 lines
1.1 KiB
C++
Raw Normal View History

2014-06-23 18:50:03 -07:00
#include "compiler/compiler_spec_helper.h"
2014-03-09 22:05:05 -07:00
#include "compiler/prepared_grammar.h"
#include "compiler/build_tables/item_set_closure.h"
#include "compiler/build_tables/item_set_transitions.h"
using namespace build_tables;
using namespace rules;
START_TEST
describe("item_set_closure", []() {
2014-08-06 13:00:35 -07:00
SyntaxGrammar grammar({
{ "E", seq({
i_sym(1),
i_token(11) }) },
{ "T", seq({
i_token(12),
i_token(13) }) },
}, {});
2014-03-09 19:49:35 -07:00
2014-08-06 13:00:35 -07:00
it("adds items at the beginnings of referenced rules", [&]() {
ParseItemSet item_set = item_set_closure(
ParseItem(Symbol(0), grammar.rule(Symbol(0)), 0),
set<Symbol>({ Symbol(10, SymbolOptionToken) }),
grammar
);
2014-03-28 13:51:32 -07:00
2014-08-06 13:00:35 -07:00
AssertThat(item_set, Equals(ParseItemSet({
{
ParseItem(Symbol(1), grammar.rule(Symbol(1)), 0),
set<Symbol>({ Symbol(11, SymbolOptionToken) }),
},
{
ParseItem(Symbol(0), grammar.rule(Symbol(0)), 0),
set<Symbol>({ Symbol(10, SymbolOptionToken) }),
},
2014-08-06 13:00:35 -07:00
})));
});
});
2014-06-23 18:50:03 -07:00
END_TEST