Example #1
0
        public void Read_Assigns_Parent_Network_Of_Nodes_And_Edges(string file, int expectedVertCount, int expectedArcCount, int expectedEdgeCount, bool hasNodeLabels, bool hasEdgeLabels)
        {
            //Arrange
            IAdjList network = null;
            NetFileReader reader = new NetFileReader();

            reader.File = Path.Combine(Properties.Resources.Pajek_DataFilePath, file);

            //Act
            reader.Read();

            //Assert
            network = reader.Network as IAdjList;

            Assert.NotNull(network);

            foreach(INode node in network.Nodes)
            {
                Assert.NotNull(node.Network);
                Assert.Same(network, node.Network);
            }

            foreach (IEdge edge in network.Edges)
            {
                Assert.NotNull(edge.Network);
                Assert.Same(network, edge.Network);
            }
        }
Example #2
0
        public void ReadVertex_Reads_Vertex_From_Input_And_Maps_Vertex_Label(string inputStr, int expectedVertexNum, string expectedLabel)
        {
            // if no label or empty string specified, then no label is mapped

            //Arrange
            NetFileReader reader = new NetFileReader();
            reader.KeepNodeLabels = true;
            reader.NetworkAdjList = BasicAdjListGenerator.GenerateAdjListWithDataAttribs(0, 0, false, true, true);

            var nodeAttribNet = (INodeAttributes)reader.NetworkAdjList;
            int colIndex = nodeAttribNet.NodeData.AddColumn("Node labels", typeof(string), "");
            reader.NodeLabelAttribColIndex = 0;

            reader.NetworkAdjList.CreateNode(); // create the node AFTER the data col is added.

            //Act
            reader.ReadVertex(inputStr);

            //Assert
            Assert.Equal(1, reader.Network.NodeCount);

            int mappedIndex = reader.VertexNumberMap[expectedVertexNum];

            INode node = reader.NetworkAdjList.Nodes[mappedIndex];
            string mappedLabel = ((INodeAttributes)reader.NetworkAdjList).NodeData.GetValue<string>(node, 0);

            Assert.Equal(expectedLabel, mappedLabel);
        }
Example #3
0
        public void ReadEdgeList_Reads_Multiple_Edges_From_A_List_Including_Vertex_Numbers(string inputStr, int expectedSrcVtxNum, int [] expectedTargVtxNums, int expectedEdgeCount)
        {
            //Arrange
            int srcNodeIndex = 0;
            IList<int> targNodeIndeces = new List<int>();

            NetFileReader reader = new NetFileReader();
            reader.NetworkAdjList = BasicAdjListGenerator.GenerateAdjList(5, 0,false);    // assume 5 nodes were created when *Network header read

            reader.VertexNumberMap.Add(expectedSrcVtxNum, srcNodeIndex);
            for (int i = 0; i < expectedTargVtxNums.Length; i++)
            {
                int index = i + 1;  // cant be 0, that is srcNodeIndex
                if (!reader.VertexNumberMap.ContainsKey(expectedTargVtxNums[i]))
                {
                    targNodeIndeces.Add(index);
                    reader.VertexNumberMap.Add(expectedTargVtxNums[i], index);
                }
            }

            //Act
            reader.ReadEdgeList(inputStr);

            //Assert
            Assert.Equal(expectedEdgeCount, reader.Network.EdgeCount);

            INode srcNode = reader.NetworkAdjList.Nodes[srcNodeIndex];
            INode targetNode = null;
            bool verified = true;
            for (int i = 0; i < expectedTargVtxNums.Length; i++)
            {
                // get each src and targ node
                int targNodeIndex = reader.VertexNumberMap[expectedTargVtxNums[i]];
                targetNode = reader.NetworkAdjList.Nodes[targNodeIndex];

                bool found = false;
                // check each edge for the src and targ node
                foreach (IEdge edge in reader.NetworkAdjList.Edges)
                {
                    if (edge.SourceNode == srcNode && edge.DestinationNode == targetNode)
                    {
                        found = true;
                        break;
                    }
                }

                verified &= found;
            }

            Assert.True(verified);
        }
