internal static Coercive.Operator Operator(this Coercive.Operation operation) { return(operation switch { Coercive.Operation.Plus => Addition, Coercive.Operation.Minus => Subtraction, Coercive.Operation.Times => Multiplication, Coercive.Operation.DividedBy => Division, _ => throw EnumUtils.InvalidEnumArgumentException(nameof(operation), operation) });
public void Coercively_Verb_Numeric( [ValueSource(nameof(PrimitiveUtils.NumericTypes))] Type aType, [ValueSource(nameof(PrimitiveUtils.NumericTypes))] Type bType, [Values] Coercive.Operation operation ) { new OperationExpectation(aType, operation, bType).Test_Verb(); }
public OperationExpectation(Type a_type, Coercive.Operation operation, Type b_type) { object a_val; object b_val; object e_val; AType = a_type; Operation = operation; BType = b_type; EType = GetExpectedResultType(AType); switch (operation) { case Coercive.Operation.Plus: a_val = 10; b_val = 20; e_val = 30; break; case Coercive.Operation.Minus: a_val = 55; b_val = 21; e_val = 34; break; case Coercive.Operation.Times: a_val = 8; b_val = 10; e_val = 80; break; case Coercive.Operation.DividedBy: a_val = 20; b_val = 5; e_val = 4; break; default: throw EnumUtils.InvalidEnumArgumentException(nameof(operation), operation); } A = Convert.ChangeType(a_val, AType); B = Convert.ChangeType(b_val, BType); E = Convert.ChangeType(e_val, EType); }
public static object Compute(object a, Coercive.Operation operation, object b) { return(operation.Operator().Apply(a, b)); }