public void Construction()
        {
            var graph = new DelegateBidirectionalIncidenceGraph <int, Edge <int> >(
                GetEmptyGetter <int, Edge <int> >(),
                GetEmptyGetter <int, Edge <int> >());

            AssertGraphProperties(graph);

            graph = new DelegateBidirectionalIncidenceGraph <int, Edge <int> >(
                GetEmptyGetter <int, Edge <int> >(),
                GetEmptyGetter <int, Edge <int> >(),
                false);
            AssertGraphProperties(graph, false);

            #region Local function

            void AssertGraphProperties <TVertex, TEdge>(
                DelegateBidirectionalIncidenceGraph <TVertex, TEdge> g,
                bool parallelEdges = true)
                where TEdge : IEdge <TVertex>
            {
                Assert.IsTrue(g.IsDirected);
                Assert.AreEqual(parallelEdges, g.AllowParallelEdges);
            }

            #endregion
        }
        public void ContainsVertex_Throws()
        {
            var graph = new DelegateBidirectionalIncidenceGraph <TestVertex, Edge <TestVertex> >(
                GetEmptyGetter <TestVertex, Edge <TestVertex> >(),
                GetEmptyGetter <TestVertex, Edge <TestVertex> >());

            ContainsVertex_Throws_Test(graph);
        }
        public void Degree_Throws()
        {
            var graph = new DelegateBidirectionalIncidenceGraph <EquatableTestVertex, Edge <EquatableTestVertex> >(
                GetEmptyGetter <EquatableTestVertex, Edge <EquatableTestVertex> >(),
                GetEmptyGetter <EquatableTestVertex, Edge <EquatableTestVertex> >());

            Degree_Throws_Test(graph);
        }
        public void OutEdge()
        {
            var data  = new GraphData <int, Edge <int> >();
            var graph = new DelegateBidirectionalIncidenceGraph <int, Edge <int> >(
                data.TryGetEdges,
                GetEmptyGetter <int, Edge <int> >());

            OutEdge_Test(data, graph);
        }
        public void TryGetInEdges()
        {
            var data  = new GraphData <int, Edge <int> >();
            var graph = new DelegateBidirectionalIncidenceGraph <int, Edge <int> >(
                GetEmptyGetter <int, Edge <int> >(),
                data.TryGetEdges);

            TryGetInEdges_Test(data, graph);
        }
        public void Degree()
        {
            var data1 = new GraphData <int, Edge <int> >();
            var data2 = new GraphData <int, Edge <int> >();
            var graph = new DelegateBidirectionalIncidenceGraph <int, Edge <int> >(
                data1.TryGetEdges,
                data2.TryGetEdges);

            Degree_Test(data1, data2, graph);
        }
        public void OutEdge_Throws()
        {
            var graph1 = new DelegateBidirectionalIncidenceGraph <TestVertex, Edge <TestVertex> >(
                GetEmptyGetter <TestVertex, Edge <TestVertex> >(),
                GetEmptyGetter <TestVertex, Edge <TestVertex> >());

            OutEdge_NullThrows_Test(graph1);

            var data   = new GraphData <int, Edge <int> >();
            var graph2 = new DelegateBidirectionalIncidenceGraph <int, Edge <int> >(
                data.TryGetEdges,
                GetEmptyGetter <int, Edge <int> >());

            OutEdge_Throws_Test(data, graph2);
        }
        public void InEdges_Throws()
        {
            var data   = new GraphData <int, Edge <int> >();
            var graph1 = new DelegateBidirectionalIncidenceGraph <int, Edge <int> >(
                GetEmptyGetter <int, Edge <int> >(),
                data.TryGetEdges);

            InEdges_Throws_Test(data, graph1);

            var graph2 = new DelegateBidirectionalIncidenceGraph <EquatableTestVertex, Edge <EquatableTestVertex> >(
                GetEmptyGetter <EquatableTestVertex, Edge <EquatableTestVertex> >(),
                GetEmptyGetter <EquatableTestVertex, Edge <EquatableTestVertex> >());

            InEdges_NullThrows_Test(graph2);
        }