public void JointProbabilityOfEdgeExcessDegreeFollowsProbabilityRules() { Graph g = new ErGraph(100, 0.15, new Randomizer()); TestGraphs.Add(g); double total = 0; for (int i = 0; i <= 100; i++) { for (int j = 0; j <= 100; j++) { total += g.GetEdgeExcessNodeDegreeProbability(i, j); } } Assert.AreEqual(1.0, total, Tolerance); for (int i = 0; i <= 100; i++) { total = 0; for (int j = 0; j <= 100; j++) { total += g.GetEdgeExcessNodeDegreeProbability(i, j); } Assert.AreEqual(total, g.GetEdgeExcessNodeDegreeProbability(i), Tolerance); } Assert.IsTrue(AllGraphsHaveNoZeroDegreeNodes()); }
public void ClonedGraphHasSameDegreeVector() { Randomizer r = new Randomizer(); Graph g = new ErGraph(50, .01, r); Graph g2 = g.Clone(); Assert.AreEqual(String.Join(",", g.DegreeVector), string.Join(",", g2.DegreeVector)); foreach (var edge in g.Edges) { Assert.IsTrue(g2.Edges.Any(e => e.Item1 == edge.Item1 && e.Item2 == edge.Item2)); } }
public void EdgeTuplesOfErGraphMatchForEdgeNodeProbability() { Randomizer r = new Randomizer(); ErGraph graph = new ErGraph(100, 0.15, r); Dictionary <int, double> erGraphEdgeNodeProbability = graph.Edges.SelectMany(t => new List <Node> { graph.Nodes.First(n => n.Id == t.Item1), graph.Nodes.First(n => n.Id == t.Item2) }).GroupBy(n => n.Degree).ToDictionary(g => g.Key, g => (double)g.Count() / (graph.Edges.Count() * 2)); Assert.IsTrue( erGraphEdgeNodeProbability.All( kvp => Math.Abs(kvp.Value - graph.GetEdgeNodeDegreeProbability(kvp.Key)) < Tolerance)); }
public void GraphAssortativityOfRandomGraphsIsInRange() { Randomizer rand = new Randomizer(); for (int i = 0; i < 10; i++) { ErGraph erg = new ErGraph((int)(rand.NextDouble() * 300 + 20), rand.NextDouble() * 0.4, new Randomizer(new Random(rand.Next()))); TestGraphs.Add(erg); Assert.IsTrue(-1 <= erg.GraphAssortativity && erg.GraphAssortativity <= 1); Assert.IsTrue(-1 <= erg.GraphAssortativity2() && erg.GraphAssortativity2() <= 1); Assert.IsTrue(Math.Abs(erg.GraphAssortativity - erg.GraphAssortativity2()) < Tolerance); BaGraph bag = new BaGraph((int)(rand.NextDouble() * 20 + 2), new Randomizer(new Random(rand.Next())), (int)(rand.NextDouble() * 800 + 100)); TestGraphs.Add(bag); Assert.IsTrue(-1 <= bag.GraphAssortativity && bag.GraphAssortativity <= 1); Assert.IsTrue(-1 <= bag.GraphAssortativity2() && bag.GraphAssortativity2() <= 1); Assert.IsTrue(Math.Abs(bag.GraphAssortativity - bag.GraphAssortativity2()) < Tolerance); } Assert.IsTrue(AllGraphsHaveNoZeroDegreeNodes()); }
public void IterativeSwappingMaintainsDegreeVector() { Randomizer rand = new Randomizer(); // Random graphs for (int i = 0; i < 10; i++) { ErGraph erg = new ErGraph((int)(rand.NextDouble() * 300 + 20), rand.NextDouble() * 0.4, new Randomizer(new Random(rand.Next()))); TestGraphs.Add(erg); string prevVector = String.Join(",", erg.DegreeVector); erg.IterativelySwapEdgesToIncreaseAssortativity(); Assert.AreEqual(prevVector, String.Join(",", erg.DegreeVector)); BaGraph bag = new BaGraph((int)(rand.NextDouble() * 20 + 2), new Randomizer(new Random(rand.Next())), (int)(rand.NextDouble() * 800 + 100)); TestGraphs.Add(bag); prevVector = String.Join(",", erg.DegreeVector); erg.IterativelySwapEdgesToIncreaseAssortativity(); Assert.AreEqual(prevVector, String.Join(",", erg.DegreeVector)); } Assert.IsTrue(AllGraphsHaveNoZeroDegreeNodes()); }
public void ErGraphHasCorrectVectorSizeAfterBeingCreated() { ErGraph g = new ErGraph(100, 0.15, new Randomizer()); Assert.AreEqual(100, g.DegreeVector.Count()); }