public void Constructor_WeightedMarkovEdgeChains() { var weights = new Dictionary <Edge <int>, double>(); var chain1 = new WeightedMarkovEdgeChain <int, Edge <int> >(weights); Assert.AreSame(weights, chain1.Weights); var chain2 = new VanishingWeightedMarkovEdgeChain <int, Edge <int> >(weights); Assert.AreSame(weights, chain2.Weights); chain2 = new VanishingWeightedMarkovEdgeChain <int, Edge <int> >(weights, 2.0); Assert.AreSame(weights, chain2.Weights); }
public void VanishingWeightedMarkovEdgeChain() { var weights = new Dictionary <EquatableEdge <int>, double> { [new EquatableEdge <int>(1, 2)] = 1.0, [new EquatableEdge <int>(1, 3)] = 2.0, [new EquatableEdge <int>(2, 3)] = -1.0, [new EquatableEdge <int>(2, 5)] = 10.0, [new EquatableEdge <int>(3, 4)] = 5.0, [new EquatableEdge <int>(4, 3)] = 25.0, [new EquatableEdge <int>(4, 5)] = 2.0, [new EquatableEdge <int>(4, 7)] = 1.0, [new EquatableEdge <int>(5, 2)] = 3.0, [new EquatableEdge <int>(5, 6)] = 1.0, [new EquatableEdge <int>(6, 7)] = 1.5, [new EquatableEdge <int>(7, 4)] = 0.25, [new EquatableEdge <int>(8, 3)] = 1.0 }; IVertexAndEdgeListGraph <int, EquatableEdge <int> > graph1 = CreateGraph1(); var chain = new VanishingWeightedMarkovEdgeChain <int, EquatableEdge <int> >(weights) { Rand = new Random(123456) }; Assert.IsTrue(chain.TryGetSuccessor(graph1, 1, out EquatableEdge <int> edge)); Assert.AreEqual(1, edge.Source); Assert.AreEqual(2, edge.Target); Assert.IsTrue(chain.TryGetSuccessor(graph1, 2, out edge)); Assert.AreEqual(2, edge.Source); Assert.AreEqual(5, edge.Target); Assert.IsTrue(chain.TryGetSuccessor(graph1, 5, out edge)); Assert.AreEqual(5, edge.Source); Assert.AreEqual(6, edge.Target); Assert.IsTrue(chain.TryGetSuccessor(graph1, 6, out edge)); Assert.AreEqual(6, edge.Source); Assert.AreEqual(7, edge.Target); Assert.IsTrue(chain.TryGetSuccessor(graph1, 7, out edge)); Assert.AreEqual(7, edge.Source); Assert.AreEqual(4, edge.Target); Assert.IsTrue(chain.TryGetSuccessor(graph1, 4, out edge)); Assert.AreEqual(4, edge.Source); Assert.AreEqual(3, edge.Target); Assert.IsFalse(chain.TryGetSuccessor(graph1, 3, out edge)); weights = new Dictionary <EquatableEdge <int>, double> { [new EquatableEdge <int>(1, 2)] = 1.0, [new EquatableEdge <int>(1, 3)] = 2.0, [new EquatableEdge <int>(2, 3)] = -1.0, [new EquatableEdge <int>(2, 5)] = 10.0, [new EquatableEdge <int>(3, 4)] = 5.0, [new EquatableEdge <int>(4, 3)] = 25.0, [new EquatableEdge <int>(4, 5)] = 2.0, [new EquatableEdge <int>(4, 7)] = 1.0, [new EquatableEdge <int>(5, 2)] = 3.0, [new EquatableEdge <int>(5, 6)] = 1.0, [new EquatableEdge <int>(6, 7)] = 1.5, [new EquatableEdge <int>(7, 4)] = 0.25, [new EquatableEdge <int>(8, 3)] = 1.0 }; chain = new VanishingWeightedMarkovEdgeChain <int, EquatableEdge <int> >(weights) { Rand = new Random(123456) }; EquatableEdge <int>[] edges = graph1.Edges.ToArray(); Assert.IsTrue(chain.TryGetSuccessor(edges, 1, out edge)); Assert.AreEqual(2, edge.Source); Assert.AreEqual(5, edge.Target); Assert.IsTrue(chain.TryGetSuccessor(edges, 5, out edge)); Assert.AreEqual(2, edge.Source); Assert.AreEqual(5, edge.Target); Assert.IsTrue(chain.TryGetSuccessor(edges, 5, out edge)); Assert.AreEqual(1, edge.Source); Assert.AreEqual(3, edge.Target); // etc. Assert.IsFalse(chain.TryGetSuccessor(Enumerable.Empty <EquatableEdge <int> >(), 1, out _)); IVertexAndEdgeListGraph <int, EquatableEdge <int> > graph2 = CreateGraph2(); weights = new Dictionary <EquatableEdge <int>, double> { [new EquatableEdge <int>(1, 2)] = 1.0, [new EquatableEdge <int>(1, 3)] = 2.0, [new EquatableEdge <int>(2, 3)] = -1.0, [new EquatableEdge <int>(2, 5)] = 10.0, [new EquatableEdge <int>(3, 4)] = 5.0, [new EquatableEdge <int>(4, 3)] = 25.0, [new EquatableEdge <int>(4, 5)] = 2.0, [new EquatableEdge <int>(4, 7)] = 1.0, [new EquatableEdge <int>(5, 2)] = 3.0, [new EquatableEdge <int>(5, 6)] = 1.0, [new EquatableEdge <int>(6, 7)] = 1.5, [new EquatableEdge <int>(7, 4)] = 0.25, [new EquatableEdge <int>(8, 3)] = 1.0 }; chain = new VanishingWeightedMarkovEdgeChain <int, EquatableEdge <int> >(weights) { Rand = new Random(123456) }; Assert.IsTrue(chain.TryGetSuccessor(graph2, 1, out edge)); Assert.AreEqual(1, edge.Source); Assert.AreEqual(2, edge.Target); Assert.IsFalse(chain.TryGetSuccessor(graph2, 2, out edge)); weights = new Dictionary <EquatableEdge <int>, double> { [new EquatableEdge <int>(1, 2)] = 1.0, [new EquatableEdge <int>(1, 3)] = 2.0, [new EquatableEdge <int>(2, 3)] = -1.0, [new EquatableEdge <int>(2, 5)] = 10.0, [new EquatableEdge <int>(3, 4)] = 5.0, [new EquatableEdge <int>(4, 3)] = 25.0, [new EquatableEdge <int>(4, 5)] = 2.0, [new EquatableEdge <int>(4, 7)] = 1.0, [new EquatableEdge <int>(5, 2)] = 3.0, [new EquatableEdge <int>(5, 6)] = 1.0, [new EquatableEdge <int>(6, 7)] = 1.5, [new EquatableEdge <int>(7, 4)] = 0.25, [new EquatableEdge <int>(8, 3)] = 1.0 }; chain = new VanishingWeightedMarkovEdgeChain <int, EquatableEdge <int> >(weights) { Rand = new Random(123456) }; edges = graph2.Edges.ToArray(); Assert.IsTrue(chain.TryGetSuccessor(edges, 1, out edge)); Assert.AreEqual(3, edge.Source); Assert.AreEqual(4, edge.Target); Assert.IsTrue(chain.TryGetSuccessor(edges, 4, out edge)); Assert.AreEqual(1, edge.Source); Assert.AreEqual(3, edge.Target); Assert.IsTrue(chain.TryGetSuccessor(edges, 3, out edge)); Assert.AreEqual(1, edge.Source); Assert.AreEqual(2, edge.Target); Assert.IsTrue(chain.TryGetSuccessor(edges, 2, out edge)); Assert.AreEqual(5, edge.Source); Assert.AreEqual(2, edge.Target); // Etc. }