Example #4
0
        public void ReadArc_Reads_Directed_Edge_And_Maps_Weight_When_Present(string inputStr, int expectedSrcVtxNum, int expectedTargVtxNum, double expectedWeight)
        {
            //Arrange
            int srcNodeIndex = -1, targNodeIndex = -1;
            if (expectedSrcVtxNum != expectedTargVtxNum)
            {
                srcNodeIndex = 0;
                targNodeIndex = 1;
            }
            else
            {
                // self loops will have the same src/targ vertex num and the same index
                srcNodeIndex = 0;
                targNodeIndex = 0;
            }

            NetFileReader reader = new NetFileReader();
            reader.NetworkAdjList = BasicAdjListGenerator.GenerateAdjListWithDataAttribs(2, 0, false, true, true);   // num nodes created when the *Vertices header read

            reader.VertexNumberMap.Add(expectedSrcVtxNum, srcNodeIndex);
            if (expectedSrcVtxNum != expectedTargVtxNum)  // only add the 2nd node if not a self loop
                reader.VertexNumberMap.Add(expectedTargVtxNum, targNodeIndex);
            reader.EdgeWeightsColIndex = 0;

            //Act
            reader.ReadArc(inputStr);

            //Assert
            Assert.Equal(1, reader.Network.EdgeCount);

            // get the edge and check the mapped weight
            IEdge myEdge = null;
            foreach (IEdge edge in reader.NetworkAdjList.Edges)
            {
                myEdge = edge;
                break;
            }

            if (double.IsNaN(expectedWeight))
            {
                Assert.Equal(0, reader.NetworkAdjList.EdgeAttributeCount);
            }
            else
            {
                var edgeAttribs = (IEdgeAttributes)reader.NetworkAdjList;
                double mappedWeight = edgeAttribs.EdgeData.GetValue<double>(myEdge, reader.EdgeWeightsColIndex);

                Assert.Equal(expectedWeight, mappedWeight);
            }
        }
Example #5
0
        public void InitializeVertexNumMap_Creates_The_Map_For_Vertex_Numbers(int nodeCount)
        {
            //Arrange
            NetFileReader reader = new NetFileReader();

            //Act
            reader.InitializeVertexNumMap(nodeCount);

            //Assert
            int nodeIndex = -1;
            for (int i = 0; i < reader.VertexNumberMap.Count; i++)
            {
                nodeIndex = reader.VertexNumberMap[i + 1];
                Assert.Equal(i, nodeIndex);

            }
        }
Example #6
0
        public void ReadVertexString_For_Vertex_Label(string inputStr)
        {
            //Arrange
            int vNum = -1;
            string label = null;

            NetFileVertexTestItem item = new NetFileVertexTestItem(inputStr.Split(new char[] { '#' }));

            NetFileReader reader = new NetFileReader();

            //Act
            bool result = reader.ReadVertexString(item.RawText, out vNum, out label);

            //Assert
            Assert.Equal(item.VertexLabel, label);
            Assert.True(result);
        }
Example #7
0
        public void Read_Assigns_Network_Id(string file, int expectedVertCount, int expectedArcCount, int expectedEdgeCount, bool hasNodeLabels, bool hasEdgeLabels)
        {
            //Arrange
            IAdjList network = null;
            NetFileReader reader = new NetFileReader();

            reader.File = Path.Combine(Properties.Resources.Pajek_DataFilePath, file);

            //Act
            reader.Read();
            network = reader.Network as IAdjList;

            //Assert
            Assert.NotNull(network);

            Assert.NotEqual(Guid.Empty, network.Id);
        }
