Ejemplo n.º 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);
        }
Ejemplo n.º 2
0
        public void LocalVariableCreatedProperly()
        {
            var graphId = new FlowGraphId(1);
            var builder = new FlowGraphBuilder(graphId);

            string name     = "testBoolVar";
            var    variable = builder.AddLocalVariable(Sort.Bool, name);

            ExpressionTestHelper.CheckExpression(variable, ExpressionKind.Variable, Sort.Bool, name, 0);
            Assert.AreEqual(builder.Graph, variable.Graph);
        }
Ejemplo n.º 3
0
        public void GlobalVariableCreatedProperly()
        {
            var graphId = new FlowGraphId(1);
            var builder = new FlowGraphBuilder(graphId);

            string name       = "testBoolVar";
            var    variableId = new GlobalFlowVariableId(1);
            var    variable   = new GlobalFlowVariable(variableId, Sort.Bool, name);

            ExpressionTestHelper.CheckExpression(variable, ExpressionKind.Variable, Sort.Bool, name, 0);
        }
Ejemplo n.º 4
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);
        }
Ejemplo n.º 5
0
        public void InterpretationConstructedProperly()
        {
            var trueVal = new BoolHandle(true);

            ExpressionTestHelper.CheckExpression(
                trueVal.Expression,
                ExpressionKind.Interpretation,
                Sort.Bool,
                true.ToString(),
                0);
            Assert.AreEqual(ExpressionFactory.True, trueVal.Expression);

            BoolHandle falseVal = false;

            ExpressionTestHelper.CheckExpression(
                falseVal.Expression,
                ExpressionKind.Interpretation,
                Sort.Bool,
                false.ToString(),
                0);
            Assert.AreEqual(ExpressionFactory.False, falseVal.Expression);
        }
Ejemplo n.º 6
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));
        }
Ejemplo n.º 7
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);
        }