Пример #1
0
        public void NestedSelectStoreConstructedProperly()
        {
            var nested = a.Store(k, v).Select(k);

            ExpressionTestHelper.CheckExpression(
                nested.Expression,
                ExpressionKind.Select,
                Sort.Bool,
                "(select (store a k v) k)",
                2);

            var storeAKV = nested.Expression.Children.ElementAt(0);

            ExpressionTestHelper.CheckExpressionWithChildren(
                storeAKV,
                ExpressionKind.Store,
                arraySort,
                "(store a k v)",
                a.Expression,
                k.Expression,
                v.Expression);

            var kExpr = nested.Expression.Children.ElementAt(1);

            Assert.AreEqual(k, kExpr);
        }
Пример #2
0
        public void NotOperatorConstructedProperly()
        {
            var notA = !a;

            ExpressionTestHelper.CheckExpressionWithChildren(
                notA.Expression,
                ExpressionKind.Not,
                Sort.Bool,
                "(not a)",
                a.Expression);
        }
Пример #3
0
        public void NegateOperatorConstructedProperly()
        {
            var negateA = -a;

            ExpressionTestHelper.CheckExpressionWithChildren(
                negateA.Expression,
                ExpressionKind.Negate,
                Sort.Int,
                "(- a)",
                a.Expression);
        }
Пример #4
0
        public void DistinctOperatorConstructedProperly()
        {
            var aNeqB = (a != b);

            ExpressionTestHelper.CheckExpressionWithChildren(
                aNeqB.Expression,
                ExpressionKind.Distinct,
                Sort.Bool,
                "(distinct a b)",
                a.Expression,
                b.Expression);
        }
Пример #5
0
        public void GreaterThanOrEqualOperatorConstructedProperly()
        {
            var aGteB = a >= b;

            ExpressionTestHelper.CheckExpressionWithChildren(
                aGteB.Expression,
                ExpressionKind.GreaterThanOrEqual,
                Sort.Bool,
                "(>= a b)",
                a.Expression,
                b.Expression);
        }
Пример #6
0
        public void LessThanOrEqualOperatorConstructedProperly()
        {
            var aLtB = a <= b;

            ExpressionTestHelper.CheckExpressionWithChildren(
                aLtB.Expression,
                ExpressionKind.LessThanOrEqual,
                Sort.Bool,
                "(<= a b)",
                a.Expression,
                b.Expression);
        }
Пример #7
0
        public void SubtractOperatorConstructedProperly()
        {
            var aSubtractB = a - b;

            ExpressionTestHelper.CheckExpressionWithChildren(
                aSubtractB.Expression,
                ExpressionKind.Subtract,
                Sort.Int,
                "(- a b)",
                a.Expression,
                b.Expression);
        }
Пример #8
0
        public void ModulusOperatorConstructedProperly()
        {
            var aModuloB = a % b;

            ExpressionTestHelper.CheckExpressionWithChildren(
                aModuloB.Expression,
                ExpressionKind.Modulus,
                Sort.Int,
                "(mod a b)",
                a.Expression,
                b.Expression);
        }
Пример #9
0
        public void OrOperatorConstructedProperly()
        {
            var aOrB = a || b;

            ExpressionTestHelper.CheckExpressionWithChildren(
                aOrB.Expression,
                ExpressionKind.Or,
                Sort.Bool,
                "(or a b)",
                a.Expression,
                b.Expression);
        }
Пример #10
0
        public void XorOperatorConstructedProperly()
        {
            var aXorB = a ^ b;

            ExpressionTestHelper.CheckExpressionWithChildren(
                aXorB.Expression,
                ExpressionKind.Xor,
                Sort.Bool,
                "(xor a b)",
                a.Expression,
                b.Expression);
        }
Пример #11
0
        public void RemainderOperatorConstructedProperly()
        {
            var aRemainderB = a.Remainder(b);

            ExpressionTestHelper.CheckExpressionWithChildren(
                aRemainderB.Expression,
                ExpressionKind.Remainder,
                Sort.Int,
                "(rem a b)",
                a.Expression,
                b.Expression);
        }
Пример #12
0
        public void DivideRealOperatorConstructedProperly()
        {
            var aDivideRealB = a.DivideReal(b);

            ExpressionTestHelper.CheckExpressionWithChildren(
                aDivideRealB.Expression,
                ExpressionKind.DivideReal,
                Sort.Real,
                "(/ a b)",
                a.Expression,
                b.Expression);
        }
