public void Reads() { TextReader s = new StringReader (" pi (True 42 C 3.14159) e (Y 1 2 (/3 4) 4 2.71 ) "); var categories = new Func<char?, char, bool>[] { (_, c) => char.IsLetterOrDigit (c) || c == '.', (_, c) => c == '+' || c == '-' || c == '*' || c == '/', (_, c) => !char.IsWhiteSpace (c), }; var reader = new TextValueReader (s.Tokens (categories)); TvrData1 a; TvrData2 b; string p, e; reader.Read (out p) .Read (out a) .Read (out e) .Read (out b); Assert.AreEqual ("pi", p); Assert.AreEqual ("e", e); Assert.AreEqual (true, a.A); Assert.AreEqual ((byte) 42, a.B); Assert.AreEqual ('C', a.C); Assert.AreEqual (3.14159, a.D); Assert.AreEqual ("Y", b.F); Assert.AreEqual (1, b.A); Assert.AreEqual (2, b.B); Assert.AreEqual ("3", b.O.left); Assert.AreEqual ('/', b.O.op); Assert.AreEqual ("4", b.O.right); Assert.AreEqual (4, b.C); Assert.AreEqual (2.71f, b.D); }
public void Reads() { TextReader s = new StringReader(" pi (True 42 C 3.14159) e (Y 1 2 (/3 4) 4 2.71 ) "); var categories = new Func <char?, char, bool>[] { (_, c) => char.IsLetterOrDigit(c) || c == '.', (_, c) => c == '+' || c == '-' || c == '*' || c == '/', (_, c) => !char.IsWhiteSpace(c), }; var reader = new TextValueReader(s.Tokens(categories)); TvrData1 a; TvrData2 b; string p, e; reader.Read(out p) .Read(out a) .Read(out e) .Read(out b); Assert.AreEqual("pi", p); Assert.AreEqual("e", e); Assert.AreEqual(true, a.A); Assert.AreEqual((byte)42, a.B); Assert.AreEqual('C', a.C); Assert.AreEqual(3.14159, a.D); Assert.AreEqual("Y", b.F); Assert.AreEqual(1, b.A); Assert.AreEqual(2, b.B); Assert.AreEqual("3", b.O.left); Assert.AreEqual('/', b.O.op); Assert.AreEqual("4", b.O.right); Assert.AreEqual(4, b.C); Assert.AreEqual(2.71f, b.D); }