public void SimpleMathBlockDefinition_No_Expression() { Assert.Throws <Exception>(() => { var definition = new SimpleMathBlockDefinition("my calculator") { Expression = "" }; definition.Validate(); }); }
public void SimpleMathBlockDefinition_Invalid_Output() { Assert.Throws <Exception>(() => { var definition = new SimpleMathBlockDefinition("my calculator") { Expression = "a + b" }; definition.Output.AddNumeric("x"); definition.Output.AddNumeric("y"); definition.Validate(); }); }
public void Runs_In_Composite() { var constants = new ConstantsBlockDefinition("constants"); constants.Output.AddNumeric("aConstant"); constants.Output.AddNumeric("bConstant"); constants.Constants.Add(new Parameter(ParameterName.For("aConstant"), 10)); constants.Constants.Add(new Parameter(ParameterName.For("bConstant"), 20)); var simpleMath = new SimpleMathBlockDefinition("calc"); simpleMath.Expression = "a + b"; simpleMath.Input.AddNumeric("a"); simpleMath.Input.AddNumeric("b"); simpleMath.Output.AddNumeric("c"); var composite = new CompositeBlockDefinition("composite"); composite.Blocks.Add(constants); composite.Blocks.Add(simpleMath); composite.Output.AddNumeric("result"); composite.Wires.Add(new ParameterWire() { From = new ParameterWire.Endpoint(constants, ParameterName.For("aConstant")), To = new ParameterWire.Endpoint(simpleMath, ParameterName.For("a")) }); composite.Wires.Add(new ParameterWire() { From = new ParameterWire.Endpoint(constants, ParameterName.For("bConstant")), To = new ParameterWire.Endpoint(simpleMath, ParameterName.For("b")) }); composite.Wires.Add(new ParameterWire() { From = new ParameterWire.Endpoint(simpleMath, ParameterName.For("c")), To = new ParameterWire.Endpoint(composite, ParameterName.For("result")) }); var calc = new Calculation(composite); var actual = calc.Get(ParameterName.For("result")).Value; Assert.Equal(30, (int)actual); }
public void SimpleMathBlockDefinition_Correct() { var definition = new SimpleMathBlockDefinition("my calculator") { Expression = "a + b" }; definition.Input.AddNumeric("a"); definition.Input.AddNumeric("b"); definition.Output.AddNumeric("c"); definition.Validate(); var instance = new Calculation(definition); instance.Set(new Parameter(ParameterName.For("a"), 10)); instance.Set(new Parameter(ParameterName.For("b"), 20)); Assert.Equal(30, (int)instance.Get(ParameterName.For("c")).Value); }
public void Two_SimpleMathBlocks_Sequential_Correct() { var firstBlock = new SimpleMathBlockDefinition("first") { Expression = "a + b" }; firstBlock.Input.AddNumeric("a"); firstBlock.Input.AddNumeric("b"); firstBlock.Output.AddNumeric("c"); var secondBlock = new SimpleMathBlockDefinition("second") { Expression = "c * c" }; secondBlock.Input.AddNumeric("a"); secondBlock.Input.AddNumeric("c"); secondBlock.Output.AddNumeric("r"); var composite = new CompositeBlockDefinition("Composite"); composite.Blocks.Add(firstBlock); composite.Blocks.Add(secondBlock); composite.Input.AddNumeric("input1"); composite.Output.AddNumeric("result"); composite.Validate(); composite.Wires.Add(new ParameterWire() { From = new ParameterWire.Endpoint(secondBlock, ParameterName.For("r")), To = new ParameterWire.Endpoint(composite, ParameterName.For("result")) }); composite.Wires.Add(new ParameterWire() { From = new ParameterWire.Endpoint(composite, ParameterName.For("input1")), To = new ParameterWire.Endpoint(firstBlock, ParameterName.For("a")) }); composite.Wires.Add(new ParameterWire() { From = new ParameterWire.Endpoint(composite, ParameterName.For("input1")), To = new ParameterWire.Endpoint(firstBlock, ParameterName.For("b")) }); composite.Wires.Add(new ParameterWire() { From = new ParameterWire.Endpoint(firstBlock, ParameterName.For("c")), To = new ParameterWire.Endpoint(secondBlock, ParameterName.For("c")) }); composite.Validate(); // Sequential composite.ExecutionOrder = ExecutionOrder.Sequential; using (var calculation = new Calculation(composite)) { calculation.Set(new Parameter(ParameterName.For("input1"), 5)); Assert.False(calculation.IsCalculated); var actual = calculation.Get(ParameterName.For("result")).Value; Assert.Equal(100, (int)actual); Assert.True(calculation.IsCalculated); } }