public void SharedLoops()
        {
            List <GraphNode> nodes = new List <GraphNode>();

            nodes.Add(TestHelpers.BuildGraphNode(0, "in", inputPlugin.TypeName));
            nodes.Add(TestHelpers.BuildGraphNode(1, "loopStart", LoopStart.TypeName));
            nodes.Add(TestHelpers.BuildGraphNode(2, "pro"));
            nodes.Add(TestHelpers.BuildGraphNode(3, "loopEnd", LoopEnd.TypeName));
            nodes.Add(TestHelpers.BuildGraphNode(4, "end", "end"));

            List <NodeLinkInfo> links = new List <NodeLinkInfo>();

            links.Add(TestHelpers.MatchSlots(nodes[0], nodes[1], 0, 0));
            links.Add(TestHelpers.MatchSlots(nodes[1], nodes[2], 2, 0));
            links.Add(TestHelpers.MatchSlots(nodes[1], nodes[3], 0, 0));
            links.Add(TestHelpers.MatchSlots(nodes[2], nodes[3], 0, 2));
            links.Add(TestHelpers.MatchSlots(nodes[3], nodes[4], 0, 0));

            PipelineState.UpdateActiveGraph(nodes.ToArray(), links.ToArray());
            PipelineExecutor[] results = PipelineState.BuildPipesTestOnly();

            Assert.AreEqual(DataSize, results.Length);
            Assert.AreEqual(1, results[0].getLoops().Count);

            for (int i = 0; i < results.Length; i++)
            {
                for (int j = i + 1; j < results.Length; j++)
                {
                    Assert.AreNotSame(results[i], results[j]);
                }
            }
        }
コード例 #2
0
        public void SingleCount()
        {
            // Multi            | Single
            // S -> Process -> Sync -> Process -> End

            List <GraphNode> nodes = new List <GraphNode>();

            nodes.Add(TestHelpers.BuildGraphNode(0, "in", inputPlugin3.TypeName));
            nodes.Add(TestHelpers.BuildGraphNode(1, "pro"));
            nodes.Add(TestHelpers.BuildGraphNode(2, "sync", SyncNode.TypeName));
            nodes.Add(TestHelpers.BuildGraphNode(3, "pro"));
            nodes.Add(TestHelpers.BuildGraphNode(4, "end"));

            List <NodeLinkInfo> links = new List <NodeLinkInfo>();

            links.Add(TestHelpers.MatchSlots(nodes[0], nodes[1], 0, 0));
            links.Add(TestHelpers.MatchSlots(nodes[1], nodes[2], 0, 0));
            links.Add(TestHelpers.MatchSlots(nodes[2], nodes[3], 0, 0));
            links.Add(TestHelpers.MatchSlots(nodes[3], nodes[4], 0, 0));

            PipelineState.UpdateActiveGraph(nodes.ToArray(), links.ToArray());
            PipelineExecutor[] executor = PipelineState.BuildPipesTestOnly();
            SpecialNodeData    data     = PipelineState.SpecialNodeDataTestOnly;

            Assert.AreEqual(2, data.SyncInformation.NodeGroups.Count);
            Assert.AreEqual(3, data.SyncInformation.NodeGroups[0].pipes.Length);
            Assert.AreEqual(3, data.SyncInformation.NodeGroups[0].RequiredPipes);
            Assert.IsTrue(data.SyncInformation.NodeGroups[0].Input);
            Assert.AreEqual(1, data.SyncInformation.NodeGroups[1].pipes.Length);
            Assert.AreEqual(1, data.SyncInformation.NodeGroups[1].RequiredPipes);
            Assert.AreEqual(1, data.SyncInformation.SyncNodes[0].TriggeredPipelines.Length);
            Assert.AreEqual(3, data.SyncInformation.SyncNodes[0].ParallelismTestOnly);
            Assert.IsFalse(data.SyncInformation.NodeGroups[1].Input);
        }
