Add character rule class

This commit is contained in:
Max Brunsfeld 2013-11-07 08:22:56 -08:00
parent 061d8a8efc
commit 849f2ee195
3 changed files with 78 additions and 30 deletions

View file

@ -5,60 +5,79 @@
using namespace std;
using namespace igloo;
using namespace tree_sitter;
using namespace tree_sitter::rules;
EqualsContainerConstraint<
TransitionMap<rules::Rule>,
bool (*)(const TransitionMap<rules::Rule>::pair_type &, const TransitionMap<rules::Rule>::pair_type &)
>
EqualsTransitionMap(const TransitionMap<rules::Rule> &expected) {
return EqualsContainer(expected, TransitionMap<rules::Rule>::elements_equal);
}
Describe(Rules) {
Describe(transitions) {
Symbol symbol1 = Symbol(1);
Symbol symbol2 = Symbol(2);
Symbol symbol3 = Symbol(3);
Symbol symbol4 = Symbol(3);
rules::Symbol symbol1 = rules::Symbol(1);
rules::Symbol symbol2 = rules::Symbol(2);
rules::Symbol symbol3 = rules::Symbol(3);
rules::Symbol symbol4 = rules::Symbol(3);
It(handles_symbols) {
AssertThat(
symbol1.transitions(),
EqualsContainer(TransitionMap<Rule>(
EqualsTransitionMap(TransitionMap<rules::Rule>(
{ symbol1.copy() },
{ new Blank() }
), TransitionMap<Rule>::elements_equal));
{ new rules::Blank() }
)));
}
It(handles_characters) {
rules::Char char1 = rules::Char('a');
AssertThat(
char1.transitions(),
EqualsTransitionMap(TransitionMap<rules::Rule>(
{ char1.copy() },
{ new rules::Blank() }
)));
}
It(handles_choices) {
AssertThat(
Choice(symbol1, symbol2).transitions(),
EqualsContainer(TransitionMap<Rule>(
rules::Choice(symbol1, symbol2).transitions(),
EqualsTransitionMap(TransitionMap<rules::Rule>(
{ symbol1.copy(), symbol2.copy() },
{ new Blank(), new Blank() }
), TransitionMap<Rule>::elements_equal));
{ new rules::Blank(), new rules::Blank() }
)));
}
It(handles_sequences) {
AssertThat(
Seq(symbol1, symbol2).transitions(),
EqualsContainer(TransitionMap<Rule>(
rules::Seq(symbol1, symbol2).transitions(),
EqualsTransitionMap(TransitionMap<rules::Rule>(
{ symbol1.copy() },
{ symbol2.copy() }
), TransitionMap<Rule>::elements_equal));
)));
}
It(handles_long_sequences) {
AssertThat(
Seq(Seq(symbol1, symbol2), Seq(symbol3, symbol4)).transitions(),
EqualsContainer(TransitionMap<Rule>(
rules::Seq(
rules::Seq(symbol1, symbol2),
rules::Seq(symbol3, symbol4)).transitions(),
EqualsTransitionMap(TransitionMap<rules::Rule>(
{ symbol1.copy() },
{ new Seq(symbol2, Seq(symbol3, symbol4)) }
), TransitionMap<Rule>::elements_equal));
{ new rules::Seq(symbol2, rules::Seq(symbol3, symbol4)) }
)));
}
It(handles_choices_with_common_starting_symbols) {
AssertThat(
Choice(
Seq(symbol1, symbol2),
Seq(symbol1, symbol3)).transitions(),
EqualsContainer(TransitionMap<Rule>(
rules::Choice(
rules::Seq(symbol1, symbol2),
rules::Seq(symbol1, symbol3)).transitions(),
EqualsTransitionMap(TransitionMap<rules::Rule>(
{ symbol1.copy() },
{ new Choice(symbol2, symbol3) }
), TransitionMap<Rule>::elements_equal));
{ new rules::Choice(symbol2, symbol3) }
)));
}
};
};