2013-11-06 08:18:40 -08:00
|
|
|
#include "rules.h"
|
2013-11-05 22:15:19 -08:00
|
|
|
#include "transition_map.h"
|
|
|
|
|
#include <igloo/igloo_alt.h>
|
|
|
|
|
|
|
|
|
|
using namespace std;
|
|
|
|
|
using namespace igloo;
|
2013-11-06 08:18:40 -08:00
|
|
|
using namespace tree_sitter;
|
2013-11-07 08:22:56 -08:00
|
|
|
|
|
|
|
|
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);
|
|
|
|
|
}
|
2013-11-05 22:15:19 -08:00
|
|
|
|
|
|
|
|
Describe(Rules) {
|
|
|
|
|
Describe(transitions) {
|
2013-11-07 08:22:56 -08:00
|
|
|
rules::Symbol symbol1 = rules::Symbol(1);
|
|
|
|
|
rules::Symbol symbol2 = rules::Symbol(2);
|
|
|
|
|
rules::Symbol symbol3 = rules::Symbol(3);
|
|
|
|
|
rules::Symbol symbol4 = rules::Symbol(3);
|
2013-11-05 22:15:19 -08:00
|
|
|
|
|
|
|
|
It(handles_symbols) {
|
|
|
|
|
AssertThat(
|
|
|
|
|
symbol1.transitions(),
|
2013-11-07 08:22:56 -08:00
|
|
|
EqualsTransitionMap(TransitionMap<rules::Rule>(
|
2013-11-05 22:15:19 -08:00
|
|
|
{ symbol1.copy() },
|
2013-11-07 08:22:56 -08:00
|
|
|
{ new rules::Blank() }
|
|
|
|
|
)));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
It(handles_characters) {
|
|
|
|
|
rules::Char char1 = rules::Char('a');
|
|
|
|
|
AssertThat(
|
|
|
|
|
char1.transitions(),
|
|
|
|
|
EqualsTransitionMap(TransitionMap<rules::Rule>(
|
|
|
|
|
{ char1.copy() },
|
|
|
|
|
{ new rules::Blank() }
|
|
|
|
|
)));
|
2013-11-05 22:15:19 -08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
It(handles_choices) {
|
|
|
|
|
AssertThat(
|
2013-11-07 08:22:56 -08:00
|
|
|
rules::Choice(symbol1, symbol2).transitions(),
|
|
|
|
|
EqualsTransitionMap(TransitionMap<rules::Rule>(
|
2013-11-05 22:15:19 -08:00
|
|
|
{ symbol1.copy(), symbol2.copy() },
|
2013-11-07 08:22:56 -08:00
|
|
|
{ new rules::Blank(), new rules::Blank() }
|
|
|
|
|
)));
|
2013-11-05 22:15:19 -08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
It(handles_sequences) {
|
|
|
|
|
AssertThat(
|
2013-11-07 08:22:56 -08:00
|
|
|
rules::Seq(symbol1, symbol2).transitions(),
|
|
|
|
|
EqualsTransitionMap(TransitionMap<rules::Rule>(
|
2013-11-05 22:15:19 -08:00
|
|
|
{ symbol1.copy() },
|
|
|
|
|
{ symbol2.copy() }
|
2013-11-07 08:22:56 -08:00
|
|
|
)));
|
2013-11-05 22:15:19 -08:00
|
|
|
}
|
|
|
|
|
|
2013-11-06 13:37:01 -08:00
|
|
|
It(handles_long_sequences) {
|
|
|
|
|
AssertThat(
|
2013-11-07 08:22:56 -08:00
|
|
|
rules::Seq(
|
|
|
|
|
rules::Seq(symbol1, symbol2),
|
|
|
|
|
rules::Seq(symbol3, symbol4)).transitions(),
|
|
|
|
|
EqualsTransitionMap(TransitionMap<rules::Rule>(
|
2013-11-06 13:37:01 -08:00
|
|
|
{ symbol1.copy() },
|
2013-11-07 08:22:56 -08:00
|
|
|
{ new rules::Seq(symbol2, rules::Seq(symbol3, symbol4)) }
|
|
|
|
|
)));
|
2013-11-06 13:37:01 -08:00
|
|
|
}
|
|
|
|
|
|
2013-11-05 22:15:19 -08:00
|
|
|
It(handles_choices_with_common_starting_symbols) {
|
|
|
|
|
AssertThat(
|
2013-11-07 08:22:56 -08:00
|
|
|
rules::Choice(
|
|
|
|
|
rules::Seq(symbol1, symbol2),
|
|
|
|
|
rules::Seq(symbol1, symbol3)).transitions(),
|
|
|
|
|
EqualsTransitionMap(TransitionMap<rules::Rule>(
|
2013-11-05 22:15:19 -08:00
|
|
|
{ symbol1.copy() },
|
2013-11-07 08:22:56 -08:00
|
|
|
{ new rules::Choice(symbol2, symbol3) }
|
|
|
|
|
)));
|
2013-11-05 22:15:19 -08:00
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
};
|