Пример #13
0
        public void SelectConstructedProperly()
        {
            var selectAK = a.Select(k);

            ExpressionTestHelper.CheckExpressionWithChildren(
                selectAK.Expression,
                ExpressionKind.Select,
                Sort.Bool,
                "(select a k)",
                a.Expression,
                k.Expression);
        }
Пример #14
0
        public void MultiplyOperatorConstructedProperly()
        {
            var aMultiplyB = a * b;

            ExpressionTestHelper.CheckExpressionWithChildren(
                aMultiplyB.Expression,
                ExpressionKind.Multiply,
                Sort.Int,
                "(* a b)",
                a.Expression,
                b.Expression);
        }
Пример #15
0
        public void AndOperatorConstructedProperly()
        {
            var aAndB = a && b;

            ExpressionTestHelper.CheckExpressionWithChildren(
                aAndB.Expression,
                ExpressionKind.And,
                Sort.Bool,
                "(and a b)",
                a.Expression,
                b.Expression);
        }
Пример #16
0
        public void AddOperatorConstructedProperly()
        {
            var aAddB = a + b;

            ExpressionTestHelper.CheckExpressionWithChildren(
                aAddB.Expression,
                ExpressionKind.Add,
                Sort.Int,
                "(+ a b)",
                a.Expression,
                b.Expression);
        }
Пример #17
0
        public void DivideIntegerOperatorConstructedProperly()
        {
            var aDivideIntegerB = a / b;

            ExpressionTestHelper.CheckExpressionWithChildren(
                aDivideIntegerB.Expression,
                ExpressionKind.DivideInteger,
                Sort.Int,
                "(div a b)",
                a.Expression,
                b.Expression);
        }
Пример #18
0
        public void EqualOperatorConstructedProperly()
        {
            var aEqB = (a == b);

            ExpressionTestHelper.CheckExpressionWithChildren(
                aEqB.Expression,
                ExpressionKind.Equal,
                Sort.Bool,
                "(= a b)",
                a.Expression,
                b.Expression);
        }
Пример #19
0
        public void ImpliesOperatorConstructedProperly()
        {
            var aImpliesB = a.Implies(b);

            ExpressionTestHelper.CheckExpressionWithChildren(
                aImpliesB.Expression,
                ExpressionKind.Implies,
                Sort.Bool,
                "(=> a b)",
                a.Expression,
                b.Expression);
        }
Пример #20
0
        public void OrOperatorMergedProperly()
        {
            var orABC = a || b || c;

            ExpressionTestHelper.CheckExpressionWithChildren(
                orABC.Expression,
                ExpressionKind.Or,
                Sort.Bool,
                "(or a b c)",
                a.Expression,
                b.Expression,
                c.Expression);
        }
Пример #21
0
        public void StoreConstructedProperly()
        {
            var storeAKV = a.Store(k, v);

            ExpressionTestHelper.CheckExpressionWithChildren(
                storeAKV.Expression,
                ExpressionKind.Store,
                arraySort,
                "(store a k v)",
                a.Expression,
                k.Expression,
                v.Expression);
        }
Пример #22
0
        public void MultiplyOperatorMergedProperly()
        {
            var nultiplyABC = a * b * c;

            ExpressionTestHelper.CheckExpressionWithChildren(
                nultiplyABC.Expression,
                ExpressionKind.Multiply,
                Sort.Int,
                "(* a b c)",
                a.Expression,
                b.Expression,
                c.Expression);
        }
Пример #23
0
        public void AndOperatorMergedProperly()
        {
            var andABC = a && b && c;

            ExpressionTestHelper.CheckExpressionWithChildren(
                andABC.Expression,
                ExpressionKind.And,
                Sort.Bool,
                "(and a b c)",
                a.Expression,
                b.Expression,
                c.Expression);
        }
Пример #24
0
        public void AddOperatorMergedProperly()
        {
            var addABC = a + b + c;

            ExpressionTestHelper.CheckExpressionWithChildren(
                addABC.Expression,
                ExpressionKind.Add,
                Sort.Int,
                "(+ a b c)",
                a.Expression,
                b.Expression,
                c.Expression);
        }
