public void SepBy1Test() { Combinator.SepBy1( Parser.Fail <Char, Char>("Failure"), Parser.Fail <Char, Unit>("Failure")) .Run("inputString".AsStream()) .Case( failure: (restStream, _) => { /* OK */ }, success: (restStream, _) => Assert.Fail()); Combinator.SepBy1( Chars.Any(), Chars.Char(',').Ignore()) .Run("i,n,p,u,t,S,t,r,i,n,g".AsStream()) .Case( failure: (restStream, _) => Assert.Fail(), success: (restStream, value) => { Assert.True(Enumerable.SequenceEqual(value, "inputString")); Assert.False(restStream.Current.HasValue); }); Combinator.SepBy1( Chars.Any(), Chars.Char(',').Ignore()) .Run("i,n,p,u,t,S,t,r,i,n,g,".AsStream()) .Case( failure: (restStream, _) => Assert.Fail(), success: (restStream, value) => { Assert.True(Enumerable.SequenceEqual(value, "inputString")); Assert.True(restStream.Current.HasValue); Assert.AreEqual(',', restStream.Current.Value.Item0); Assert.AreEqual(1, restStream.Current.Value.Item1.Line); Assert.AreEqual(22, restStream.Current.Value.Item1.Column); }); }