Beispiel #1
0
        public void Pipe2Test()
        {
            Combinator.Pipe(
                Chars.Char('i'),
                Chars.Char('n'),
                Chars.Char('p'),
                (value0, value1, value2) => new[] { value0, value1, value2 })
            .Run("inputString".AsStream())
            .Case(
                failure: (restStream, _) => Assert.Fail(),
                success: (restStream, value) =>
            {
                Assert.True(Enumerable.SequenceEqual(value, "inp"));
                Assert.AreEqual('u', restStream.Current.Value.Item0);
                Assert.AreEqual(1, restStream.Current.Value.Item1.Line);
                Assert.AreEqual(4, restStream.Current.Value.Item1.Column);
            });

            Combinator.Pipe(
                Chars.Char('i'),
                Chars.Char('n'),
                Parser.Fail <Char, Char>("Failure"),
                (value0, value1, value2) => new[] { value0, value1, value2 })
            .Run("inputString".AsStream())
            .Case(
                failure: (restStream, _) =>
            {
                Assert.True(restStream.Current.HasValue);
                Assert.AreEqual('p', restStream.Current.Value.Item0);
                Assert.AreEqual(1, restStream.Current.Value.Item1.Line);
                Assert.AreEqual(3, restStream.Current.Value.Item1.Column);
            },
                success: (restStream, value) => Assert.Fail());
        }