public void Predicate()
        {
            var predicate = new ReversedResidualEdgePredicate <int, Edge <int> >(
                new Dictionary <Edge <int>, double>(),
                new Dictionary <Edge <int>, Edge <int> >());

            var edge12 = new Edge <int>(1, 2);
            var edge21 = new Edge <int>(2, 1);
            var edge13 = new Edge <int>(1, 3);
            var edge31 = new Edge <int>(3, 1);

            predicate.ReversedEdges.Add(edge12, edge21);
            predicate.ReversedEdges.Add(edge21, edge12);
            predicate.ReversedEdges.Add(edge13, edge31);
            predicate.ReversedEdges.Add(edge31, edge13);
            predicate.ResidualCapacities.Add(edge12, -12);
            predicate.ResidualCapacities.Add(edge21, 12);
            predicate.ResidualCapacities.Add(edge13, 0);
            predicate.ResidualCapacities.Add(edge31, 1);

            Assert.IsTrue(predicate.Test(edge12));
            Assert.IsFalse(predicate.Test(edge21));
            Assert.IsTrue(predicate.Test(edge13));
            Assert.IsFalse(predicate.Test(edge31));
        }
        public void Predicate_Throws()
        {
            var predicate = new ReversedResidualEdgePredicate <int, Edge <int> >(
                new Dictionary <Edge <int>, double>(),
                new Dictionary <Edge <int>, Edge <int> >());

            // ReSharper disable ReturnValueOfPureMethodIsNotUsed
            // ReSharper disable once AssignNullToNotNullAttribute
            Assert.Throws <ArgumentNullException>(() => predicate.Test(null));

            var edge12 = new Edge <int>(1, 2);

            Assert.Throws <KeyNotFoundException>(() => predicate.Test(edge12));

            predicate.ReversedEdges.Add(edge12, new Edge <int>(2, 1));
            Assert.Throws <KeyNotFoundException>(() => predicate.Test(edge12));
            // ReSharper restore ReturnValueOfPureMethodIsNotUsed
        }