tree-sitter/spec/compiler/rules/choice_spec.cc
2014-08-21 20:04:42 -07:00

51 lines
1.1 KiB
C++

#include "compiler/compiler_spec_helper.h"
#include "compiler/rules/choice.h"
using namespace rules;
START_TEST
describe("Choice", []() {
describe("constructing choices", [&]() {
it("eliminates duplicate members", [&]() {
auto rule = Choice::Build({
seq({ sym("one"), sym("two") }),
sym("three"),
seq({ sym("one"), sym("two") })
});
AssertThat(rule, EqualsPointer(choice({
seq({ sym("one"), sym("two") }),
sym("three"),
})));
});
it("eliminates duplicates within nested choices", [&]() {
auto rule = Choice::Build({
seq({ sym("one"), sym("two") }),
Choice::Build({
sym("three"),
seq({ sym("one"), sym("two") })
})
});
AssertThat(rule, EqualsPointer(choice({
seq({ sym("one"), sym("two") }),
sym("three"),
})));
});
it("doesn't construct a choice if there's only one unique member", [&]() {
auto rule = Choice::Build({
sym("one"),
Choice::Build({
sym("one"),
})
});
AssertThat(rule, EqualsPointer(sym("one")));
});
});
});
END_TEST