public int ComparePrecedence(IMyOperator o) { bool result = (o is MyBaseOperator); int tempPrecedence; if (result) { MyBaseOperator other = (MyBaseOperator)o; if (precedence > other.precedence) { tempPrecedence = 1; } else if (other.precedence == precedence) { tempPrecedence = 0; } else { tempPrecedence = -1; } return(tempPrecedence); //since I'm not used to the bottom structure, I unfolded it above. //return precedence > other.precedence ? 1 : // other.precedence == precedence ? 0 : -1; } else { return(-o.ComparePrecedence(this)); } }
public void OperatorsInBaseClassWorkAsExpected() { MyBaseOperator left = new MyBaseOperator(13); MyBaseOperator right = new MyBaseOperator(11); MyBaseOperator result; Expression<MyBaseOperator> expression = new Expression<MyBaseOperator>(); expression.Parameters.Add("Left", left.GetType(), left); expression.Parameters.Add("Right", right.GetType(), right); expression.Text = "Left + Right"; result = expression.Evaluate(); Assert.AreEqual(24, result.Value); expression.Text = "Left - Right"; result = expression.Evaluate(); Assert.AreEqual(2, result.Value); }