public void NegationTerminalShouldNegateAnyTerminal() { var anyTerminal = new AnyTerminal(); var negationTerminal = new NegationTerminal(anyTerminal); Assert.IsFalse(negationTerminal.IsMatch('a')); Assert.IsFalse(negationTerminal.IsMatch(char.MaxValue)); Assert.IsFalse(negationTerminal.IsMatch('0')); }
public void AnyTerminalIsMatchShouldReturnTrueWhenAnyCharacterSpecified() { var anyTerminal = new AnyTerminal(); for (char c = char.MinValue; c < char.MaxValue; c++) { Assert.IsTrue(anyTerminal.IsMatch(c)); } }
public void ShouldCreateNextSituationsUsingLettersRange() { Terminal a, c; AnyTerminal b; Sequence predicate; SituationGraphFactory <char> situationGraphFactory; ISituationGraph <char> graph; ISituation <char>[] items; LexicalRule rule; Situation <char> situation; SituationCollectionFactory <char> factory; a = new Terminal('a'); b = new AnyTerminal(); c = new Terminal('c'); predicate = new Sequence(); predicate.Items.Add(a); predicate.Items.Add(b); predicate.Items.Add(c); predicate.Items.Add(new Reduce()); rule = new LexicalRule() { Name = "A", Predicate = predicate }; situationGraphFactory = new SituationGraphFactory <char>(new SituationGraphSegmentFactory <char>()); graph = situationGraphFactory.BuildSituationGraph(rule.AsEnumerable()); factory = new SituationCollectionFactory <char>(graph); situation = new Situation <char>(rule, a, new MockedReduceInput()); items = factory.CreateNextSituations(situation.AsEnumerable(), new TerminalInput('b')).ToArray(); Assert.AreEqual(0, items.Length); situation = new Situation <char>(rule, a, new MockedReduceInput()); items = factory.CreateNextSituations(situation.AsEnumerable(), new TerminalInput('a')).ToArray(); Assert.AreEqual(1, items.Length); Assert.AreEqual(b, items[0].Predicate); situation = new Situation <char>(rule, b, new MockedReduceInput()); items = factory.CreateNextSituations(situation.AsEnumerable(), new TerminalInput('b')).ToArray(); Assert.AreEqual(1, items.Length); Assert.AreEqual(c, items[0].Predicate); situation = new Situation <char>(rule, b, new MockedReduceInput()); items = factory.CreateNextSituations(situation.AsEnumerable(), new TerminalRangeInput(char.MinValue, char.MaxValue)).ToArray(); Assert.AreEqual(1, items.Length); Assert.AreEqual(c, items[0].Predicate); situation = new Situation <char>(rule, c, new MockedReduceInput()); items = factory.CreateNextSituations(situation.AsEnumerable(), new TerminalInput('c')).ToArray(); Assert.AreEqual(1, items.Length); Assert.IsTrue(items[0].Predicate.Equals(new Reduce())); }
public void ShouldNotEquals() { AnyTerminal a; a = new AnyTerminal(); Assert.IsFalse(a.Equals(null)); Assert.IsFalse(a.Equals(new Terminal('a'))); Assert.IsFalse(a.Equals(new EOS())); }
public void ShouldEquals() { AnyTerminal a, b; a = new AnyTerminal(); b = new AnyTerminal(); Assert.IsTrue(a.Equals(b)); Assert.IsTrue(b.Equals(a)); }
public void ShouldGetInputs() { AnyTerminal predicate; IInput <char>[] inputs; predicate = new AnyTerminal(); inputs = predicate.GetInputs().ToArray(); Assert.IsNotNull(inputs); Assert.AreEqual(1, inputs.Length); Assert.IsInstanceOfType(inputs[0], typeof(TerminalRangeInput)); }
public void ShouldBuildAnyLetterPredicate() { LexicalPredicate predicate; ISituationGraph <char> graph; LexicalRule rule; SituationGraphFactory <char> situationGraphFactory; situationGraphFactory = new SituationGraphFactory <char>(new SituationGraphSegmentFactory <char>()); predicate = new AnyTerminal(); rule = new LexicalRule() { Name = "A", Predicate = new Sequence(predicate, new Reduce()) }; graph = situationGraphFactory.BuildSituationGraph(rule.AsEnumerable()); Assert.AreEqual(3, graph.Nodes.Count()); }
public void ShouldNotBuildAnyTerminalSegment() { SituationGraphSegmentFactory <char> factory; ISituationGraph <char> graph; LexicalRule rule; MockedSituationEdge capEdge; AnyTerminal predicate; capEdge = new MockedSituationEdge(); graph = new SituationGraph <char>(); factory = new SituationGraphSegmentFactory <char>(); predicate = new AnyTerminal(); rule = new LexicalRule() { Name = "A", Predicate = predicate }; Assert.ThrowsException <ArgumentNullException>(() => factory.BuildSegment(null, rule, predicate, capEdge.AsEnumerable())); Assert.ThrowsException <ArgumentNullException>(() => factory.BuildSegment(graph, null, predicate, capEdge.AsEnumerable())); Assert.ThrowsException <ArgumentNullException>(() => factory.BuildSegment(graph, rule, null as AnyTerminal, capEdge.AsEnumerable())); Assert.ThrowsException <ArgumentNullException>(() => factory.BuildSegment(graph, rule, predicate, null)); }
public void AnyTerminal_WithAnyCharacter_Succeeds(string text) { var stream = new TokenStream(new CharacterLexer(text)); var rule = new AnyTerminal("TEST"); TokenStreamIndex index; RuleOperationsMock opsMock; for (int i = 0; i < text.Length; i++) { index = new TokenStreamIndex(stream, i); opsMock = index.OperationsMock().Evaluate(rule); opsMock.Result.IsSuccess.Should().BeTrue(); opsMock.Result.Index.Index.Should().Be(i + 1); opsMock.ConcatTokens().Should().Be(text.Substring(i, 1)); } index = new TokenStreamIndex(stream, text.Length); opsMock = index.OperationsMock().Evaluate(rule); opsMock.Result.IsSuccess.Should().BeFalse(); opsMock.Result.Index.Index.Should().Be(index.Index); opsMock.ConcatTokens().Should().Be(String.Empty); }