コード例 #1
0
        public void Equals()
        {
            var edge1 = default(SEdge <int>);
            var edge2 = new SEdge <int>(0, 0);
            var edge3 = new SEdge <int>(1, 2);
            var edge4 = new SEdge <int>(1, 2);
            var edge5 = new SEdge <int>(2, 1);

            Assert.AreEqual(edge1, edge1);

            Assert.AreEqual(edge1, edge2);      // Is equatable
            Assert.AreEqual(edge2, edge1);      // Is equatable
            Assert.IsTrue(edge1.Equals(edge2)); // Is equatable
            Assert.IsTrue(edge2.Equals(edge1)); // Is equatable

            Assert.AreNotEqual(edge1, edge3);
            Assert.AreNotEqual(edge3, edge1);
            Assert.IsFalse(edge1.Equals(edge3));
            Assert.IsFalse(edge3.Equals(edge1));

            Assert.AreEqual(edge3, edge4);
            Assert.AreEqual(edge4, edge3);
            Assert.IsTrue(edge3.Equals(edge4));
            Assert.IsTrue(edge4.Equals(edge3));

            Assert.AreNotEqual(edge3, edge5);
            Assert.AreNotEqual(edge5, edge3);
            Assert.IsFalse(edge3.Equals(edge5));
            Assert.IsFalse(edge5.Equals(edge3));

            Assert.AreNotEqual(edge1, null);
            Assert.IsFalse(edge1.Equals(null));
        }
コード例 #2
0
        private static bool AddSingleEdge(SEdge <AssemblyDefinition> sEdge)
        {
            if (_edges.Contains(sEdge))
            {
                return(false);
            }

            string source = sEdge.Source.Name.Name;
            string target = sEdge.Target.Name.Name;

            if (_exclusions.Contains(source) || _exclusions.Contains(target))
            {
                return(false);
            }

            Trace.WriteLine(source + " => " + target);
            _edges.Add(sEdge);

            EnsureEdgeList(source);
            EnsureEdgeList(target);

            if (!_edgeList[source].Contains(target))
            {
                _edgeList[source].Add(target);
            }

            return(true);
        }
コード例 #3
0
        public void ObjectToString()
        {
            var edge1 = new SEdge <int>(1, 2);
            var edge2 = new SEdge <int>(2, 1);

            Assert.AreEqual("1 -> 2", edge1.ToString());
            Assert.AreEqual("2 -> 1", edge2.ToString());
        }
コード例 #4
0
        public void SEdgeTestEverything()
        {
            var e = new SEdge <int>(0, 1);

            Assert.AreEqual(0, e.Source);
            Assert.AreEqual(1, e.Target);
            Assert.AreEqual(String.Format("{0}->{1}", 0, 1), e.ToString());
        }
コード例 #5
0
ファイル: GraphCreation.cs プロジェクト: buptkang/QuickGraph
 public void EdgeArrayToAdjacencyGraph()
 {
     var edges = new SEdge<int>[] { 
         new SEdge<int>(1, 2), 
         new SEdge<int>(0, 1) 
     };
     var graph = edges.ToAdjacencyGraph<int, SEdge<int>>();
 }
コード例 #6
0
 public void EdgeArrayToAdjacencyGraph()
 {
     var edges = new SEdge <int>[] {
         new SEdge <int>(1, 2),
         new SEdge <int>(0, 1)
     };
     var graph = edges.ToAdjacencyGraph <int, SEdge <int> >();
 }
コード例 #7
0
        public void EqualsDefaultEdge_ReferenceTypeExtremities()
        {
            var edge1 = default(SEdge <TestVertex>);
            var edge2 = new SEdge <TestVertex>();

            Assert.AreEqual(edge1, edge2);
            Assert.AreEqual(edge2, edge1);
            Assert.IsTrue(edge1.Equals(edge2));
            Assert.IsTrue(edge2.Equals(edge1));
        }
コード例 #8
0
 public void RenderGraphWithGraphviz()
 {
     var edges = new SEdge<int>[] { 
         new SEdge<int>(1, 2), 
         new SEdge<int>(0, 1),
         new SEdge<int>(0, 3),
         new SEdge<int>(2, 3)
     };
     var graph = edges.ToAdjacencyGraph<int, SEdge<int>>();
     Console.WriteLine(graph.ToGraphviz());
 }
コード例 #9
0
        public void RenderGraphWithGraphviz()
        {
            var edges = new SEdge <int>[] {
                new SEdge <int>(1, 2),
                new SEdge <int>(0, 1),
                new SEdge <int>(0, 3),
                new SEdge <int>(2, 3)
            };
            var graph = edges.ToAdjacencyGraph <int, SEdge <int> >();

            Console.WriteLine(graph.ToGraphviz());
        }
コード例 #10
0
        private static void AddEdges(AssemblyDefinition asm, int depth)
        {
            //if(depth > MaxDepth)
            //    return;

            foreach (var dep in asm.Dependencies())
            {
                var sEdge = new SEdge<AssemblyDefinition>(asm, dep);
                if (!AddSingleEdge(sEdge))
                    continue;
                AddEdges(dep, depth + 1);
            }
        }
