public void GetCopy_For_Edges_Returns_IFrame(int testId, int numNodes, int numEdges, bool isDirected, bool selfLoops, bool multiEdges, int[] intVals, double[] doubleVals, bool[] boolVals, string[] stringVals)
        {
            //Arrange
            var copier = new DataAttributesTableToTableWithIndicesCopier<IEdge>();

            #region Create src and target networks

            IBasicAdjList src = BasicAdjListGenerator.GenerateAdjListWithDataAttribs(numNodes, numEdges, isDirected, false, true);
            var builder = new DataAttributesBuilder();
            var colIndex = builder.AddColumn((IEdgeAttributes)src, typeof(int));
            builder.PopulateCol<int, IEdge>(src.EdgeData, colIndex, intVals);
            colIndex = builder.AddColumn((IEdgeAttributes)src, typeof(double));
            builder.PopulateCol<double, IEdge>(src.EdgeData, colIndex, doubleVals);
            colIndex = builder.AddColumn((IEdgeAttributes)src, typeof(bool));
            builder.PopulateCol<bool, IEdge>(src.EdgeData, colIndex, boolVals);
            colIndex = builder.AddColumn((IEdgeAttributes)src, typeof(string));
            builder.PopulateCol<string, IEdge>(src.EdgeData, colIndex, stringVals);

            #endregion

            //Act
            var results = copier.GetCopy(src.EdgeData);

            //Assert
            Assert.NotNull(results);
            var isIFrame = results is IFrame;
            Assert.True(isIFrame);
        }
        public void GetCopy_For_Edges(int testId, int numNodes, int numEdges, bool isDirected, bool selfLoops, bool multiEdges, int[] intVals, double[] doubleVals, bool[] boolVals, string[] stringVals)
        {
            //Arrange
            var copier = new DataAttributesTableToTableWithIndicesCopier<IEdge>();

            #region Create src and target networks

            IBasicAdjList src = BasicAdjListGenerator.GenerateAdjListWithDataAttribs(numNodes, numEdges, isDirected, false, true);
            var builder = new DataAttributesBuilder();
            var colIndex = builder.AddColumn((IEdgeAttributes)src, typeof(int));
            builder.PopulateCol<int, IEdge>(src.EdgeData, colIndex, intVals);
            colIndex = builder.AddColumn((IEdgeAttributes)src, typeof(double));
            builder.PopulateCol<double, IEdge>(src.EdgeData, colIndex, doubleVals);
            colIndex = builder.AddColumn((IEdgeAttributes)src, typeof(bool));
            builder.PopulateCol<bool, IEdge>(src.EdgeData, colIndex, boolVals);
            colIndex = builder.AddColumn((IEdgeAttributes)src, typeof(string));
            builder.PopulateCol<string, IEdge>(src.EdgeData, colIndex, stringVals);

            #endregion

            //Act
            var results = copier.GetCopy(src.EdgeData );

            //Assert
            Assert.NotNull(results);
            Assert.Equal(src.EdgeAttributeCount + 1, results.Columns.Count);
            Assert.Equal(src.EdgeCount, results.Rows.Count);
            Assert.Equal(typeof(int), results.Columns[0].DataType);

            for (int i = 0; i < src.EdgeDataAttributeCount; i++)
            {
                Assert.Equal(src.EdgeDataAttributeTypes[i], results.Columns[i + 1].DataType);
                Assert.Equal(src.EdgeDataAttributeNames[i], results.Columns[i + 1].ColumnName);
            }

            int index = -1;
            foreach (var edge in src.Edges)
            {
                index = edge.Index;
                for (int j = 0; j < src.EdgeDataAttributeCount; j++)
                {
                    Assert.Equal(src.EdgeData[index, j ], results.Rows[index][j + 1]);
                }
            }
        }
        public void GetCopy_For_Nodes_Throws_If_srcAttribs_Is_Null()
        {
            //Arrange
            var copier = new DataAttributesTableToTableWithIndicesCopier<INode>();
            IDataAttributes<INode> attribs = null;

            //Act, Assert
            var ex = Assert.Throws<ArgumentNullException>(() => copier.GetCopy(attribs));
        }