Example #8
0
        public void ReadEdgeListString_Returns_False_For_Invalid_Input(string inputStr, int expectedSrcVtxNum)
        {
            //Arrange
            bool result = false;
            int srcV = -1;
            int[] targV = null;

            NetFileReader reader = new NetFileReader();

            //Act
            result = reader.ReadEdgeListString(inputStr, out srcV, out targV);

            //Assert
            Assert.False(result);
            Assert.Equal(expectedSrcVtxNum, srcV);
            Assert.NotNull(targV);
            Assert.Equal(0, targV.Length);
        }
Example #9
0
        public static INetworkFileReader CreateReader(NetworkFileTypes fileType)
        {
            INetworkFileReader reader = null;

            if (fileType == NetworkFileTypes.UCINet_DL)
            {
                reader = new DLImporter();
            }
            else if (fileType == NetworkFileTypes.Pajek_Net)
            {
                reader = new NetFileReader();
            }
            else if (fileType == NetworkFileTypes.GraphML)
            {
                reader = new GraphMLAdjListReader();
            }
            return reader;
        }
Example #10
0
        public void ReadArcListString_Reads_Multiple_Directed_Edges_From_A_List_Including_Vertex_Numbers(string inputStr, int expectedSrcVtxNum, int[] expectedTargVtxNums)
        {
            bool result = false;
            int srcV = -1;
            int [] targV = null;

            NetFileReader reader = new NetFileReader();
            result = reader.ReadArcListString(inputStr, out srcV, out targV);

            Assert.True(result);
            Assert.Equal(expectedSrcVtxNum, srcV);
            Assert.NotNull(targV);
            Assert.Equal(expectedTargVtxNums.Length, targV.Length);

            for (int i = 0; i < targV.Length; i++)
            {
                Assert.Equal(expectedTargVtxNums[i], targV[i]);
            }
        }
Example #11
0
        public void ReadArcString_Reads_Directed_Edge_And_Maps_Weight_When_Present(string inputStr, double expectedWeight)
        {
            //Arrange
            bool result = false;
            int srcV = -1;
            int targV = -1;
            double weight = double.NaN;

            NetFileReader reader = new NetFileReader();

            //Act
            result = reader.ReadArcString(inputStr, out srcV, out targV, out weight);

            //Assert
            Assert.Equal(expectedWeight, weight);
            if (weight == expectedWeight)
            {
                Assert.True(result);
            }
        }
Example #12
0
        public static INetworkFileReader CreateReader(string file)
        {
            INetworkFileReader reader = null;

            string extension = Path.GetExtension(file);

            if (string.Compare(extension, BlueSpider.Blob.IO.Providers.Properties.Resources.Extension_UCINetDLFile, true) == 0)
            {
                reader = new DLImporter();
            }
            else if (string.Compare(extension, BlueSpider.Blob.IO.Providers.Properties.Resources.Extension_PajekNetFile, true) == 0)
            {
                reader = new NetFileReader();
            }
            else if (string.Compare(extension, BlueSpider.Blob.IO.Providers.Properties.Resources.Extension_GraphMLFile, true) == 0)
            {
                reader = new GraphMLAdjListReader();
            }

            return reader;
        }
Example #13
0
        public void ReadHeaderLine_Reads_And_Parses_First_Line_Of_Node_Section(string inputStr, string expectedName)
        {
            //Arrange
            bool result = false;
            NetFileReader reader = new NetFileReader();
            string name = null;

            //Act
            reader.ReadNetworkHeader(inputStr, out name);

            //Assert
            if (string.Compare(name, expectedName) != 0)
            {
                if (string.IsNullOrEmpty(name) && string.IsNullOrEmpty(expectedName))
                    result = true;
                else
                    result = false;
            }
            else
                result = true;

            Assert.True(result);
        }
