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));
        }
Exemple #2
0
        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);
        }
Exemple #7
0
        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);
 }