예제 #1
0
 private void AddProjectReferenceIntoDAG(DAG <IDependencyNode> dag, IDependencyNode p, IDependencyNode project)
 {
     if (!dag.Contains(p))
     {
         AddIntoDAG(p, dag);
     }
     dag.AddMergePath(project, p);
 }
예제 #2
0
 private void AddProjectReferenceIntoDAG(DAG<IDependencyNode> dag, IDependencyNode p, IDependencyNode project)
 {
     if (!dag.Contains(p))
     {
         AddIntoDAG(p, dag);
     }
     dag.AddMergePath(project, p);
 }
예제 #3
0
파일: DAGFacts.cs 프로젝트: xiaoyvr/yam
        public void should_deal_with_merge_path()
        {
            var graph = new DAG<int>();
            const int v1 = 1;
            const int v2 = 2;
            const int v3 = 3;
            graph.AddMergePath(v1, v2);
            graph.AddPath(v1, v3);
            graph.AddMergePath(v2, v3);

            graph.Simplify();

            Assert.Null(graph.Get(v2));
            Assert.Equal(0, graph.Get(v1).Incommings.Count);
            Assert.Equal(1, graph.Get(v1).Outcommings.Count);
            Assert.Equal(1, graph.Get(v3).Incommings.Count);
            Assert.Equal(0, graph.Get(v3).Outcommings.Count);
        }
예제 #4
0
        private void AddReferenceIntoDAG(IDependencyNode child, DAG <IDependencyNode> dag, IDependencyNode parent)
        {
            var project = child as ProjectNode;

            if (project != null)
            {
                if (!dag.Contains(project))
                {
                    AddIntoDAG(project, dag);
                }
                dag.AddPath(parent, child);
            }
            var assemblyReference = child as AssemblyNode;

            if (assemblyReference != null)
            {
                dag.AddMergePath(parent, child);
            }
        }
예제 #5
0
파일: DAGFacts.cs 프로젝트: xiaoyvr/yam
        public void should_simplify_more_complex()
        {
            var graph = new DAG<string>();

            const string securityCore = "security-core";
            const string securityCoreWeb = "security-core-web";
            const string extensions = "extensions";
            const string container = "container";
            const string containerApi = "container-api";
            const string web = "web";
            const string modelApi = "model-api";
            const string loggingApi = "logging-api";
            const string loggingSpi = "logging-spi";
            const string logging = "logging";
            const string persistenceApi = "persistence-api";
            const string templateApi = "template-api";
            const string persistenceSpi = "persistence-spi";
            const string template = "template";
            const string templateSpi = "template-spi";

            graph.AddPath(securityCore, extensions);
            graph.AddPath(securityCoreWeb, container);
            graph.AddPath(securityCoreWeb, containerApi);
            graph.AddPath(securityCoreWeb, extensions);
            graph.AddPath(securityCoreWeb, web);

            graph.AddMergePath(container, containerApi);
            graph.AddMergePath(container, extensions);
            graph.AddMergePath(container, loggingApi);

            graph.AddMergePath(containerApi, extensions);

            graph.AddMergePath(loggingApi, extensions);
            graph.AddMergePath(loggingApi, modelApi);

            graph.AddMergePath(modelApi, extensions);

            graph.AddMergePath(web, containerApi);
            graph.AddMergePath(web, container);
            graph.AddMergePath(web, extensions);
            graph.AddMergePath(web, loggingApi);
            graph.AddMergePath(web, loggingSpi);
            graph.AddMergePath(web, logging);
            graph.AddMergePath(web, modelApi);
            graph.AddMergePath(web, persistenceApi);
            graph.AddMergePath(web, templateSpi);
            graph.AddMergePath(web, template);

            graph.AddMergePath(loggingSpi, containerApi);
            graph.AddMergePath(loggingSpi, container);
            graph.AddMergePath(loggingSpi, extensions);
            graph.AddMergePath(loggingSpi, loggingApi);
            graph.AddMergePath(loggingSpi, modelApi);
            graph.AddMergePath(loggingSpi, persistenceApi);
            graph.AddMergePath(loggingSpi, persistenceSpi);

            graph.AddMergePath(persistenceApi, extensions);
            graph.AddMergePath(persistenceApi, modelApi);

            graph.AddMergePath(persistenceSpi, containerApi);
            graph.AddMergePath(persistenceSpi, extensions);
            graph.AddMergePath(persistenceSpi, modelApi);
            graph.AddMergePath(persistenceSpi, persistenceApi);

            graph.AddMergePath(logging, containerApi);
            graph.AddMergePath(logging, container);
            graph.AddMergePath(logging, extensions);
            graph.AddMergePath(logging, loggingApi);
            graph.AddMergePath(logging, loggingSpi);
            graph.AddMergePath(logging, modelApi);
            graph.AddMergePath(logging, persistenceApi);
            graph.AddMergePath(logging, persistenceSpi);
            graph.AddMergePath(logging, templateApi);
            graph.AddMergePath(logging, template);

            graph.AddMergePath(templateApi, extensions);

            graph.AddMergePath(template, containerApi);
            graph.AddMergePath(template, container);
            graph.AddMergePath(template, extensions);
            graph.AddMergePath(template, templateApi);
            graph.AddMergePath(template, templateSpi);

            graph.AddMergePath(templateSpi, container);
            graph.AddMergePath(templateSpi, extensions);
            graph.AddMergePath(templateSpi, templateApi);

            graph.Simplify();

            Assert.NotNull(graph.Get(securityCore));
            Assert.NotNull(graph.Get(securityCoreWeb));
            Assert.NotNull(graph.Get(web));
            var vertexes = graph.Out();
            Assert.Equal(3, vertexes.Length);
            Assert.Equal(web, vertexes[0]);
            Assert.Equal(securityCore, vertexes[1]);
            Assert.Equal(securityCoreWeb, vertexes[2]);
        }
