public void DetectMinimumCircularDependencyBetweenTwoNodes() { var a = new Node { Name = "A" }; var b = new Node { Name = "B" }; a.Edges.Add(b); b.Edges.Add(a); var roots = new Roots(); roots.Entangle(a); var serializers = new Serializers(new SerializerFactory()); var stateMaps = new StateMaps(serializers); var persister = new Persister(new InMemoryStorageEngine(), roots, serializers, stateMaps); persister.DetectSerializeAndPersistChanges(); var circularChain = CircularDependencyDetector.Check(serializers[0], stateMaps, serializers); circularChain.IsCircular.ShouldBeTrue(); circularChain.Path.Count().ShouldBe(3); circularChain.ToString().ShouldBe("A->B->A"); }
public void DetectCircularDependencyInComplexGraph() { var a = new Node { Name = "A" }; var b = new Node { Name = "B" }; var c = new Node { Name = "C" }; var d = new Node { Name = "D" }; var e = new Node { Name = "E" }; var f = new Node { Name = "F" }; var g = new Node { Name = "G" }; var h = new Node { Name = "H" }; a.Add(b); a.Add(c); c.Add(g); c.Add(f); g.Add(b); b.Add(d); d.Add(h); d.Add(f); f.Add(e); e.Add(d); var roots = new Roots(); roots.Entangle(a); var serializers = new Serializers(new SerializerFactory()); var stateMaps = new StateMaps(serializers); var persister = new Persister(new InMemoryStorageEngine(), roots, serializers, stateMaps); persister.DetectSerializeAndPersistChanges(); var circularChain = CircularDependencyDetector.Check(serializers[0], stateMaps, serializers); circularChain.IsCircular.ShouldBe(true); circularChain.Path.Count().ShouldBe(4); circularChain.ToString().ShouldBe("F->E->D->F"); }
public void DetectCircularDependencyOneNodeHavingMultipleOutgoingEdges() { var a = new Node { Name = "A" }; var b = new Node { Name = "B" }; var c = new Node { Name = "C" }; var d = new Node { Name = "D" }; a.Edges.Add(b); a.Edges.Add(d); b.Edges.Add(c); c.Edges.Add(b); var roots = new Roots(); roots.Entangle(a); var serializers = new Serializers(new SerializerFactory()); var stateMaps = new StateMaps(serializers); var persister = new Persister(new InMemoryStorageEngine(), roots, serializers, stateMaps); persister.DetectSerializeAndPersistChanges(); var circularChain = CircularDependencyDetector.Check(serializers[0], stateMaps, serializers); circularChain.IsCircular.ShouldBeTrue(); circularChain.Path.Count().ShouldBe(3); circularChain.ToString().ShouldBe("B->C->B"); }
public void Persist(bool checkForCircularDependencies = false) => _persister.DetectSerializeAndPersistChanges(checkForCircularDependencies);