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()); }