예제 #6
0
파일: DAGFacts.cs 프로젝트: xiaoyvr/yam
        public void should_simplify_complex()
        {
            var graph = new DAG<int>();
            const int v1 = 1;
            const int v2 = 2;
            const int v3 = 3;
            const int v4 = 4;
            graph.AddPath(v1, v2);
            graph.AddPath(v1, v3);
            graph.AddPath(v1, v4);
            graph.AddMergePath(v3, v2);
            graph.AddPath(v3, v4);
            graph.AddPath(v4, v2);

            graph.Simplify();

            Assert.NotNull(graph.Get(v2));
            Assert.Equal(3, graph.Get(v2).Incommings.Count);
            Assert.Equal(0, graph.Get(v2).Outcommings.Count);
            Assert.Equal(1, graph.Get(v3).Incommings.Count);
            Assert.Equal(2, graph.Get(v3).Outcommings.Count);
        }
예제 #7
0
파일: DAGFacts.cs 프로젝트: xiaoyvr/yam
 public void should_simplify_all_virtual()
 {
     var graph = new DAG<string>();
     const string extensions = "extensions";
     const string modelApi = "model-api";
     const string persistenceApi = "persistence-api";
     const string containerApi = "container-api";
     graph.AddMergePath(modelApi, extensions);
     graph.AddMergePath(persistenceApi, extensions);
     graph.AddMergePath(persistenceApi, modelApi);
     graph.AddMergePath(containerApi, extensions);
     graph.Simplify();
     var vertexes = graph.Out();
     Assert.Equal(2, vertexes.Length);
     Assert.Equal(persistenceApi, vertexes[0]);
     Assert.Equal(containerApi, vertexes[1]);
 }
예제 #8
0
파일: DAGFacts.cs 프로젝트: xiaoyvr/yam
        public void should_simplify()
        {
            var graph = new DAG<int>();
            const int v1 = 1;
            const int v2 = 2;
            const int v3 = 3;
            const int v4 = 4;
            graph.AddPath(v1, v2);
            graph.AddPath(v1, v3);
            graph.AddPath(v1, v4);
            graph.AddMergePath(v3, v2);
            graph.AddPath(v2, v4);
            graph.AddPath(v3, v4);

            graph.Simplify();

            Assert.Null(graph.Get(v2));
            var incommings = graph.Get(v3).Incommings;
            Assert.Equal(1, incommings.Count);
            Assert.Equal(v1, incommings.First().Data);
            var outcommings = graph.Get(v3).Outcommings;
            Assert.Equal(1, outcommings.Count);
            Assert.Equal(v4, outcommings.First().Data);
        }
예제 #9
0
파일: DAGFacts.cs 프로젝트: xiaoyvr/yam
 public void should_not_merge_virtual_if_will_create_cycle()
 {
     var graph = new DAG<int>();
     const int v1 = 1;
     const int v2 = 2;
     const int v3 = 3;
     graph.AddMergePath(v3, v1);
     graph.AddPath(v3, v2);
     graph.AddPath(v2, v1);
     graph.Simplify();
     var ints = graph.Out();
     Assert.Equal(1, ints[0]);
     Assert.Equal(2, ints[1]);
     Assert.Equal(3, ints[2]);
 }
예제 #10
0
 private void AddReferenceIntoDAG(IDependencyNode child, DAG<IDependencyNode> dag, IDependencyNode parent)
 {
     var project = child as ProjectNode;
     if (project != null)
     {
         if (!dag.Contains(project))
         {
             AddIntoDAG(project, dag);
         }
         dag.AddPath(parent, child);
     }
     var assemblyReference = child as AssemblyNode;
     if (assemblyReference != null)
     {
         dag.AddMergePath(parent, child);
     }
 }