public void CreateStructure_Returns_Table_With_Matching_Structure_And_NodeIndex_Col_Is_Included(bool createIFrameImplementation)
        {
            IBasicAdjList net = BasicAdjListGenerator.GenerateAdjListWithDataAttribs(2, 1, false, true, false);
            var builder = new DataAttributesBuilder();
            net.NodeData.AddColumn("col 0", typeof(int));
            net.NodeData.AddColumn("col 1", typeof(string));
            net.NodeData.AddColumn("col 2", typeof(double));

            var xtor = new BasicAdjListNodeDataExtractor();

            DataTable table = xtor.CreateStructure(net.NodeData, true, createIFrameImplementation); // include node index col

            Assert.NotNull(table);

            Assert.Equal(net.NodeDataAttributeCount+1, table.Columns.Count);
            Assert.Equal(0, table.Rows.Count);
            Assert.Equal(typeof(int), table.Columns[0].DataType);
            Assert.Equal(typeof(int), table.Columns[1].DataType);
            Assert.Equal(typeof(string), table.Columns[2].DataType);
            Assert.Equal(typeof(double), table.Columns[3].DataType);
            Assert.Equal("Node Index", table.Columns[0].ColumnName);
            Assert.Equal("col 0", table.Columns[1].ColumnName);
            Assert.Equal("col 1", table.Columns[2].ColumnName);
            Assert.Equal("col 2", table.Columns[3].ColumnName);
        }
        public void ToDataTable_ThrowsIfNetworkIsIncorrectType(bool includeNodeAttribs)
        {
            INetwork net = new BlueSpider.Blob.TestSupport.Network.Dummies.DummyBasicAdjList();

            BasicAdjListNodeDataExtractor xtor = new BasicAdjListNodeDataExtractor();

            var ex = Assert.Throws<ArgumentException>(() => xtor.ToDataTable(net, includeNodeAttribs));
        }
        public void ToDataTable_ThrowsIfNetworkIsNull(bool includeNodeAttribs)
        {
            IBasicAdjList net = null;

            BasicAdjListNodeDataExtractor xtor = new BasicAdjListNodeDataExtractor();

            var ex = Assert.Throws<ArgumentNullException>(() => xtor.ToDataTable(net, includeNodeAttribs));
        }
        public void ToFrame_With_Zero_Node_Data_Attribs_And_IncludeNodeAttribs_Is_True_Verify_Index_Values_In_Output_Table(int numNodes, int numEdges, bool isDirected)
        {
            bool includeNodeAttribs = true;
            IBasicAdjList net = BasicAdjListGenerator.GenerateAdjListWithDataAttribs(numNodes, numEdges, isDirected, true, false);

            var map = new Dictionary<int, bool>(); // map node index to bool flag to record when it is found
            foreach (var node in net.Nodes)
            {
                map.Add(node.Index, false);
            }

            var xtor = new BasicAdjListNodeDataExtractor();

            var frame = xtor.ToFrame(net, includeNodeAttribs) as BasicFrame;
            Assert.NotNull(frame);

            Assert.Equal(1, frame.ColumnCount);
            Assert.Equal(numNodes, frame.RowCount);

            int val = -1;
            foreach (DataRow row in frame.Rows)
            {
                val = Convert.ToInt32(row[0]);
                map[val] = true; // record when the node index is identified in the table
            }
            // make sure each node index was found
            foreach (KeyValuePair<int, bool> kvp in map)
            {
                Assert.True(kvp.Value, string.Format("Node index {0} was not found", kvp.Key));
            }
        }
        public void ToFrame_With_Zero_Node_Data_Attribs_And_IncludeNodeAttribs_Is_True(int numNodes, int numEdges, bool isDirected)
        {
            bool includeNodeAttribs = true;
            IBasicAdjList net = BasicAdjListGenerator.GenerateAdjListWithDataAttribs(numNodes, numEdges, isDirected, true, false);

            var xtor = new BasicAdjListNodeDataExtractor();

            IFrame frame = xtor.ToFrame(net, includeNodeAttribs);
            Assert.NotNull(frame);

            Assert.Equal(1, frame.ColumnCount);
            Assert.Equal(numNodes, frame.RowCount);
        }
        public void ToFrame_With_One_Node_Data_Attrib_And_IncludeNodeAttribs_Is_True(int numNodes, int numEdges, bool isDirected, int[] dataVals)
        {
            bool includeNodeAttribs = true;
            IBasicAdjList net = BasicAdjListGenerator.GenerateAdjListWithDataAttribs(numNodes, numEdges, isDirected, true, false);
            var builder = new DataAttributesBuilder();
            int colIndex = net.NodeData.AddColumn("col 0", typeof(int));
            builder.PopulateCol<INode>(net.NodeData, colIndex, dataVals);

            var xtor = new BasicAdjListNodeDataExtractor();

            var frame = xtor.ToFrame(net, includeNodeAttribs) as BasicFrame;
            Assert.NotNull(frame);

            Assert.Equal(1 + 1, frame.Columns.Count);
            Assert.Equal(numNodes, frame.Rows.Count);

            DataColumn col = frame.Columns[0];
            Assert.NotNull(col);
            Assert.Equal(typeof(int), col.DataType);

            col = frame.Columns[1];
            Assert.NotNull(col);
            Assert.Equal(typeof(int), col.DataType);

            string colName = frame.Columns[1].ColumnName;

            object objVal = null;
            int val = -1;
            for (int i = 0; i < frame.Rows.Count; i++)
            {
                objVal = frame.Rows[i][colName];
                Assert.NotNull(objVal);
                Assert.IsType(typeof(int), objVal);
                val = (int)objVal;
                Assert.Equal(dataVals[i], val);
            }
        }
        public void ToFrame_With_Multiple_Columns_And_IncludeNodeAttribs_Is_True(int testId, int numNodes, int numEdges, bool isDirected, int[] intVals, double[] doubleVals, bool[] boolVals, string[] stringVals)
        {
            bool includeNodeAttribs = true;
            IBasicAdjList net = BasicAdjListGenerator.GenerateAdjListWithDataAttribs(numNodes, numEdges, isDirected, true, false);
            var builder = new DataAttributesBuilder();
            int colIndex0 = net.NodeData.AddColumn("col 0", typeof(int));
            int colIndex1 = net.NodeData.AddColumn("col 1", typeof(double));
            int colIndex2 = net.NodeData.AddColumn("col 2", typeof(bool));
            int colIndex3 = net.NodeData.AddColumn("col 3", typeof(string));
            builder.PopulateCol<int, INode>(net.NodeData, colIndex0, intVals);
            builder.PopulateCol<double, INode>(net.NodeData, colIndex1, doubleVals);
            builder.PopulateCol<bool, INode>(net.NodeData, colIndex2, boolVals);
            builder.PopulateCol<string, INode>(net.NodeData, colIndex3, stringVals);

            var xtor = new BasicAdjListNodeDataExtractor();

            var frame = xtor.ToFrame(net, includeNodeAttribs) as BasicFrame;
            Assert.NotNull(frame);

            Assert.Equal(4 + 1, frame.Columns.Count);
            Assert.Equal(numNodes, frame.Rows.Count);

            //--
            DataColumn intCol = frame.Columns[1];
            Assert.NotNull(intCol);
            Assert.Equal(typeof(int), intCol.DataType);
            string intColName = intCol.ColumnName;

            //--
            DataColumn doubleCol = frame.Columns[2];
            Assert.NotNull(doubleCol);
            Assert.Equal(typeof(double), doubleCol.DataType);
            string doubleColName = doubleCol.ColumnName;

            //--
            DataColumn boolCol = frame.Columns[3];
            Assert.NotNull(boolCol);
            Assert.Equal(typeof(bool), boolCol.DataType);
            string boolColName = boolCol.ColumnName;

            //--
            DataColumn stringCol = frame.Columns[4];
            Assert.NotNull(stringCol);
            Assert.Equal(typeof(string), stringCol.DataType);
            string stringColName = stringCol.ColumnName;

            object objVal = null;

            //-- ints
            int intVal = -1;
            for (int i = 0; i < frame.Rows.Count; i++)
            {
                objVal = frame.Rows[i][intColName];
                Assert.NotNull(objVal);
                Assert.IsType(typeof(int), objVal);
                intVal = (int)objVal;
                Assert.Equal(intVals[i], intVal);
            }

            //-- doubles
            double doubleVal = -1.1;
            for (int i = 0; i < frame.Rows.Count; i++)
            {
                objVal = frame.Rows[i][doubleColName];
                Assert.NotNull(objVal);
                Assert.IsType(typeof(double), objVal);
                doubleVal = (double)objVal;
                Assert.Equal(doubleVals[i], doubleVal);
            }

            //-- bools
            bool boolVal = false;
            for (int i = 0; i < frame.Rows.Count; i++)
            {
                objVal = frame.Rows[i][boolColName];
                Assert.NotNull(objVal);
                Assert.IsType(typeof(bool), objVal);
                boolVal = (bool)objVal;
                Assert.Equal(boolVals[i], boolVal);
            }

            //-- strings
            string stringVal = null;
            for (int i = 0; i < frame.Rows.Count; i++)
            {
                objVal = frame.Rows[i][stringColName];
                Assert.NotNull(objVal);
                Assert.IsType(typeof(string), objVal);
                stringVal = (string)objVal;
                Assert.Equal(stringVals[i], stringVal);
            }
        }
        public void ToFrame_ThrowsIfNodeAttribMgrIsNull(bool includeNodeAttribs)
        {
            BasicAdjList net = BasicAdjListGenerator.GenerateAdjList(0, 0, true) as BasicAdjList;
            net.NodeData = null;
            BasicAdjListNodeDataExtractor xtor = new BasicAdjListNodeDataExtractor();

            var ex = Assert.Throws<ArgumentException>(() => xtor.ToFrame(net, includeNodeAttribs));
        }
        public void ToDataTable_With_Zero_Node_Data_Attribs_And_IncludeNodeAttribs_Is_False(int numNodes, int numEdges, bool isDirected)
        {
            bool includeNodeAttribs = false;
            IBasicAdjList net = BasicAdjListGenerator.GenerateAdjListWithDataAttribs(numNodes, numEdges, isDirected, true, false);

            var xtor = new BasicAdjListNodeDataExtractor();

            DataTable table = xtor.ToDataTable(net, includeNodeAttribs);
            Assert.NotNull(table);

            Assert.Equal(0, table.Columns.Count);
            Assert.Equal(numNodes, table.Rows.Count);
        }