Here is an example of the types of tests I’ve been writing recently, see if you can figure out what it’s doing:
[Test] public void TypeNameParameterizedRuleSuccess() { string expected = "a.b.c"; var stream = new TextStream(expected); var list = new Func<PatternMatch, PatternMatch, PatternMatch>( (exp, separator) => { return Pattern.And( exp, Pattern.ZeroOrMore( Pattern.And( separator, exp))); }); var pattern = Pattern.Projection( list( Pattern.Range('a', 'z'), Pattern.Value('.')), match => match.AsString()); var actual = pattern(stream); Assert.AreEqual(expected, ((ValueNode)actual).Value); }
beautiful!