コード例 #3
0
        public void ManyToMore()
        {
            // Multi            | Many
            // S -> Process -> Sync -> Process -> End
            //                  Input ----ᴧ

            List <GraphNode> nodes = new List <GraphNode>();

            nodes.Add(TestHelpers.BuildGraphNode(0, "input", inputPlugin.TypeName));
            nodes.Add(TestHelpers.BuildGraphNode(1, "process"));
            nodes.Add(TestHelpers.BuildGraphNode(2, "sync", SyncNode.TypeName));
            nodes.Add(TestHelpers.BuildGraphNode(3, "input", inputPlugin2.TypeName));
            nodes.Add(TestHelpers.BuildGraphNode(4, "process"));
            nodes.Add(TestHelpers.BuildGraphNode(5, "output"));

            List <NodeLinkInfo> links = new List <NodeLinkInfo>();

            links.Add(TestHelpers.MatchSlots(nodes[0], nodes[1], 0, 0));
            links.Add(TestHelpers.MatchSlots(nodes[1], nodes[2], 0, 0));
            links.Add(TestHelpers.MatchSlots(nodes[2], nodes[4], 0, 0));
            links.Add(TestHelpers.MatchSlots(nodes[3], nodes[4], 0, 1));
            links.Add(TestHelpers.MatchSlots(nodes[4], nodes[5], 0, 0));

            PipelineState.UpdateActiveGraph(nodes.ToArray(), links.ToArray());

            PipelineExecutor[] results = PipelineState.BuildPipesTestOnly();
            Assert.AreEqual(DataSize + (DataSize * 2), results.Length);

            SpecialNodeData nodeData = PipelineState.SpecialNodeDataTestOnly;

            Assert.AreEqual(1, nodeData.SyncInformation.SyncNodes.Length);
            Assert.AreEqual(inputPlugin2.InputDataQuantity(""),
                            nodeData.SyncInformation.SyncNodes[0].TriggeredPipelines.Length);
        }
コード例 #4
0
        public void ManyToManyWithInput()
        {
            // Multi            | Multi
            //         ᴧ------------------v
            // S -> Process -> Sync -> Process -> End
            //                  Input ----ᴧ

            List <GraphNode> nodes = new List <GraphNode>();

            nodes.Add(TestHelpers.BuildGraphNode(0, "input", inputPlugin.TypeName));
            nodes.Add(TestHelpers.BuildGraphNode(1, "process"));
            nodes.Add(TestHelpers.BuildGraphNode(2, "sync", SyncNode.TypeName));
            nodes.Add(TestHelpers.BuildGraphNode(3, "input", inputPlugin2.TypeName));
            nodes.Add(TestHelpers.BuildGraphNode(4, "process"));
            nodes.Add(TestHelpers.BuildGraphNode(5, "output"));

            List <NodeLinkInfo> links = new List <NodeLinkInfo>();

            links.Add(TestHelpers.MatchSlots(nodes[0], nodes[1], 0, 0));
            links.Add(TestHelpers.MatchSlots(nodes[1], nodes[2], 0, 0));
            links.Add(TestHelpers.MatchSlots(nodes[1], nodes[4], 0, 2));
            links.Add(TestHelpers.MatchSlots(nodes[2], nodes[4], 0, 0));
            links.Add(TestHelpers.MatchSlots(nodes[3], nodes[4], 0, 1));
            links.Add(TestHelpers.MatchSlots(nodes[4], nodes[5], 0, 0));

            PipelineState.UpdateActiveGraph(nodes.ToArray(), links.ToArray());
            Assert.Throws <PipelineException>(() => PipelineState.BuildPipesTestOnly());

            SpecialNodeData nodeData = PipelineState.SpecialNodeDataTestOnly;

            Assert.AreEqual(1, nodeData.SyncInformation.SyncNodes.Length);
        }
コード例 #5
0
        public void BasicBuild()
        {
            List <GraphNode> nodes = new List <GraphNode>();

            nodes.Add(TestHelpers.BuildGraphNode(0, "input", inputPlugin.TypeName));
            nodes.Add(TestHelpers.BuildGraphNode(1, "process"));
            nodes.Add(TestHelpers.BuildGraphNode(2, "output"));

            List <NodeLinkInfo> links = new List <NodeLinkInfo>();

            links.Add(TestHelpers.MatchSlots(nodes[0], nodes[1], 0, 0));
            links.Add(TestHelpers.MatchSlots(nodes[1], nodes[2], 0, 0));

            PipelineState.UpdateActiveGraph(nodes.ToArray(), links.ToArray());
            PipelineExecutor[] results = PipelineState.BuildPipesTestOnly();

            Assert.AreEqual(DataSize, results.Length);
        }
コード例 #6
0
        public void ErrorInput()
        {
            List <GraphNode> nodes = new List <GraphNode>();

            nodes.Add(TestHelpers.BuildGraphNode(0, "input", inputPlugin.TypeName));
            nodes.Add(TestHelpers.BuildGraphNode(1, "input", ErrorPlugin.TypeName));
            nodes.Add(TestHelpers.BuildGraphNode(2, "process"));
            nodes.Add(TestHelpers.BuildGraphNode(3, "output"));

            List <NodeLinkInfo> links = new List <NodeLinkInfo>();

            links.Add(TestHelpers.MatchSlots(nodes[0], nodes[2], 0, 0));
            links.Add(TestHelpers.MatchSlots(nodes[1], nodes[2], 0, 1));
            links.Add(TestHelpers.MatchSlots(nodes[2], nodes[3], 0, 0));

            PipelineState.UpdateActiveGraph(nodes.ToArray(), links.ToArray());
            Assert.Throws <NodeException>(() => PipelineState.BuildPipesTestOnly());
        }
