public void Simple()
        {
            var g = new MfGraphInt(4);

            g.AddEdge(0, 1, 1).Should().Be(0);
            g.AddEdge(0, 2, 1).Should().Be(1);
            g.AddEdge(1, 3, 1).Should().Be(2);
            g.AddEdge(2, 3, 1).Should().Be(3);
            g.AddEdge(1, 2, 1).Should().Be(4);
            g.Flow(0, 3).Should().Be(2);

            MfGraphInt.Edge e;
            e = new MfGraphInt.Edge(0, 1, 1, 1);
            g.GetEdge(0).Should().Be(e);
            e = new MfGraphInt.Edge(0, 2, 1, 1);
            g.GetEdge(1).Should().Be(e);
            e = new MfGraphInt.Edge(1, 3, 1, 1);
            g.GetEdge(2).Should().Be(e);
            e = new MfGraphInt.Edge(2, 3, 1, 1);
            g.GetEdge(3).Should().Be(e);
            e = new MfGraphInt.Edge(1, 2, 1, 0);
            g.GetEdge(4).Should().Be(e);

            g.MinCut(0).Should().Equal(new[] { true, false, false, false });
        }
        public void SelfLoop()
        {
            var g = new MfGraphInt(3);

            g.AddEdge(0, 0, 100).Should().Be(0);

            MfGraphInt.Edge e = new MfGraphInt.Edge(0, 0, 100, 0);
            g.GetEdge(0).Should().Be(e);
        }
        public void Bound()
        {
            MfGraphInt.Edge e;

            const int INF = int.MaxValue;
            var       g   = new MfGraphInt(3);

            g.AddEdge(0, 1, INF).Should().Be(0);
            g.AddEdge(1, 0, INF).Should().Be(1);
            g.AddEdge(0, 2, INF).Should().Be(2);

            g.Flow(0, 2).Should().Be(INF);

            e = new MfGraphInt.Edge(0, 1, INF, 0);
            g.GetEdge(0).Should().Be(e);
            e = new MfGraphInt.Edge(1, 0, INF, 0);
            g.GetEdge(1).Should().Be(e);
            e = new MfGraphInt.Edge(0, 2, INF, INF);
            g.GetEdge(2).Should().Be(e);
        }