Free cookie consent management tool by TermsFeed Policy Generator

source: branches/ContextAlgorithms/HeuristicLab.Tests/HeuristicLab.IGraph/IGraphWrappersGraphTest.cs @ 15624

Last change on this file since 15624 was 15624, checked in by abeham, 6 years ago

#2645: created branch

File size: 6.3 KB
RevLine 
[14276]1#region License Information
2/* HeuristicLab
[15583]3 * Copyright (C) 2002-2018 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
[14276]4 *
5 * This file is part of HeuristicLab.
6 *
7 * HeuristicLab is free software: you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation, either version 3 of the License, or
10 * (at your option) any later version.
11 *
12 * HeuristicLab is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
19 */
20#endregion
21
22using System;
[14277]23using System.Collections.Generic;
[14276]24using HeuristicLab.Common;
25using HeuristicLab.IGraph.Wrappers;
26using Microsoft.VisualStudio.TestTools.UnitTesting;
27
28namespace HeuristicLab.Tests {
29  [TestClass]
30  public class IGraphWrappersGraphTest {
31    [TestMethod]
[14277]32    [TestCategory("ExtLibs")]
33    [TestCategory("ExtLibs.igraph")]
34    [TestProperty("Time", "short")]
35    public void IGraphWrappersGraphConstructionAndFinalizationTest() {
[15191]36      using (var graph = new Graph(5, new[] {
[14276]37        Tuple.Create(0, 1),
38        Tuple.Create(0, 2),
39        Tuple.Create(1, 2),
40        Tuple.Create(2, 3),
41        Tuple.Create(2, 4),
42        Tuple.Create(3, 4),
[15191]43      })) {
44        Assert.AreEqual(5, graph.Vertices);
45        Assert.IsFalse(graph.IsDirected);
46      }
[14276]47
[15191]48      using (var graph = new Graph(3, new[] {
[14276]49        Tuple.Create(0, 1),
50        Tuple.Create(0, 2),
51        Tuple.Create(1, 2),
[15191]52      }, directed: true)) {
53        Assert.AreEqual(3, graph.Vertices);
54        Assert.IsTrue(graph.IsDirected);
55      }
[14276]56    }
57
58    [TestMethod]
[14277]59    [TestCategory("ExtLibs")]
60    [TestCategory("ExtLibs.igraph")]
61    [TestProperty("Time", "short")]
62    public void IGraphWrappersGraphDensityTest() {
[15191]63      using (var graph = new Graph(5, new[] {
[14276]64        Tuple.Create(0, 1),
65        Tuple.Create(0, 2),
66        Tuple.Create(1, 2),
67        Tuple.Create(2, 3),
68        Tuple.Create(2, 4),
69        Tuple.Create(3, 4),
[15191]70      })) {
[14276]71
[15191]72        var density = graph.Density();
73        // in un-directed graphs edges count twice
74        Assert.IsTrue(density.IsAlmost(12 / 20.0));
75      }
[14276]76
[15191]77      using (var graph = new Graph(5, new[] {
[14276]78        Tuple.Create(0, 1),
79        Tuple.Create(0, 2),
80        Tuple.Create(1, 2),
81        Tuple.Create(2, 3),
82        Tuple.Create(2, 4),
83        Tuple.Create(3, 4),
[15191]84      }, directed: true)) {
[14276]85
[15191]86        var density = graph.Density();
87        // in directed graphs edges count twice
88        Assert.IsTrue(density.IsAlmost(6 / 20.0));
89      }
[14276]90    }
91
92    [TestMethod]
[14277]93    [TestCategory("ExtLibs")]
94    [TestCategory("ExtLibs.igraph")]
95    [TestProperty("Time", "short")]
96    public void IGraphWrappersGraphPageRankTest() {
[15191]97      using (var graph = new Graph(4, new[] {
[14276]98        Tuple.Create(0, 1),
99        Tuple.Create(0, 2),
100        Tuple.Create(1, 2),
101        Tuple.Create(2, 0),
102        Tuple.Create(3, 2),
[15191]103      }, directed: true)) {
104        var ranks = graph.PageRank();
105        Assert.AreEqual(4, ranks.Length);
106        Assert.AreEqual(0.372, ranks[0], 0.01);
107        Assert.AreEqual(0.195, ranks[1], 0.01);
108        Assert.AreEqual(0.394, ranks[2], 0.01);
109        Assert.AreEqual(0.037, ranks[3], 0.01);
110      }
111      using (var graph = new Graph(4, new[] {
[14276]112        Tuple.Create(0, 1),
113        Tuple.Create(1, 2),
114        Tuple.Create(2, 3),
115        Tuple.Create(3, 0),
[15191]116      }, directed: true)) {
117        var ranks = graph.PageRank();
118        Assert.AreEqual(4, ranks.Length);
119        Assert.AreEqual(0.250, ranks[0], 0.01);
120        Assert.AreEqual(0.250, ranks[1], 0.01);
121        Assert.AreEqual(0.250, ranks[2], 0.01);
122        Assert.AreEqual(0.250, ranks[3], 0.01);
123      }
124      using (var graph = new Graph(4, new[] {
[14276]125        Tuple.Create(0, 1),
126        Tuple.Create(0, 2),
127        Tuple.Create(0, 3),
128        Tuple.Create(1, 0),
129        Tuple.Create(2, 0),
130        Tuple.Create(3, 0),
[15191]131      }, directed: true)) {
132        var ranks = graph.PageRank();
133        Assert.AreEqual(4, ranks.Length);
134        Assert.AreEqual(0.480, ranks[0], 0.01);
135        Assert.AreEqual(0.173, ranks[1], 0.01);
136        Assert.AreEqual(0.173, ranks[2], 0.01);
137        Assert.AreEqual(0.173, ranks[3], 0.01);
138      }
[14276]139    }
[14277]140
141    [TestMethod]
142    [TestCategory("ExtLibs")]
143    [TestCategory("ExtLibs.igraph")]
144    [TestProperty("Time", "short")]
145    public void IGraphWrappersGraphBreadthFirstWalkTest() {
[15191]146      using (var graph = new Graph(4, new[] {
[14277]147        Tuple.Create(0, 1),
148        Tuple.Create(0, 2),
149        Tuple.Create(1, 2),
150        Tuple.Create(2, 0),
151        Tuple.Create(3, 2),
[15191]152      }, directed: true)) {
153        var visited = new HashSet<int>();
154        BreadthFirstHandler handler = (graph1, currentVertexId, previousVertexId, nextVertexId, rank, distance, tag) => {
155          visited.Add(currentVertexId);
156          return false;
157        };
158        graph.BreadthFirstWalk(handler, 0, DirectedWalkMode.All, true, null);
159        Assert.AreEqual(4, visited.Count);
160        Assert.IsTrue(visited.Contains(0));
161        Assert.IsTrue(visited.Contains(1));
162        Assert.IsTrue(visited.Contains(2));
163        Assert.IsTrue(visited.Contains(3));
164      }
[14277]165    }
166
167    [TestMethod]
168    [TestCategory("ExtLibs")]
169    [TestCategory("ExtLibs.igraph")]
170    [TestProperty("Time", "short")]
171    public void IGraphWrappersGraphDepthFirstWalkTest() {
[15191]172      using (var graph = new Graph(4, new[] {
[14277]173        Tuple.Create(0, 1),
174        Tuple.Create(0, 2),
175        Tuple.Create(1, 2),
176        Tuple.Create(2, 0),
177        Tuple.Create(3, 2),
[15191]178      }, directed: true)) {
179        var visited = new HashSet<int>();
180        DepthFirstHandler handler = (graph1, vertexId, distance, tag) => {
181          visited.Add(vertexId);
182          return false;
183        };
184        graph.DepthFirstWalk(handler, handler, 0, DirectedWalkMode.All, true, null);
185        Assert.AreEqual(4, visited.Count);
186        Assert.IsTrue(visited.Contains(0));
187        Assert.IsTrue(visited.Contains(1));
188        Assert.IsTrue(visited.Contains(2));
189        Assert.IsTrue(visited.Contains(3));
190      }
[14277]191    }
[14276]192  }
193}
Note: See TracBrowser for help on using the repository browser.