public void ParseFunctionFormWithArgumentsAndExpressionBody()
{
Parser parser = new Parser("add(X,Y) -> X+Y.");
var result = parser.ParseForm();
Assert.IsNotNull(result);
Assert.IsInstanceOfType(result, typeof(FunctionForm));
var fdef = (FunctionForm)result;
Assert.AreEqual("add", fdef.Name);
Assert.IsNotNull(fdef.ParameterExpressions);
Assert.AreEqual(2, fdef.ParameterExpressions.Count);
Assert.IsInstanceOfType(fdef.ParameterExpressions[0], typeof(VariableExpression));
Assert.IsInstanceOfType(fdef.ParameterExpressions[1], typeof(VariableExpression));
Assert.AreEqual("X", ((VariableExpression)fdef.ParameterExpressions[0]).Variable.Name);
Assert.AreEqual("Y", ((VariableExpression)fdef.ParameterExpressions[1]).Variable.Name);
Assert.IsNotNull(fdef.Body);
Assert.IsInstanceOfType(fdef.Body, typeof(AddExpression));
var addexpr = (AddExpression)fdef.Body;
Assert.IsInstanceOfType(addexpr.LeftExpression, typeof(VariableExpression));
Assert.IsInstanceOfType(addexpr.RightExpression, typeof(VariableExpression));
Assert.AreEqual("X", ((VariableExpression)addexpr.LeftExpression).Variable.Name);
Assert.AreEqual("Y", ((VariableExpression)addexpr.RightExpression).Variable.Name);
}