public void VariantConstructorContainingDroppableValue_Execute_ValueIsDropped() { DfirRoot function = DfirRoot.Create(); var variantConstructorNode = new VariantConstructorNode(function.BlockDiagram, VariantWithDropField, 1); FunctionalNode createFakeDrop = CreateFakeDropWithId(function.BlockDiagram, 1); Wire.Create(function.BlockDiagram, createFakeDrop.OutputTerminals[0], variantConstructorNode.InputTerminals[0]); TestExecutionInstance executionInstance = CompileAndExecuteFunction(function); Assert.IsTrue(executionInstance.RuntimeServices.DroppedFakeDropIds.Contains(1)); }
public void VariantConstructorWithValidFields_SetVariableTypes_CorrectFieldVariableTypes() { DfirRoot function = DfirRoot.Create(); var variantConstructorNode = new VariantConstructorNode(function.BlockDiagram, VariantType, 0); ConnectConstantToInputTerminal(variantConstructorNode.InputTerminals[0], NITypes.Int32, false); RunSemanticAnalysisUpToSetVariableTypes(function); VariableReference variantVariable = variantConstructorNode.VariantOutputTerminal.GetTrueVariable(); Assert.AreEqual(VariantType, variantVariable.Type); }
bool IDfirNodeVisitor <bool> .VisitVariantConstructorNode(VariantConstructorNode variantConstructorNode) { Terminal inputTerminal = variantConstructorNode.InputTerminals[0], outputTerminal = variantConstructorNode.OutputTerminals[0]; NIType elementType = variantConstructorNode.VariantType.GetFields().ElementAt(variantConstructorNode.SelectedFieldIndex).GetDataType(); _nodeFacade[inputTerminal] = new SimpleTerminalFacade( inputTerminal, _typeVariableSet.CreateTypeVariableReferenceFromNIType(elementType)); _nodeFacade[outputTerminal] = new SimpleTerminalFacade( outputTerminal, _typeVariableSet.CreateTypeVariableReferenceFromNIType(variantConstructorNode.VariantType)); return(true); }
public void VariantMatchStructureWithThreeCasesAndThirdElementInput_Execute_CorrectFrameExecutes() { using (FeatureToggleSupport.TemporarilyEnableFeature(RebarFeatureToggles.AllIntegerTypes)) { DfirRoot function = DfirRoot.Create(); var variantConstructorNodeInt = new VariantConstructorNode(function.BlockDiagram, ThreeFieldVariantType, 2); ConnectConstantToInputTerminal(variantConstructorNodeInt.InputTerminals[0], NITypes.Int16, (short)5, false); VariantMatchStructure variantMatchStructure = this.CreateVariantMatchStructure(function.BlockDiagram, 3); Wire.Create(function.BlockDiagram, variantConstructorNodeInt.VariantOutputTerminal, variantMatchStructure.Selector.InputTerminals[0]); this.ConnectOutputToOutputTerminal(variantMatchStructure.Selector.OutputTerminals[2]); TestExecutionInstance executionInstance = CompileAndExecuteFunction(function); Assert.AreEqual("5", executionInstance.RuntimeServices.LastOutputValue); } }
public void VariantMatchStructureWithTwoCasesAndSecondElementInput_Execute_CorrectFrameExecutes() { DfirRoot function = DfirRoot.Create(); var variantConstructorNodeInt = new VariantConstructorNode(function.BlockDiagram, VariantType, 1); ConnectConstantToInputTerminal(variantConstructorNodeInt.InputTerminals[0], NITypes.Boolean, true, false); VariantMatchStructure variantMatchStructure = this.CreateVariantMatchStructure(function.BlockDiagram, 2); Wire.Create(function.BlockDiagram, variantConstructorNodeInt.VariantOutputTerminal, variantMatchStructure.Selector.InputTerminals[0]); this.ConnectOutputToOutputTerminal(variantMatchStructure.Selector.OutputTerminals[0]); this.ConnectOutputToOutputTerminal(variantMatchStructure.Selector.OutputTerminals[1]); TestExecutionInstance executionInstance = CompileAndExecuteFunction(function); Assert.AreEqual("true", executionInstance.RuntimeServices.LastOutputValue); }
public void VariantMatchStructureWithInputTunnel_Execute_InputTunnelValueCorrectlyTransferred() { DfirRoot function = DfirRoot.Create(); var variantConstructorNodeInt = new VariantConstructorNode(function.BlockDiagram, VariantType, 0); ConnectConstantToInputTerminal(variantConstructorNodeInt.InputTerminals[0], NITypes.Int32, 5, false); VariantMatchStructure variantMatchStructure = this.CreateVariantMatchStructure(function.BlockDiagram, 2); Wire.Create(function.BlockDiagram, variantConstructorNodeInt.VariantOutputTerminal, variantMatchStructure.Selector.InputTerminals[0]); Tunnel inputTunnel = CreateInputTunnel(variantMatchStructure); ConnectConstantToInputTerminal(inputTunnel.InputTerminals[0], NITypes.Int32, 5, false); this.ConnectOutputToOutputTerminal(inputTunnel.OutputTerminals[0]); TestExecutionInstance executionInstance = CompileAndExecuteFunction(function); Assert.AreEqual("5", executionInstance.RuntimeServices.LastOutputValue); }
public void VariantMatchStructureWithVariantInput_SetVariableTypes_CorrectFieldTypesSetOnSelectorInnerTerminals() { DfirRoot function = DfirRoot.Create(); var variantConstructorNode = new VariantConstructorNode(function.BlockDiagram, VariantType, 0); ConnectConstantToInputTerminal(variantConstructorNode.InputTerminals[0], NITypes.Int32, false); VariantMatchStructure variantMatchStructure = this.CreateVariantMatchStructure(function.BlockDiagram, 2); Wire.Create(function.BlockDiagram, variantConstructorNode.VariantOutputTerminal, variantMatchStructure.Selector.InputTerminals[0]); RunSemanticAnalysisUpToSetVariableTypes(function); VariableReference selectorInnerVariable0 = variantMatchStructure.Selector.OutputTerminals[0].GetTrueVariable(); Assert.IsTrue(selectorInnerVariable0.Type.IsInt32()); VariableReference selectorInnerVariable1 = variantMatchStructure.Selector.OutputTerminals[1].GetTrueVariable(); Assert.IsTrue(selectorInnerVariable1.Type.IsBoolean()); }
public void VariantMatchStructureWithOutputTunnelAndSecondFieldInputValue_Execute_OutputTunnelHasCorrectValue() { DfirRoot function = DfirRoot.Create(); var variantConstructorNodeInt = new VariantConstructorNode(function.BlockDiagram, VariantType, 1); ConnectConstantToInputTerminal(variantConstructorNodeInt.InputTerminals[0], NITypes.Boolean, true, false); VariantMatchStructure variantMatchStructure = this.CreateVariantMatchStructure(function.BlockDiagram, 2); Wire.Create(function.BlockDiagram, variantConstructorNodeInt.VariantOutputTerminal, variantMatchStructure.Selector.InputTerminals[0]); Tunnel outputTunnel = CreateOutputTunnel(variantMatchStructure); ConnectConstantToInputTerminal(outputTunnel.InputTerminals[0], NITypes.Int32, 5, false); ConnectConstantToInputTerminal(outputTunnel.InputTerminals[1], NITypes.Int32, 6, false); this.ConnectOutputToOutputTerminal(outputTunnel.OutputTerminals[0]); TestExecutionInstance executionInstance = CompileAndExecuteFunction(function); Assert.AreEqual("6", executionInstance.RuntimeServices.LastOutputValue); }
public void VisitConstructor(Constructor constructor) { NIType dependencyType = constructor.Type; if (dependencyType.IsValueClass() && dependencyType.GetFields().Count() > 0) { var structConstructorNode = new StructConstructorNode(_currentDiagram, dependencyType); _map.AddMapping(constructor, structConstructorNode); _map.MapTerminalsInOrder(constructor, structConstructorNode); return; } else if (dependencyType.IsUnion()) { int index = 0; { var input = (ConstructorTerminal)constructor.InputTerminals.First(); string fieldName = input.FieldName; int current = 0; foreach (NIType field in dependencyType.GetFields()) { if (field.GetName() == fieldName) { index = current; break; } ++current; } } var variantConstructorNode = new VariantConstructorNode(_currentDiagram, dependencyType, index); _map.AddMapping(constructor, variantConstructorNode); _map.MapTerminalsInOrder(constructor, variantConstructorNode); return; } else { Constant constant = Constant.CreateConstantWithDefaultValue(_currentDiagram, dependencyType); _map.AddMapping(constructor, constant); _map.MapTerminalsInOrder(constructor, constant); } }
public void VariantConstructorsWithValidFields_Execute_CorrectVariantValue() { DfirRoot function = DfirRoot.Create(); var variantConstructorNodeInt = new VariantConstructorNode(function.BlockDiagram, VariantType, 0); ConnectConstantToInputTerminal(variantConstructorNodeInt.InputTerminals[0], NITypes.Int32, 5, false); FunctionalNode inspectInt = ConnectInspectToOutputTerminal(variantConstructorNodeInt.VariantOutputTerminal); var variantConstructorNodeBool = new VariantConstructorNode(function.BlockDiagram, VariantType, 1); ConnectConstantToInputTerminal(variantConstructorNodeBool.InputTerminals[0], NITypes.Boolean, true, false); FunctionalNode inspectBool = ConnectInspectToOutputTerminal(variantConstructorNodeBool.VariantOutputTerminal); TestExecutionInstance executionInstance = CompileAndExecuteFunction(function); byte[] inspectIntValue = executionInstance.GetLastValueFromInspectNode(inspectInt); Assert.AreEqual((byte)0, inspectIntValue[0]); Assert.AreEqual(5, BitConverter.ToInt32(inspectIntValue, 1)); byte[] inspectBoolValue = executionInstance.GetLastValueFromInspectNode(inspectBool); Assert.AreEqual((byte)1, inspectBoolValue[0]); Assert.AreEqual((byte)1, inspectBoolValue[1]); }
public bool VisitVariantConstructorNode(VariantConstructorNode variantConstructorNode) { ValidateRequiredInputTerminal(variantConstructorNode.InputTerminals[0]); return(true); }
bool IDfirNodeVisitor <bool> .VisitVariantConstructorNode(VariantConstructorNode variantConstructorNode) { MarkTrueVariableOfTerminalConsumed(variantConstructorNode.InputTerminals[0]); MarkFacadeVariableOfTerminalLive(variantConstructorNode.OutputTerminals[0]); return(true); }
bool IDfirNodeVisitor <bool> .VisitVariantConstructorNode(VariantConstructorNode variantConstructorNode) { variantConstructorNode.UnifyNodeInputTerminalTypes(_typeUnificationResults); return(true); }