public void ShouldSupportGenericPassthroughResult()
        {
            // Arrange
            var peg = Peg.GenericPassthroughTest();

            peg.DefaultSemanticActions.SetDefaultGenericPassthroughAction <GenericPassthroughAst>();

            string testInput = "aaaabbbb";
            var    tokenizer = peg.Tokenizer(TokenDefinitions.AB);
            var    rules     = peg.ParserGenerator.GetParsingRules("Start => &([A]) [A] [B]");
            var    parser    = peg.Parser(ParsingRuleNames.Start, rules);

            // Act
            var tokenizationResult = tokenizer.Tokenize(testInput);
            var parseResult        = parser.Parse(tokenizationResult.MatchedRanges);

            // Assert
            var result     = (GenericPassthroughAst)parseResult.SemanticActionResult;
            var subResults = result.SubResults.Cast <GenericPassthroughAst>().First().SubResults.Cast <GenericPassthroughAst>().ToList();

            Assert.Null(subResults[0]); // predicate does not consume tokens
            var seqResults = subResults[1].SubResults.Cast <GenericPassthroughAst>().ToList();

            Assert.Equal("aaaa", seqResults[0].MatchedTokens.GetMatchedString());
            Assert.Equal("bbbb", seqResults[1].MatchedTokens.GetMatchedString());
            Assert.Equal(MatchedPegOperator.NonTerminal, result.MatchedOperator);
        }
        public void ShouldSupportGenericPassthroughResult()
        {
            // Arrange
            var peg = Peg.GenericPassthroughTest();

            peg.DefaultSemanticActions.SetDefaultGenericPassthroughAction <GenericPassthroughAst>();
            string inputString = string.Empty;
            var    op          = peg.Operators;
            var    tokenizer   = peg.Tokenizer(TokenDefinitions.AB);
            var    rules       = peg.ParserGenerator.GetParsingRules("Start => []");
            var    parser      = peg.Parser(ParsingRuleNames.Start, rules);

            // Act
            var tokensResult = tokenizer.Tokenize(inputString);
            var parseResult  = parser.Parse(tokensResult.MatchedRanges);

            // Assert
            var result     = (GenericPassthroughAst)parseResult.SemanticActionResult;
            var subResults = result.SubResults.Cast <GenericPassthroughAst>().First().SubResults.Cast <GenericPassthroughAst>().ToList();

            Assert.Equal(string.Empty, result.MatchedTokens.GetMatchedString());
            Assert.Empty(subResults);
            Assert.Equal(MatchedPegOperator.NonTerminal, result.MatchedOperator);
            Assert.Equal(MatchedPegOperator.EmptyString, result.SubResults.Cast <GenericPassthroughAst>().Single().MatchedOperator);
        }