Example #14
0
        public void ReadVertex_Reads_Vertex_From_Input_And_Maps_Vertex_Number_To_Node_Index(string inputStr, int expectedVertexNum, string expectedLabel)
        {
            // if no label or empty string specified, then no label is mapped

            //Arrange
            NetFileReader reader = new NetFileReader();
            reader.KeepNodeLabels = false;  // otherwise we have to dummy the node map

            reader.NetworkAdjList = BasicAdjListGenerator.GenerateAdjListWithDataAttribs(1, 0, false, true, true);    // num nodes created when the *Vertices header read

            //Act
            reader.ReadVertex(inputStr);

            //Assert
            Assert.Equal(1, reader.Network.NodeCount);

            bool vertexNumIsMapped = reader.VertexNumberMap.ContainsKey(expectedVertexNum);
            Assert.True(vertexNumIsMapped);

            int mappedIndex = reader.VertexNumberMap[expectedVertexNum];
            INode node = reader.NetworkAdjList.Nodes[mappedIndex];
            Assert.NotNull(node);

            Assert.Equal(mappedIndex, node.Index);
        }
Example #15
0
        public void ReadHeaderLine_Reads_And_Parses_First_Line_Of_Vertex_Section(string inputStr, int expectedNodeCount)
        {
            //Arrange
            int nodeCount = -1;
            NetFileReader reader = new NetFileReader();

            //Act
            bool result = reader.ReadVertexHeader(inputStr, out nodeCount);

            //Assert
            Assert.Equal(expectedNodeCount, nodeCount);

            if (expectedNodeCount == nodeCount)
            {
                Assert.True(result);
            }
        }
Example #16
0
        public void ReadVertexString_Returns_False_When_Input_Is_Invalid(string inputStr, int expectedVertexNum)
        {
            //Arrange
            int vNum = -1;
            string label = null;

            NetFileReader reader = new NetFileReader();

            //Act
            bool result = reader.ReadVertexString(inputStr, out vNum, out label);

            //Assert
            Assert.Equal(expectedVertexNum, vNum);
            Assert.False(result);
        }
Example #17
0
        public void Read_Reads_Network_From_Files_Where_Vertex_List_Is_Empty(string file, int expectedVertCount, int expectedArcCount, int expectedEdgeCount, bool hasEdgeLabels)
        {
            //Arrange
            IAdjList network = null;
            NetFileReader reader = new NetFileReader();

            reader.File = Path.Combine(Properties.Resources.Pajek_DataFilePath, file);

            //Act
            reader.Read();

            //Assert
            network = reader.Network as IAdjList;

            Assert.NotNull(network);
            Assert.Equal(expectedVertCount, network.NodeCount);
            if (expectedArcCount == 0)
            {
                Assert.Equal(network.EdgeCount, expectedEdgeCount);
                Assert.False(network.IsDirected);
            }
            else if (expectedEdgeCount == 0)
            {
                Assert.Equal(network.EdgeCount, expectedArcCount);
                Assert.True(network.IsDirected);
            }

            Assert.Equal(0, network.NodeAttributeCount);

            if (hasEdgeLabels)
            {
                Assert.Equal(1, network.EdgeAttributeCount);
            }
        }
Example #18
0
        //Helpers
        private IBasicAdjList ReadTestNetworkFile(string file)
        {
            IBasicAdjList network = null;
            NetFileReader reader = new NetFileReader();

            reader.File = Path.Combine(Properties.Resources.TestNetwork_DataFilePath, file);
            reader.Read();
            network = reader.Network as IBasicAdjList;

            return network;
        }
Example #19
0
        private IBasicAdjList ReadFile(string file)
        {
            IBasicAdjList network = null;
            NetFileReader reader = new NetFileReader();

            reader.File = Path.Combine(_FilePath, file);
            reader.Read();
            network = reader.Network as IBasicAdjList;

            return network;
        }
