コード例 #1
0
        public void TestCanNotConnectTwoInputSlotsOnBaseMaterialGraph()
        {
            var graph = new TestNodeGraph();

            var inputNode = new TestableNode();

            graph.AddNode(inputNode);

            var inputNode2 = new TestableNode();

            graph.AddNode(inputNode2);

            Assert.AreEqual(2, graph.GetNodes <INode>().Count());

            var createdEdge = graph.Connect(inputNode.GetSlotReference(TestableNode.Input0), inputNode2.GetSlotReference(TestableNode.Input0));

            Assert.IsNull(createdEdge);
            Assert.AreEqual(0, graph.GetEdges().Count);
        }
コード例 #2
0
        public void TestRemovingNodeRemovesConectedEdgesOnBaseMaterialGraph()
        {
            var graph      = new TestNodeGraph();
            var outputNode = new TestableNode();

            graph.AddNode(outputNode);

            var inputNode = new TestableNode();

            graph.AddNode(inputNode);

            Assert.AreEqual(2, graph.GetNodes <INode>().Count());
            graph.Connect(outputNode.GetSlotReference(TestableNode.Output0), inputNode.GetSlotReference(TestableNode.Input0));
            Assert.AreEqual(1, graph.GetEdges().Count);

            graph.RemoveNode(graph.GetNodes <INode>().FirstOrDefault());
            Assert.AreEqual(1, graph.GetNodes <INode>().Count());
            Assert.AreEqual(0, graph.GetEdges().Count);
        }
コード例 #3
0
        public void TestCanGetEdgesOnBaseMaterialGraphFromSlotReference()
        {
            var graph      = new TestNodeGraph();
            var outputNode = new TestableNode();

            graph.AddNode(outputNode);

            var inputNode = new TestableNode();

            graph.AddNode(inputNode);

            Assert.AreEqual(2, graph.GetNodes <INode>().Count());
            graph.Connect(outputNode.GetSlotReference(TestableNode.Output0), inputNode.GetSlotReference(TestableNode.Input0));
            Assert.AreEqual(1, graph.GetEdges().Count);

            Assert.AreEqual(1, graph.GetEdges(inputNode.GetSlotReference(TestableNode.Input0)).Count());
            Assert.AreEqual(1, graph.GetEdges(outputNode.GetSlotReference(TestableNode.Output0)).Count());
            Assert.Throws <ArgumentException>(() => outputNode.GetSlotReference(666));
        }
コード例 #4
0
        public void TestCanRemoveSlotFromTestNode()
        {
            var graph  = new TestNodeGraph();
            var node   = new TestNode();
            var output = node.CreateOutputSlot <TestSlot>("output").SetValueType(typeof(Vector3));
            var input  = node.CreateInputSlot <TestSlot>("input").SetValueType(typeof(Vector3));

            graph.AddNode(node);

            Assert.AreEqual(2, node.GetSlots <ISlot>().Count());
            Assert.AreEqual(1, node.GetInputSlots <ISlot>().Count());
            Assert.AreEqual(1, node.GetOutputSlots <ISlot>().Count());

            node.RemoveSlot(input.id);

            Assert.AreEqual(1, node.GetSlots <ISlot>().Count());
            Assert.AreEqual(0, node.GetInputSlots <ISlot>().Count());
            Assert.AreEqual(1, node.GetOutputSlots <ISlot>().Count());
        }
コード例 #5
0
        public void TestCanNotAddDuplicateSlotToTestNode()
        {
            var graph = new TestNodeGraph();
            var node  = new TestNode();
            var slot0 = new TestSlot(typeof(Vector3), SlotType.Output, 0);
            var slot1 = new TestSlot(typeof(Vector3), SlotType.Output, 0);

            node.AddSlot(slot0);
            node.AddSlot(slot1);
            node.name = "Test Node";
            graph.AddNode(node);

            Assert.AreEqual(1, graph.GetNodes <INode>().Count());
            var found = graph.GetNodes <INode>().FirstOrDefault();

            Assert.AreEqual(0, found.GetInputSlots <ISlot>().Count());
            Assert.AreEqual(1, found.GetOutputSlots <ISlot>().Count());
            Assert.AreEqual(1, found.GetSlots <ISlot>().Count());
        }
