/// <summary> /// Evaluates the expression for the given shape. /// </summary> /// <param name="shapes"></param> /// <returns>The result of evaluating the expression.</returns> public override bool Evaluate(ShapeSet shapes) { if (shapes == null) { throw new ArgumentNullException(nameof(shapes)); } switch (ExpressionType) { case ExpressionType.And: return(Expressions.All(e => e.Evaluate(shapes))); case ExpressionType.Or: return(Expressions.Any(e => e.Evaluate(shapes))); case ExpressionType.BoolEqual: return(Expressions.AreEqual()); case ExpressionType.Xor: Debug.Assert(Expressions.Count == 2); return(Expressions[0].Evaluate(shapes) ^ Expressions[1].Evaluate(shapes)); case ExpressionType.Not: Debug.Assert(Expressions.Count == 1); return(!Expressions[0].Evaluate(shapes)); default: Debug.Assert(false); throw new ArgumentOutOfRangeException(); } }
public bool IsInconsistentWith(DecisionRule rule) { //do two rules have same background rule but different outputs? return(Expressions.AreEqual(rule.Expressions) && Output != rule.Output); }