コード例 #11
0
        public void TransitiveReduction_ValueType()
        {
            // Test 1
            var edge12 = new SEdge <int>(1, 2);
            var edge13 = new SEdge <int>(1, 3);
            var edge14 = new SEdge <int>(1, 4);
            var edge15 = new SEdge <int>(1, 5);
            var edge24 = new SEdge <int>(2, 4);
            var edge34 = new SEdge <int>(3, 4);
            var edge35 = new SEdge <int>(3, 5);
            var edge45 = new SEdge <int>(4, 5);
            var graph  = new AdjacencyGraph <int, SEdge <int> >();

            graph.AddVerticesAndEdgeRange(new[]
            {
                edge12, edge13, edge14, edge15,
                edge24, edge34, edge35, edge45
            });

            BidirectionalGraph <int, SEdge <int> > result = graph.ComputeTransitiveReduction();

            AssertHasVertices(result, new[] { 1, 2, 3, 4, 5 });
            AssertHasEdges(
                result,
                new[] { edge12, edge13, edge24, edge34, edge45 });
            Assert.AreEqual(5, result.EdgeCount);

            // Test 2
            var edge01 = new SEdge <int>(0, 1);
            var edge02 = new SEdge <int>(0, 2);
            var edge03 = new SEdge <int>(0, 3);
            var edge23 = new SEdge <int>(2, 3);
            var edge25 = new SEdge <int>(2, 5);
            var edge65 = new SEdge <int>(6, 5);
            var edge67 = new SEdge <int>(6, 7);
            var edge74 = new SEdge <int>(7, 4);

            graph = new AdjacencyGraph <int, SEdge <int> >();
            graph.AddVerticesAndEdgeRange(new[]
            {
                edge01, edge02, edge03, edge23,
                edge24, edge25, edge35, edge45,
                edge65, edge67, edge74
            });

            result = graph.ComputeTransitiveReduction();
            AssertHasVertices(result, new[] { 0, 1, 2, 3, 4, 5, 6, 7 });
            AssertHasEdges(
                result,
                new[] { edge01, edge02, edge23, edge24, edge35, edge45, edge67, edge74 });
        }
コード例 #12
0
        private static void AddEdges(AssemblyDefinition asm, int depth)
        {
            //if(depth > MaxDepth)
            //    return;

            foreach (var dep in asm.Dependencies())
            {
                var sEdge = new SEdge <AssemblyDefinition>(asm, dep);
                if (!AddSingleEdge(sEdge))
                {
                    continue;
                }
                AddEdges(dep, depth + 1);
            }
        }
コード例 #13
0
ファイル: SEdgeTests.cs プロジェクト: leiszner/QuikGraph
        public void Equals()
        {
            var edge1 = default(SEdge <int>);
            var edge2 = new SEdge <int>(0, 0);
            var edge3 = new SEdge <int>(1, 2);
            var edge4 = new SEdge <int>(1, 2);
            var edge5 = new SEdge <int>(2, 1);

            Assert.AreEqual(edge1, edge1);
            Assert.AreEqual(edge1, edge2);  // Is equatable
            Assert.AreNotEqual(edge1, edge3);

            Assert.AreEqual(edge3, edge4);
            Assert.AreNotEqual(edge3, edge5);

            Assert.AreNotEqual(edge1, null);
        }
コード例 #14
0
        private void OnDfsBackEdge(SEdge <CurveVertex> e)
        {
            // e.Target --> e.Source is a back edge, that means there is a loop.
            var loop = new List <SEdge <CurveVertex> >();

            loop.Add(e);
            var edge = e;

            do
            {
                var prevEdge = _observer.VertexPredecessors[edge.Source];
                loop.Add(prevEdge);
                if (prevEdge.Source == e.Target)
                {
                    break;
                }
                edge = prevEdge;
            } while (true);
            _allLoops.Add(loop.ToArray());
        }
コード例 #15
0
        private static bool AddSingleEdge(SEdge<AssemblyDefinition> sEdge)
        {
            if (_edges.Contains(sEdge))
                return false;

            string source = sEdge.Source.Name.Name;
            string target = sEdge.Target.Name.Name;

            if(_exclusions.Contains(source) || _exclusions.Contains(target))
                return false;

            Trace.WriteLine(source + " => " + target);
            _edges.Add(sEdge);

            EnsureEdgeList(source);
            EnsureEdgeList(target);

            if (!_edgeList[source].Contains(target))
                _edgeList[source].Add(target);

            return true;
        }
