Ejemplo n.º 1
0
 /// <summary>
 /// Creates a new dependency edge between two nodes.
 /// </summary>
 /// <param name="origin">The dependent node.</param>
 /// <param name="target">The dependency node.</param>
 /// <param name="type">The type of dependency.</param>
 /// <param name="metadata">The metadata associated to the edge.</param>
 public DataFlowEdge(DataFlowNode <TContents> origin, DataFlowNode <TContents> target, DataDependencyType type, object metadata)
 {
     Origin   = origin;
     Target   = target;
     Type     = type;
     Metadata = metadata;
 }
Ejemplo n.º 2
0
        public void DisconnectNodeShouldRemoveEdge(DataDependencyType edgeType, bool removeSourceNode)
        {
            var variable = new DummyVariable("var");

            var graph = new DataFlowGraph <int>(IntArchitecture.Instance);

            var n1 = new DataFlowNode <int>(0, 0);

            n1.StackDependencies.Add(new DataDependency <int>());
            n1.VariableDependencies.Add(variable, new DataDependency <int>());

            var n2 = new DataFlowNode <int>(1, 1);

            graph.Nodes.AddRange(new[]
            {
                n1,
                n2
            });

            switch (edgeType)
            {
            case DataDependencyType.Stack:
                n1.StackDependencies[0].Add(new DataSource <int>(n2));
                break;

            case DataDependencyType.Variable:
                n1.VariableDependencies[variable].Add(new DataSource <int>(n2));
                break;

            default:
                throw new ArgumentOutOfRangeException(nameof(edgeType), edgeType, null);
            }

            if (removeSourceNode)
            {
                n1.Disconnect();
            }
            else
            {
                n2.Disconnect();
            }

            Assert.Empty(n1.StackDependencies[0]);
            Assert.Empty(n1.VariableDependencies[variable]);
            Assert.Empty(n2.GetDependants());
        }