public void ConvertNetwork_VerifyEdges(int id, int n, int m, bool isDirected, Type expectedType)
        {
            //Arrange
            var converter = new MatrixToAdjListConverter();
            var mtrx = BasicMatrixGenerator.GenerateMatrix(n, m, isDirected);

            converter.IncludeEdgeData = false;
            IBasicAdjList net = (IBasicAdjList)converter.ConvertNetwork(mtrx);

            INode srcNode = null;
            INode destNode = null;
            bool result = false;
            if (isDirected)
            {
                for (int i = 0; i < mtrx.NodeCount; i++)
                {
                    for (int j = 0; j < mtrx.NodeCount; j++)
                    {
                        if (mtrx[i, j] > 0.0)
                        {
                            srcNode = net.Nodes[i];
                            destNode = net.Nodes[j];
                            result = net.IsEdge(srcNode, destNode);
                            Assert.True(result, string.Format("An IEdge should exist for the entry [{0},{1}].", i, j));
                        }
                    }
                }
            }
            else
            {
                for (int i = 0; i < mtrx.NodeCount; i++)
                {
                    // upper triangle only
                    for (int j = i; j < mtrx.NodeCount; j++)
                    {
                        if (mtrx[i, j] > 0.0)
                        {
                            srcNode = net.Nodes[i];
                            destNode = net.Nodes[j];
                            result = net.IsEdge(srcNode, destNode);
                            Assert.True(result, string.Format("An IEdge should exist for the entry [{0},{1}].", i, j));
                        }
                    }
                }
            }
        }
        public void ToAdjList_VerifyEdgeDataAttribs(int id, int n, int m, bool isDirected, Type expectedType)
        {
            //Arrange
            var converter = new MatrixToAdjListConverter();
            var mtrx = BasicMatrixGenerator.GenerateMatrix(n, m, isDirected);

            converter.IncludeEdgeData = true;
            var net = (IBasicAdjList)converter.ConvertNetwork(mtrx);

            // there should be 1 map of doubles
            Assert.Equal(1, net.EdgeAttributeCount);

            INode srcNode = null;
            INode destNode = null;
            double initVal, actualVal;

            int i = 0, j = 0;
            foreach (IEdge edge in net.Edges)
            {
                srcNode = edge.SourceNode;
                destNode = edge.DestinationNode;
                i = srcNode.Index;
                j = destNode.Index;

                initVal = mtrx[i, j];
                actualVal = net.EdgeData.GetValue<double>(edge, 0);
                Assert.Equal(initVal, actualVal);
            }
        }
        public void CreateUndirectedEdges_Creates_WeightMap_When_IncludeEdgeData_Is_True(int n, int m)
        {
            //Arrange
            var converter = new MatrixToAdjListConverter();
            var srcMtrx = BasicMatrixGenerator.GenerateMatrix(n, m, false);
            var targetNet = BasicAdjListGenerator.GenerateAdjListWithDataAttribs(n, 0, true, true, true);

            converter.IncludeEdgeData = true;
            converter.CreateUndirectedEdges(srcMtrx, targetNet);

            Assert.NotNull(converter.EdgeToEdgeWeightMap);
            Assert.Equal(srcMtrx.EdgeCount, converter.EdgeToEdgeWeightMap.Count);
        }
        public void CreateUndirectedEdges_CreatesZeroEdgesWhenNodeCountsDoNotMatch(int n, int m)
        {
            //Arrange
            var converter = new MatrixToAdjListConverter();
            var srcMtrx = BasicMatrixGenerator.GenerateMatrix(n, m, false);
            var targetNet = BasicAdjListGenerator.GenerateAdjListWithDataAttribs(n+1, 0, false, true, true);

            Assert.Equal(0, targetNet.EdgeCount);
            converter.CreateUndirectedEdges(srcMtrx, targetNet);

            Assert.Equal(0, targetNet.EdgeCount);
        }
        public void CreateDirectedEdges(int n, int m)
        {
            //Arrange
            var converter = new MatrixToAdjListConverter();
            var srcMtrx = BasicMatrixGenerator.GenerateMatrix(n, m, true);
            var targetNet = BasicAdjListGenerator.GenerateAdjListWithDataAttribs(n, 0, true, true, true);

            Assert.Equal(0, targetNet.EdgeCount);
            converter.CreateDirectedEdges(srcMtrx, targetNet);

            Assert.Equal(srcMtrx.EdgeCount, targetNet.EdgeCount);
        }
        public void CopyEdgeWeights(int id, int n, int m, double [] vals)
        {
            //Arrange
            var converter = new MatrixToAdjListConverter();
            var srcMtrx = BasicMatrixGenerator.GenerateMatrix(n, m, true);
            var targetNet = BasicAdjListGenerator.GenerateAdjListWithDataAttribs(n, m, true, true, true);

            // simulate map
            var map = new Dictionary<IEdge, double>();
            for (int i = 0; i < targetNet.Edges.Count; i++)
            {
                map.Add(targetNet.Edges[i], vals[i]);
            }
            // simpulate data col added in CreateDirectedEdges
             //   targetNet.EdgeData.AddColumn("A", typeof (double));

            converter.CopyEdgeWeights(targetNet, map);

            double actualVal;
            double expectedVal;
            foreach (IEdge edge in targetNet.Edges)
            {
                actualVal = targetNet.EdgeData.GetValue<double>(edge, 0);
                expectedVal = vals[edge.Index];
                Assert.Equal(expectedVal, actualVal);
            }
        }
        public void ConvertToAdjList_IncludingEdgeWeights(int id, int n, int m, bool isDirected, Type expectedType)
        {
            //Arrange
            var converter = new MatrixToAdjListConverter();
            var mtrx = BasicMatrixGenerator.GenerateMatrix(n, m, isDirected);

            converter.IncludeEdgeData = true;
            IBasicAdjList net = (IBasicAdjList)converter.ConvertToAdjList(mtrx);

            Assert.NotNull(net);
            Assert.Equal(expectedType, net.GetType());
            Assert.Equal(mtrx.IsDirected, net.IsDirected);
            Assert.Equal(mtrx.NodeCount, net.NodeCount);
            Assert.Equal(mtrx.EdgeCount, net.EdgeCount);
            Assert.Equal(1, net.EdgeAttributeCount);
        }