상속: TokenStreamRewriter
 public void WordRewriter_TokenStream_Needs_To_Be_In_Infix_Notation()
 {
     TokenStream stream = new TokenStream(Enumerable.Empty<Token>(), TokenNotation.Postfix);
     WordRewriter rewriter = new WordRewriter();
     var exception = Assert.Throws<MathExpressionException>(() => rewriter.Rewrite(stream));
     Assert.AreEqual("Token stream is not in infix notation.", exception.Message);
 }
 public void WordRewriter_Will_Detect_And_Rewrite_Functions()
 {
     MathExpressionTokenizer tokenizer = new MathExpressionTokenizer();
     var tokens = tokenizer.Tokenize("sqrt(1)");
     WordRewriter rewriter = new WordRewriter();
     var result = rewriter.Rewrite(tokens);
     Assert.AreEqual(TokenType.Function, result[0].Type);
     Assert.AreEqual("sqrt", result[0].Value);
 }
 public void WordRewriter_Will_Detect_Constant_Pi()
 {
     List<Token> tokens = new List<Token>();
     tokens.Add(new Token(TokenType.Word, "pi"));
     TokenStream stream = new TokenStream(tokens, TokenNotation.Infix);
     TokenStream result = new WordRewriter().Rewrite(stream);
     Assert.AreEqual(TokenType.Constant, result[0].Type);
     Assert.AreEqual("pi", ((Tuple<string, double>)result[0].Value).Item1);
     Assert.AreEqual(Math.PI, ((Tuple<string, double>)result[0].Value).Item2);
 }