コード例 #7
0
        public void PrematureInputEnd()
        {
            List <GraphNode> nodes = new List <GraphNode>();

            nodes.Add(TestHelpers.BuildGraphNode(0, "input", EarlyData.TypeName));
            nodes.Add(TestHelpers.BuildGraphNode(1, "input", LateData.TypeName));
            nodes.Add(TestHelpers.BuildGraphNode(2, "process"));
            nodes.Add(TestHelpers.BuildGraphNode(3, "output"));

            List <NodeLinkInfo> links = new List <NodeLinkInfo>();

            links.Add(TestHelpers.MatchSlots(nodes[0], nodes[2], 0, 0));
            links.Add(TestHelpers.MatchSlots(nodes[1], nodes[2], 0, 1));
            links.Add(TestHelpers.MatchSlots(nodes[2], nodes[3], 0, 0));

            PipelineState.UpdateActiveGraph(nodes.ToArray(), links.ToArray());
            Assert.Throws <InvalidDataException>(() => PipelineState.BuildPipesTestOnly());
        }
コード例 #8
0
        public void OverrideInput()
        {
            List <GraphNode> nodes = new List <GraphNode>();

            nodes.Add(TestHelpers.BuildGraphNode(0, "input", oneInput.TypeName, "Override"));
            nodes.Add(TestHelpers.BuildGraphNode(1, "process"));
            nodes.Add(TestHelpers.BuildGraphNode(2, "output"));

            List <NodeLinkInfo> links = new List <NodeLinkInfo>();

            links.Add(TestHelpers.MatchSlots(nodes[0], nodes[1], 0, 0));
            links.Add(TestHelpers.MatchSlots(nodes[1], nodes[2], 0, 0));

            PipelineState.UpdateActiveGraph(nodes.ToArray(), links.ToArray());
            PipelineExecutor[] results = PipelineState.BuildPipesTestOnly();

            Assert.AreEqual(1, results.Length);
            Assert.AreEqual("Override", oneInput.InputDataQuantityPath);
            Assert.AreEqual("Override", oneInput.InputRetrieveDataPath);
        }
コード例 #9
0
        public void ManyToSingleToMany()
        {
            // Many             | Single           | Many
            // S -> Process -> Sync -> Process -> Sync -> Process -> End
            //        v-------------------------------------ᴧ

            List <GraphNode> nodes = new List <GraphNode>();

            nodes.Add(TestHelpers.BuildGraphNode(0, "input", inputPlugin.TypeName));
            nodes.Add(TestHelpers.BuildGraphNode(1, "process"));
            nodes.Add(TestHelpers.BuildGraphNode(2, "sync", SyncNode.TypeName));
            nodes.Add(TestHelpers.BuildGraphNode(3, "process"));
            nodes.Add(TestHelpers.BuildGraphNode(4, "sync", SyncNode.TypeName));
            nodes.Add(TestHelpers.BuildGraphNode(5, "process"));
            nodes.Add(TestHelpers.BuildGraphNode(6, "output"));

            List <NodeLinkInfo> links = new List <NodeLinkInfo>();

            links.Add(TestHelpers.MatchSlots(nodes[0], nodes[1], 0, 0));
            links.Add(TestHelpers.MatchSlots(nodes[1], nodes[2], 0, 0));
            links.Add(TestHelpers.MatchSlots(nodes[1], nodes[5], 1, 1));
            links.Add(TestHelpers.MatchSlots(nodes[2], nodes[3], 0, 0));
            links.Add(TestHelpers.MatchSlots(nodes[3], nodes[4], 0, 0));
            links.Add(TestHelpers.MatchSlots(nodes[4], nodes[5], 0, 0));
            links.Add(TestHelpers.MatchSlots(nodes[5], nodes[6], 0, 0));

            PipelineState.UpdateActiveGraph(nodes.ToArray(), links.ToArray());

            PipelineExecutor[] results = PipelineState.BuildPipesTestOnly();
            Assert.AreEqual(DataSize + 1, results.Length);

            SpecialNodeData nodeData = PipelineState.SpecialNodeDataTestOnly;

            Assert.AreEqual(2, nodeData.SyncInformation.SyncNodes.Length);
            Assert.AreEqual(3, nodeData.SyncInformation.NodeGroups.Count);

            Assert.AreSame(nodeData.SyncInformation.NodeGroups[0].pipes,
                           nodeData.SyncInformation.SyncNodes[1].TriggeredPipelines);
        }