コード例 #16
0
        public void OnBeforeSerialize()
        {
            if (isDirty)
            {
                isDirty = false;
                nodes.Clear();
                edges.Clear();

                // first pass, store node data
                foreach (GraphNode <N> graphNode in digraph.Nodes())
                {
                    SNode snode = new SNode(graphNode.Id, graphNode.Data);
                    if (!nodes.Contains(snode))
                    {
                        nodes.Add(snode);
                    }
                }

                // second pass, store edge data
                foreach (GraphEdge <E> graphEdge in digraph.Edges())
                {
                    SEdge sedge = new SEdge(graphEdge.FromId, graphEdge.ToId, graphEdge.Weight, (int)graphEdge.Directionality);
                    if (!edges.Contains(sedge))
                    {
                        edges.Add(sedge);
                    }
                }

                Type nType = typeof(N);
                Type eType = typeof(E);
                if (nodeTypeName == null || (!nodeTypeName.Equals(nType) || !edgeTypeName.Equals(eType)))
                {
                    nodeTypeName = nType.IsPrimitive || nType.Equals(typeof(string)) ? nType.Name.ToLower() : nType.Name;
                    edgeTypeName = eType.IsPrimitive || eType.Equals(typeof(string)) ? eType.Name.ToLower() : eType.Name;
                }
            }
        }
コード例 #17
0
        static void InitTriInfo(ref STriInfo[] pTriInfos, int[] pTriListIn, ref SMikkTSpaceContext context, int iNrTrianglesIn)
        {
            int f = 0, i = 0;

            for (f = 0; f < iNrTrianglesIn; ++f)
            {
                pTriInfos[f].faceNeighbors = new int[3];
                pTriInfos[f].AssignedGroup = new SGroup[3];

                for (i = 0; i < 3; ++i)
                {
                    pTriInfos[f].faceNeighbors[i] = -1;
                    pTriInfos[f].iFlag           |= GROUP_WITH_ANY;
                }
            }

            for (f = 0; f < iNrTrianglesIn; ++f)
            {
                Vector3 v1 = GetPosition(ref context, pTriListIn[f * 3]);
                Vector3 v2 = GetPosition(ref context, pTriListIn[f * 3 + 1]);
                Vector3 v3 = GetPosition(ref context, pTriListIn[f * 3 + 2]);
                Vector2 t1 = GetTexCoord(ref context, pTriListIn[f * 3]);
                Vector2 t2 = GetTexCoord(ref context, pTriListIn[f * 3 + 1]);
                Vector2 t3 = GetTexCoord(ref context, pTriListIn[f * 3 + 2]);

                Vector2 t2x = t2 - t1;
                Vector2 t3x = t3 - t1;

                Vector3 d1 = v2 - v1;
                Vector3 d2 = v3 - v1;

                float signedAreasSTx2 = t2x.X * t3x.Y - t2x.Y * t3x.X;

                Vector3 vOs = d1 * t3x.Y - d2 * t2x.Y;
                Vector3 vOt = d1 * -t3x.X - d2 * t2x.X;

                pTriInfos[f].iFlag |= (signedAreasSTx2 > 0 ? ORIENT_PRESERVING : 0);

                if (NotZero(signedAreasSTx2))
                {
                    float fAbsArea = Math.Abs(signedAreasSTx2);
                    float fLenOs   = vOs.Length;
                    float fLenOt   = vOt.Length;
                    float fS       = ((pTriInfos[f].iFlag & ORIENT_PRESERVING) == 0) ? -1.0f : 1.0f;
                    if (NotZero(fLenOs))
                    {
                        pTriInfos[f].vOs = fS / fLenOs * vOs;
                    }
                    if (NotZero(fLenOt))
                    {
                        pTriInfos[f].vOt = fS / fLenOt * vOt;
                    }

                    pTriInfos[f].fMagS = fLenOs / fAbsArea;
                    pTriInfos[f].fMagT = fLenOt / fAbsArea;

                    if (NotZero(pTriInfos[f].fMagS) && NotZero(pTriInfos[f].fMagT))
                    {
                        pTriInfos[f].iFlag &= (~GROUP_WITH_ANY);
                    }
                }
            }
            {
                SEdge[] pEdges = new SEdge[iNrTrianglesIn * 3];
                //build neighbors fast
                BuildNeighborsFast(ref pTriInfos, ref pEdges, pTriListIn, iNrTrianglesIn);
            }
        }
public void AddVerticesAndEdge328()
{
    UndirectedGraph<int, SEdge<int>> undirectedGraph;
    bool b;
    undirectedGraph = UndirectedGraphFactory.Create(false);
    SEdge<int> s0 = new SEdge<int>(357, 515);
    b = this.AddVerticesAndEdge<int, SEdge<int>>(undirectedGraph, s0);
    Assert.AreEqual<bool>(true, b);
    Assert.IsNotNull((object)undirectedGraph);
    Assert.IsNotNull(undirectedGraph.EdgeEqualityComparer);
    Assert.AreEqual<int>(4, undirectedGraph.EdgeCapacity);
    Assert.AreEqual<bool>(false, undirectedGraph.IsDirected);
    Assert.AreEqual<bool>(false, undirectedGraph.AllowParallelEdges);
    Assert.AreEqual<int>(1, undirectedGraph.EdgeCount);
}
コード例 #19
0
 private void OnDfsForwardOrCrossEdge(SEdge <CurveVertex> e)
 {
 }