public void ContainsVertex()
        {
            var graph = new TransitionFactoryImplicitGraph <CloneableTestVertex, Edge <CloneableTestVertex> >();

            var vertex1      = new CloneableTestVertex("1");
            var vertex2      = new CloneableTestVertex("2");
            var otherVertex1 = new CloneableTestVertex("1");
            var vertex3      = new CloneableTestVertex("3");
            var vertex4      = new CloneableTestVertex("4");

            var edge34 = new Edge <CloneableTestVertex>(vertex3, vertex4);

            Assert.IsFalse(graph.ContainsVertex(vertex1));
            Assert.IsFalse(graph.ContainsVertex(vertex2));
            Assert.IsFalse(graph.ContainsVertex(otherVertex1));
            Assert.IsFalse(graph.ContainsVertex(vertex3));
            Assert.IsFalse(graph.ContainsVertex(vertex4));

            var factory1 = new TestTransitionFactory <CloneableTestVertex>(vertex1, Enumerable.Empty <Edge <CloneableTestVertex> >());

            graph.AddTransitionFactory(factory1);
            Assert.IsFalse(graph.ContainsVertex(vertex1));  // Not explored yet
            Assert.IsFalse(graph.ContainsVertex(vertex2));
            Assert.IsFalse(graph.ContainsVertex(otherVertex1));
            Assert.IsFalse(graph.ContainsVertex(vertex3));
            Assert.IsFalse(graph.ContainsVertex(vertex4));

            // ReSharper disable once ReturnValueOfPureMethodIsNotUsed
            graph.OutEdges(vertex1);

            Assert.IsTrue(graph.ContainsVertex(vertex1));
            Assert.IsFalse(graph.ContainsVertex(vertex2));
            Assert.IsFalse(graph.ContainsVertex(otherVertex1));
            Assert.IsFalse(graph.ContainsVertex(vertex3));
            Assert.IsFalse(graph.ContainsVertex(vertex4));

            var factory2 = new TestTransitionFactory <CloneableTestVertex>(vertex2, Enumerable.Empty <Edge <CloneableTestVertex> >());

            graph.AddTransitionFactory(factory2);
            Assert.IsTrue(graph.ContainsVertex(vertex1));
            Assert.IsFalse(graph.ContainsVertex(vertex2));  // Not explored yet
            Assert.IsFalse(graph.ContainsVertex(otherVertex1));
            Assert.IsFalse(graph.ContainsVertex(vertex3));
            Assert.IsFalse(graph.ContainsVertex(vertex4));

            // ReSharper disable once ReturnValueOfPureMethodIsNotUsed
            graph.OutEdges(vertex2);

            Assert.IsTrue(graph.ContainsVertex(vertex1));
            Assert.IsTrue(graph.ContainsVertex(vertex2));
            Assert.IsFalse(graph.ContainsVertex(otherVertex1));
            Assert.IsFalse(graph.ContainsVertex(vertex3));
            Assert.IsFalse(graph.ContainsVertex(vertex4));

            var factoryOther1 = new TestTransitionFactory <CloneableTestVertex>(otherVertex1, Enumerable.Empty <Edge <CloneableTestVertex> >());

            graph.AddTransitionFactory(factoryOther1);
            Assert.IsTrue(graph.ContainsVertex(vertex1));
            Assert.IsTrue(graph.ContainsVertex(vertex2));
            Assert.IsFalse(graph.ContainsVertex(otherVertex1)); // Not explored yet
            Assert.IsFalse(graph.ContainsVertex(vertex3));
            Assert.IsFalse(graph.ContainsVertex(vertex4));

            // ReSharper disable once ReturnValueOfPureMethodIsNotUsed
            graph.OutEdges(otherVertex1);

            Assert.IsTrue(graph.ContainsVertex(vertex1));
            Assert.IsTrue(graph.ContainsVertex(vertex2));
            Assert.IsTrue(graph.ContainsVertex(otherVertex1));
            Assert.IsFalse(graph.ContainsVertex(vertex3));
            Assert.IsFalse(graph.ContainsVertex(vertex4));

            var factory3 = new TestTransitionFactory <CloneableTestVertex>(vertex3, new[] { edge34 });

            graph.AddTransitionFactory(factory3);
            Assert.IsTrue(graph.ContainsVertex(vertex1));
            Assert.IsTrue(graph.ContainsVertex(vertex2));
            Assert.IsTrue(graph.ContainsVertex(otherVertex1));
            Assert.IsFalse(graph.ContainsVertex(vertex3));  // Not explored yet
            Assert.IsFalse(graph.ContainsVertex(vertex4));

            // ReSharper disable once ReturnValueOfPureMethodIsNotUsed
            graph.OutEdges(vertex3);

            Assert.IsTrue(graph.ContainsVertex(vertex1));
            Assert.IsTrue(graph.ContainsVertex(vertex2));
            Assert.IsTrue(graph.ContainsVertex(otherVertex1));
            Assert.IsTrue(graph.ContainsVertex(vertex3));
            Assert.IsTrue(graph.ContainsVertex(vertex4));   // Discovered when requesting vertex3
        }