Exemplo n.º 1
0
        public void ComputeVertexInvariants()
        {
            var layerInvariants = new Dictionary <int, int[]>();

            for (int i = 0; i < this.nodes.Count; i++)
            {
                DAG.Node node = this.nodes[i];
                int      j    = node.vertexIndex;
                int[]    layerInvariantsJ;
                if (layerInvariants.ContainsKey(j))
                {
                    layerInvariantsJ = layerInvariants[j];
                }
                else
                {
                    layerInvariantsJ   = new int[this.layers.Count];
                    layerInvariants[j] = layerInvariantsJ;
                }
                layerInvariantsJ[node.layer] = invariants.GetNodeInvariant(i);
            }

            var invariantLists = new List <InvariantArray>();

            foreach (var i in layerInvariants.Keys)
            {
                InvariantArray invArr = new InvariantArray(layerInvariants[i], i);
                invariantLists.Add(invArr);
            }
            invariantLists.Sort();

            int order = 1;
            int first = invariantLists[0].originalIndex;

            invariants.SetVertexInvariant(first, 1);
            for (int i = 1; i < invariantLists.Count; i++)
            {
                InvariantArray a = invariantLists[i - 1];
                InvariantArray b = invariantLists[i];
                if (!a.Equals(b))
                {
                    order++;
                }
                invariants.SetVertexInvariant(b.originalIndex, order);
            }
        }
Exemplo n.º 2
0
        public void TestRank()
        {
            List <InvariantArray> list = MakeUnsortedList();

            list.Sort();
            int rank = 1;

            int[] ranks = new int[list.Count];
            ranks[0] = 1;
            for (int i = 1; i < list.Count; i++)
            {
                InvariantArray a = list[i - 1];
                InvariantArray b = list[i];
                if (!a.Equals(b))
                {
                    rank++;
                }
                ranks[i] = rank;
            }
            int[] expecteds = { 1, 1, 2, 3, 4 };
            Assert.IsTrue(Compares.AreEqual(expecteds, ranks));
        }