コード例 #1
0
ファイル: ParseStateTests.cs プロジェクト: lmihalkovic/Pidgin
        private static void Consume(string expected, ref ParseState <char> state)
        {
            var oldCol = state.ComputeSourcePos().Col;

            AssertEqual(expected.AsSpan(), state.LookAhead(expected.Length));
            state.Advance(expected.Length);
            Assert.Equal(oldCol + expected.Length, state.ComputeSourcePos().Col);
        }
コード例 #2
0
ファイル: ParseStateTests.cs プロジェクト: lmihalkovic/Pidgin
        private static void Consume(char expected, ref ParseState <char> state)
        {
            var oldCol = state.ComputeSourcePos().Col;

            Assert.True(state.HasCurrent);
            Assert.Equal(expected, state.Current);
            state.Advance();
            Assert.Equal(oldCol + 1, state.ComputeSourcePos().Col);
        }
コード例 #3
0
ファイル: ParseStateTests.cs プロジェクト: lmihalkovic/Pidgin
        private static void UnalignedChunkTest(int inputLength)
        {
            var input = ("fa" + new string('o', inputLength - 2)).AsSpan();
            var state = new ParseState <char>((_, x) => x.IncrementCol(), new SpanTokenStream <char>(ref input));

            Consume('f', ref state);

            state.PushBookmark();
            Consume('a' + new string('o', inputLength - 2), ref state);
            Assert.False(state.HasCurrent);
            Assert.Equal(new SourcePos(1, inputLength + 1), state.ComputeSourcePos());

            state.Rewind();
            Assert.Equal(new SourcePos(1, 2), state.ComputeSourcePos());
            Consume('a', ref state);
        }
コード例 #4
0
ファイル: ParseStateTests.cs プロジェクト: sambsp/Pidgin
        private static void AlignedChunkTest(int inputLength)
        {
            var input = ('f' + new string('o', inputLength - 1));
            var state = new ParseState <char>((_, x) => x.IncrementCol(), ToStream(input));

            state.PushBookmark();

            Consume('f', ref state);
            Consume(new string('o', inputLength - 1), ref state);
            Assert.False(state.HasCurrent);
            Assert.Equal(new SourcePos(1, inputLength + 1), state.ComputeSourcePos());

            state.Rewind();
            Assert.Equal(new SourcePos(1, 1), state.ComputeSourcePos());
            Consume('f', ref state);
        }
コード例 #5
0
ファイル: ParseStateTests.cs プロジェクト: lmihalkovic/Pidgin
        public void TestEmptyInput()
        {
            var input = "".AsSpan();
            var state = new ParseState <char>((_, x) => x.IncrementCol(), new SpanTokenStream <char>(ref input));

            Assert.Equal(new SourcePos(1, 1), state.ComputeSourcePos());
            Assert.False(state.HasCurrent);
        }
コード例 #6
0
ファイル: ParseStateTests.cs プロジェクト: lmihalkovic/Pidgin
        public void TestDiscardChunk()
        {
            var input = ('f' + new string('o', ChunkSize)).AsSpan();  // Length == ChunkSize + 1
            var state = new ParseState <char>((_, x) => x.IncrementCol(), new SpanTokenStream <char>(ref input));

            Consume('f', ref state);
            Consume(new string('o', ChunkSize), ref state);
            Assert.False(state.HasCurrent);
            Assert.Equal(new SourcePos(1, input.Length + 1 /* because Col is 1-indexed */), state.ComputeSourcePos());
        }
コード例 #7
0
 internal sealed override bool TryParse(ref ParseState <TToken> state, ref ExpectedCollector <TToken> expecteds, out SourcePos result)
 {
     result = state.ComputeSourcePos();
     return(true);
 }
コード例 #8
0
 public override InternalResult <SourcePos> Parse(ref ParseState <TToken> state)
 => InternalResult.Success(state.ComputeSourcePos(), false);