Example #20
0
        public void ReadArc_Reads_Directed_Edge_And_Vertex_Numbers_From_Input(string inputStr, int expectedSrcVtxNum, int expectedTargVtxNum)
        {
            //Arrange
            int srcNodeIndex = -1,targNodeIndex = -1;
            if (expectedSrcVtxNum != expectedTargVtxNum)
            {
                srcNodeIndex = 0;
                targNodeIndex = 1;
            }
            else
            {
                // self loops will have the same src/targ vertex num and the same index
                srcNodeIndex = 0;
                targNodeIndex = 0;
            }

            NetFileReader reader = new NetFileReader();
            reader.NetworkAdjList = BasicAdjListGenerator.GenerateAdjListWithDataAttribs(2, 0, false, true, true);    // num nodes created when the *Vertices header read

            reader.VertexNumberMap.Add(expectedSrcVtxNum, srcNodeIndex);
            if (expectedSrcVtxNum != expectedTargVtxNum)  // only add the 2nd node if not a self loop
                reader.VertexNumberMap.Add(expectedTargVtxNum, targNodeIndex);

            //Act
            reader.ReadArc(inputStr);

            //Assert
            Assert.Equal(1, reader.Network.EdgeCount);

            INode expectedSrcNode = reader.NetworkAdjList.Nodes[srcNodeIndex];
            INode expectedTargetNode = reader.NetworkAdjList.Nodes[targNodeIndex];

            foreach (IEdge edge in reader.NetworkAdjList.Edges)
            {
                Assert.Same(expectedSrcNode, edge.SourceNode);
                Assert.Same(expectedTargetNode, edge.DestinationNode);
            }
        }
Example #21
0
        public void ReadArcString_Reads_Directed_Edge_And_Vertex_Numbers(string inputStr, int expectedSrcVtxNum, int expectedTargVtxNum)
        {
            //Arrange
            bool result = false;
            int srcV = -1;
            int targV = -1;
            double weight = double.NaN;

            NetFileReader reader = new NetFileReader();

            //Act
            result = reader.ReadArcString(inputStr, out srcV, out targV, out weight);

            //Assert
            Assert.Equal(expectedSrcVtxNum, srcV);
            Assert.Equal(expectedTargVtxNum, targV);
            if (srcV == expectedSrcVtxNum && targV == expectedTargVtxNum)
            {
                Assert.True(result);
            }
        }
Example #22
0
        public void ReadVertex_Reads_Vertex_From_Input_But_Vertex_Labels_Are_Not_Mapped_To_Node_Map_When_No_Label_Specified(string inputStr, int expectedVertexNum, string expectedLabel)
        {
            // if no label or empty string specified, then no label is mapped

            //Arrange
            NetFileReader reader = new NetFileReader();
            reader.KeepNodeLabels = true;   // if this flag is true, then the map will be created even if no labels are read in.
            reader.NetworkAdjList = BasicAdjListGenerator.GenerateAdjListWithDataAttribs(0, 0, false, true, true);   // num nodes created when the *Vertices header read
            var nodeAttribNet = (INodeAttributes)reader.NetworkAdjList;
            int colIndex = nodeAttribNet.NodeData.AddColumn("Node labels", typeof(string), "");
            reader.NetworkAdjList.CreateNode(); // create the node AFTER the data col is added.

            //Act
            reader.ReadVertex(inputStr);

            //Assert
            int mappedIndex = reader.VertexNumberMap[expectedVertexNum];

            INode node = reader.NetworkAdjList.Nodes[mappedIndex];
            var nodeAttribs = (INodeAttributes) reader.NetworkAdjList;
            string mappedLabel = nodeAttribs.NodeData.GetValue<string>(node, colIndex);

            string defaultVal = (((INodeAttributes) reader.NetworkAdjList).NodeData as DataTable).Columns[0].DefaultValue as string;
            Assert.Equal(defaultVal, mappedLabel);
        }
Example #23
0
        public void ReadArcString_Returns_False_For_Invalid_Input(string inputStr, int expectedSrcVtxNum, int expectedTargVtxNum)
        {
            //Arrange
            bool result = false;
            int srcV = -1;
            int targV = -1;
            double weight = double.NaN;

            NetFileReader reader = new NetFileReader();

            //Act
            result = reader.ReadArcString(inputStr, out srcV, out targV, out weight);

            //Assert
            Assert.False(result);
            Assert.Equal(expectedSrcVtxNum, srcV);
            Assert.Equal(expectedTargVtxNum, targV);
        }