Example #1
0
        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'));
        }
Example #2
0
        public void AnyTerminalIsMatchShouldReturnTrueWhenAnyCharacterSpecified()
        {
            var anyTerminal = new AnyTerminal();

            for (char c = char.MinValue; c < char.MaxValue; c++)
            {
                Assert.IsTrue(anyTerminal.IsMatch(c));
            }
        }
Example #3
0
        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()));
        }
Example #4
0
        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()));
        }
Example #5
0
        public void ShouldEquals()
        {
            AnyTerminal a, b;


            a = new AnyTerminal();
            b = new AnyTerminal();

            Assert.IsTrue(a.Equals(b));
            Assert.IsTrue(b.Equals(a));
        }
Example #6
0
        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));
        }
Example #7
0
        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);
        }