Пример #25
0
        public void IfThenElseOperatorConstructedProperly()
        {
            var ifAThenBElseC = a.IfThenElse(b, c);

            ExpressionTestHelper.CheckExpressionWithChildren(
                ifAThenBElseC.Expression,
                ExpressionKind.IfThenElse,
                Sort.Bool,
                "(ite a b c)",
                a.Expression,
                b.Expression,
                c.Expression);
        }
Пример #26
0
        public void IfThenElseOperatorConstructedProperly()
        {
            var cond = (BoolHandle)ExpressionFactory.NamedVariable(Sort.Bool, "cond");

            var ifCondThenAElseB = cond.IfThenElse(a, b);

            ExpressionTestHelper.CheckExpressionWithChildren(
                ifCondThenAElseB.Expression,
                ExpressionKind.IfThenElse,
                Sort.Int,
                "(ite cond a b)",
                cond.Expression,
                a.Expression,
                b.Expression);
        }
Пример #27
0
        public void NestedOperatorsWorkProperly()
        {
            var nested = (a && b && c) || (b == c) || b.Implies(c);

            var or = nested.Expression;

            ExpressionTestHelper.CheckExpression(
                or,
                ExpressionKind.Or,
                Sort.Bool,
                "(or (and a b c) (= b c) (=> b c))",
                3);

            var and = or.Children.ElementAt(0);

            ExpressionTestHelper.CheckExpressionWithChildren(
                and,
                ExpressionKind.And,
                Sort.Bool,
                "(and a b c)",
                a.Expression,
                b.Expression,
                c.Expression);

            var eq = or.Children.ElementAt(1);

            ExpressionTestHelper.CheckExpressionWithChildren(
                eq,
                ExpressionKind.Equal,
                Sort.Bool,
                "(= b c)",
                b.Expression,
                c.Expression);

            var implies = or.Children.ElementAt(2);

            ExpressionTestHelper.CheckExpressionWithChildren(
                implies,
                ExpressionKind.Implies,
                Sort.Bool,
                "(=> b c)",
                b.Expression,
                c.Expression);
        }
Пример #28
0
        public void DistinctOperatorNestedProperly()
        {
            var aNeqBNeqC = (a != b != c);

            ExpressionTestHelper.CheckExpression(
                aNeqBNeqC.Expression,
                ExpressionKind.Distinct,
                Sort.Bool,
                "(distinct (distinct a b) c)",
                2);

            var aNeqB = aNeqBNeqC.Expression.Children.ElementAt(0);

            ExpressionTestHelper.CheckExpressionWithChildren(
                aNeqB,
                ExpressionKind.Distinct,
                Sort.Bool,
                "(distinct a b)",
                a.Expression,
                b.Expression);

            Assert.AreEqual(c.Expression, aNeqBNeqC.Expression.Children.ElementAt(1));
        }
Пример #29
0
        public void NestedOperatorsWorkProperly()
        {
            var nested = (a == b) || (b >= a + a * c + a / b);

            var or = nested.Expression;

            ExpressionTestHelper.CheckExpression(
                or,
                ExpressionKind.Or,
                Sort.Bool,
                "(or (= a b) (>= b (+ a (* a c) (div a b))))",
                2);

            var eq = or.Children.ElementAt(0);

            ExpressionTestHelper.CheckExpressionWithChildren(
                eq,
                ExpressionKind.Equal,
                Sort.Bool,
                "(= a b)",
                a.Expression,
                b.Expression);

            var geq = or.Children.ElementAt(1);

            ExpressionTestHelper.CheckExpression(
                geq,
                ExpressionKind.GreaterThanOrEqual,
                Sort.Bool,
                "(>= b (+ a (* a c) (div a b)))",
                2);
            Assert.AreEqual(b.Expression, geq.Children.ElementAt(0));

            var add = geq.Children.ElementAt(1);

            ExpressionTestHelper.CheckExpression(
                add,
                ExpressionKind.Add,
                Sort.Int,
                "(+ a (* a c) (div a b))",
                3);
            Assert.AreEqual(a.Expression, add.Children.ElementAt(0));

            var mul = add.Children.ElementAt(1);

            ExpressionTestHelper.CheckExpressionWithChildren(
                mul,
                ExpressionKind.Multiply,
                Sort.Int,
                "(* a c)",
                a.Expression,
                c.Expression);

            var div = add.Children.ElementAt(2);

            ExpressionTestHelper.CheckExpressionWithChildren(
                div,
                ExpressionKind.DivideInteger,
                Sort.Int,
                "(div a b)",
                a.Expression,
                b.Expression);
        }