/// <summary> /// Generate the relevant cycle basis from a precomputed set of initial /// cycles. /// </summary> /// <param name="initial">set of initial cycles.</param> /// <exception cref="System.ArgumentNullException">null InitialCycles provided</exception> internal RelevantCycles(InitialCycles initial) { CheckNotNull(initial, nameof(initial), "No InitialCycles provided"); this.basis = new GreedyBasis(initial.GetNumberOfCycles(), initial.GetNumberOfEdges()); // processing by size add cycles which are independent of smaller cycles foreach (var length in initial.Lengths) { basis.AddAll(Independent(initial.GetCyclesOfLength(length))); } }
public virtual void AddAll() { var c1 = new Mock <Cycle>((InitialCycles)null, (ShortestPaths)null, (int[])null); var c2 = new Mock <Cycle>((InitialCycles)null, (ShortestPaths)null, (int[])null); c1.SetupGet(c => c.EdgeVector).Returns(new BitArray(0)); c1.SetupGet(c => c.EdgeVector).Returns(new BitArray(0)); c2.SetupGet(c => c.EdgeVector).Returns(new BitArray(0)); var basis = new GreedyBasis(2, 0); Assert.IsTrue(basis.Members.Count == 0); basis.AddAll(new[] { c1.Object, c2.Object }); Assert.IsTrue(basis.Members.Contains(c1.Object)); Assert.IsTrue(basis.Members.Contains(c2.Object)); }