コード例 #6
0
        public void TestCanAddSlotToTestNode()
        {
            var graph  = new TestNodeGraph();
            var node   = new TestNode();
            var output = node.CreateOutputSlot <TestSlot>("output").SetValueType(typeof(Vector3));
            var input  = node.CreateInputSlot <TestSlot>("input").SetValueType(typeof(Vector3));

            node.name = "Test Node";
            graph.AddNode(node);

            Assert.AreEqual(1, graph.GetNodes <INode>().Count());
            var found = graph.GetNodes <INode>().FirstOrDefault();

            Assert.AreEqual(1, found.GetInputSlots <ISlot>().Count());
            Assert.AreEqual(input.id, found.GetInputSlots <ISlot>().FirstOrDefault().id);
            Assert.AreEqual(1, found.GetOutputSlots <ISlot>().Count());
            Assert.AreEqual(output.id, found.GetOutputSlots <ISlot>().FirstOrDefault().id);
            Assert.AreEqual(2, found.GetSlots <ISlot>().Count());
        }
コード例 #7
0
        public void TestCanNotConnectToNullSlot()
        {
            var graph = new TestNodeGraph();

            var outputNode = new TestableNode();

            graph.AddNode(outputNode);

            var inputNode = new TestNode();

            graph.AddNode(inputNode);

            Assert.AreEqual(2, graph.GetNodes <INode>().Count());

            var createdEdge2 = graph.Connect(outputNode.GetSlotReference(TestableNode.Output0), new SlotReference(Guid.NewGuid(), 666));

            Assert.AreEqual(0, graph.GetEdges().Count);
            Assert.IsNull(createdEdge2);
        }
コード例 #8
0
        public void TestRemovingElementsFromBaseMaterialGraph()
        {
            var graph      = new TestNodeGraph();
            var outputNode = new TestableNode();

            graph.AddNode(outputNode);

            var inputNode = new TestableNode();

            graph.AddNode(inputNode);

            Assert.AreEqual(2, graph.GetNodes <INode>().Count());
            graph.Connect(outputNode.GetSlotReference(TestableNode.Output0), inputNode.GetSlotReference(TestableNode.Input0));
            Assert.AreEqual(1, graph.GetEdges().Count);

            graph.RemoveElements(graph.GetNodes <INode>(), graph.GetEdges());
            Assert.AreEqual(0, graph.GetNodes <INode>().Count());
            Assert.AreEqual(0, graph.GetEdges().Count);
        }
コード例 #9
0
        public void TestRemovingSlotRemovesConnectedEdges()
        {
            var graph = new TestNodeGraph();

            var outputNode = new TestableNode();

            graph.AddNode(outputNode);

            var inputNode = new TestableNode();

            graph.AddNode(inputNode);

            Assert.AreEqual(2, graph.GetNodes <INode>().Count());

            graph.Connect(outputNode.GetSlotReference(TestableNode.Output0), inputNode.GetSlotReference(TestableNode.Input0));
            Assert.AreEqual(1, graph.GetEdges().Count);

            outputNode.RemoveSlot(TestableNode.Output0);
            Assert.AreEqual(0, graph.GetEdges().Count);
        }
