public void DisjoinsCriteria()
        {
            var spec1 = new IntegerPredicate(i => i == 0);
            var spec2 = new IntegerPredicate(i => i > 0);

            var criteria1 = spec1.Criteria;
            var criteria2 = spec2.Criteria;

            var disjoinedSpec = new ExclusiveDisjunction<int>(spec1, spec2);
            var disjoinedCriteria = disjoinedSpec.Criteria;

            Assert.That(disjoinedCriteria.Body, Is.AssignableTo<BinaryExpression>());

            var binary = (BinaryExpression)disjoinedCriteria.Body;

            Assert.That(binary.NodeType, Is.EqualTo(ExpressionType.ExclusiveOr));
            Assert.That(binary.Conversion, Is.Null);
            Assert.That(binary.Left.ToString(), Is.EqualTo(criteria1.Body.ToString()));
            Assert.That(binary.Right.ToString(), Is.EqualTo(criteria2.Body.ToString()));
            Assert.That(binary.Method, Is.Null);
            Assert.That(binary.IsLifted, Is.False);
            Assert.That(binary.IsLiftedToNull, Is.False);

            ExpressionWriter.Write(disjoinedCriteria);
        }
        public void SelectsExclusiveDisjunction()
        {
            var spec1 = new IntegerPredicate(i => i > 1);
            var spec2 = new IntegerPredicate(i => i > 0);
            var disjoinedSpec = new ExclusiveDisjunction<int>(spec1, spec2);

            Assert.That(disjoinedSpec.IsSatisfiedBy(2), Is.False);
            Assert.That(disjoinedSpec.IsSatisfiedBy(1), Is.True);
            Assert.That(disjoinedSpec.IsSatisfiedBy(-1), Is.False);
        }