コード例 #10
0
        public void TestCanConnectAndTraverseThreeNodesOnBaseMaterialGraph()
        {
            var graph = new TestNodeGraph();

            var outputNode = new TestableNode();

            graph.AddNode(outputNode);

            var middleNode = new TestableNode();

            graph.AddNode(middleNode);

            var inputNode = new TestableNode();

            graph.AddNode(inputNode);

            Assert.AreEqual(3, graph.GetNodes <INode>().Count());

            graph.Connect(outputNode.GetSlotReference(TestableNode.Output0), middleNode.GetSlotReference(TestableNode.Input0));
            Assert.AreEqual(1, graph.GetEdges().Count);

            graph.Connect(middleNode.GetSlotReference(TestableNode.Output0), inputNode.GetSlotReference(TestableNode.Input0));
            Assert.AreEqual(2, graph.GetEdges().Count);

            var edgesOnMiddleNode = NodeUtils.GetAllEdges(middleNode);

            Assert.AreEqual(2, edgesOnMiddleNode.Count());

            List <INode> result = new List <INode>();

            NodeUtils.DepthFirstCollectNodesFromNode(result, inputNode);
            Assert.AreEqual(3, result.Count);

            result.Clear();
            NodeUtils.DepthFirstCollectNodesFromNode(result, inputNode, NodeUtils.IncludeSelf.Exclude);
            Assert.AreEqual(2, result.Count);

            result.Clear();
            NodeUtils.DepthFirstCollectNodesFromNode(result, null);
            Assert.AreEqual(0, result.Count);
        }
コード例 #11
0
        public void TestCanRemoveSlotsWithNonMathingNameFromTestNode()
        {
            var graph = new TestNodeGraph();
            var node  = new TestableNode();

            graph.AddNode(node);

            Assert.AreEqual(6, node.GetSlots <ISlot>().Count());
            Assert.AreEqual(3, node.GetInputSlots <ISlot>().Count());
            Assert.AreEqual(3, node.GetOutputSlots <ISlot>().Count());

            node.RemoveSlotsNameNotMatching(new[] { TestableNode.Input1 });

            Assert.AreEqual(1, node.GetSlots <ISlot>().Count());
            Assert.AreEqual(1, node.GetInputSlots <ISlot>().Count());
            Assert.AreEqual(0, node.GetOutputSlots <ISlot>().Count());

            Assert.IsNull(node.FindInputSlot <ISlot>(TestableNode.Input0));
            Assert.IsNotNull(node.FindInputSlot <ISlot>(TestableNode.Input1));
            Assert.IsNull(node.FindInputSlot <ISlot>(TestableNode.Input2));
        }
コード例 #12
0
        public void UpdatesEdgeCacheOnEdgeRemove()
        {
            TestNodeGraph graph = new TestNodeGraph();

            var node0 = new TestNode();
            var node1 = new TestNode();

            graph.AddNode(node0);
            graph.AddNode(node1);

            var outSlot = node0.CreateOutputSlot <ValueSlot <Vector3> >("Out");
            var inSlot  = node1.CreateInputSlot <ValueSlot <Vector3> >("In");

            var edge = graph.Connect(outSlot.slotReference, inSlot.slotReference);

            Assert.AreEqual(1, graph.GetEdges().Count);

            graph.RemoveEdge(edge);
            Assert.IsFalse(inSlot.GetSlotConnectionCache().Any());
            Assert.IsFalse(outSlot.GetSlotConnectionCache().Any());
        }
コード例 #13
0
        public void TestCyclicConnectionsAreNotAllowedOnGraph()
        {
            var graph = new TestNodeGraph();

            var nodeA = new TestableNode();

            graph.AddNode(nodeA);

            var nodeB = new TestableNode();

            graph.AddNode(nodeB);

            Assert.AreEqual(2, graph.GetNodes <INode>().Count());
            graph.Connect(nodeA.GetSlotReference(TestableNode.Output0), nodeB.GetSlotReference(TestableNode.Input0));
            Assert.AreEqual(1, graph.GetEdges().Count);

            var edge = graph.Connect(nodeB.GetSlotReference(TestableNode.Output0), nodeA.GetSlotReference(TestableNode.Input0));

            Assert.IsNull(edge);
            Assert.AreEqual(1, graph.GetEdges().Count);
        }
コード例 #14
0
        public void TestGetInputsWithNoConnection()
        {
            var graph = new TestNodeGraph();

            var outputNode = new TestableNode();

            graph.AddNode(outputNode);

            var inputNode = new TestableNode();

            graph.AddNode(inputNode);

            Assert.AreEqual(2, graph.GetNodes <INode>().Count());
            graph.Connect(outputNode.GetSlotReference(TestableNode.Output0), inputNode.GetSlotReference(TestableNode.Input0));
            Assert.AreEqual(1, graph.GetEdges().Count);

            var slots = inputNode.GetInputsWithNoConnection();

            Assert.AreEqual(2, slots.Count());
            CollectionAssert.AreEqual(new[] { TestableNode.Input1, TestableNode.Input2 }, slots.Select(x => x.id));
        }
コード例 #15
0
        public void TestCanUpdateSlotPriority()
        {
            var graph = new TestNodeGraph();
            var node  = new TestNode();

            node.CreateOutputSlot <TestSlot>("output").SetValueType(typeof(Vector3)).SetPriority(0);
            node.name = "Test Node";
            graph.AddNode(node);

            Assert.AreEqual(1, graph.GetNodes <INode>().Count());
            var found = graph.GetNodes <INode>().FirstOrDefault();

            Assert.AreEqual(0, found.GetInputSlots <ISlot>().Count());
            Assert.AreEqual(1, found.GetOutputSlots <ISlot>().Count());
            Assert.AreEqual(1, found.GetSlots <ISlot>().Count());

            var slot = found.GetOutputSlots <ISlot>().FirstOrDefault();

            Assert.AreEqual(0, slot.priority);
            slot.priority = 2;
            Assert.AreEqual(2, slot.priority);
        }
コード例 #16
0
        public void TestCanUpdateDisplaynameByReaddingSlotToTestNode()
        {
            var graph = new TestNodeGraph();
            var node  = new TestNode();
            var slot0 = new TestSlot(typeof(Vector3), SlotType.Output, 0).SetDisplayName("output");
            var slot1 = new TestSlot(typeof(Vector3), SlotType.Output, 0).SetDisplayName("output_updated");

            node.AddSlot(slot0);
            node.AddSlot(slot1);
            node.name = "Test Node";
            graph.AddNode(node);

            Assert.AreEqual(1, graph.GetNodes <INode>().Count());
            var found = graph.GetNodes <INode>().FirstOrDefault();

            Assert.AreEqual(0, found.GetInputSlots <ISlot>().Count());
            Assert.AreEqual(1, found.GetOutputSlots <ISlot>().Count());
            Assert.AreEqual(1, found.GetSlots <ISlot>().Count());

            var slot = found.GetOutputSlots <ISlot>().FirstOrDefault();

            Assert.AreEqual("output_updated (Vector3)", slot.displayName);
        }
コード例 #17
0
        public void TestCanUpdateSlotPriorityByReaddingSlotToTestNode()
        {
            var graph = new TestNodeGraph();
            var node  = new TestNode();
            var slot0 = new TestSlot(typeof(Vector3), SlotType.Output, 0);
            var slot1 = new TestSlot(typeof(Vector3), SlotType.Output, 0).SetPriority(5);

            node.AddSlot(slot0);
            node.AddSlot(slot1);
            node.name = "Test Node";
            graph.AddNode(node);

            Assert.AreEqual(1, graph.GetNodes <INode>().Count());
            var found = graph.GetNodes <INode>().FirstOrDefault();

            Assert.AreEqual(0, found.GetInputSlots <ISlot>().Count());
            Assert.AreEqual(1, found.GetOutputSlots <ISlot>().Count());
            Assert.AreEqual(1, found.GetSlots <ISlot>().Count());

            var slot = found.GetOutputSlots <ISlot>().FirstOrDefault();

            Assert.AreEqual(5, slot.priority);
        }