Esempio n. 1
0
        public void RequiresXMinusOne()
        {
            Init();

            bool hitExpectedBreakPoint = false;

            e.BreakPointReached += delegate(object executor, Executor.BreakPointEventArgs data)
            {
                if (data.Name != "cmodset")
                {
                    return;
                }

                hitExpectedBreakPoint = true;

                // Check for "requires x > -1" constraint
                var xTuple = e.CurrentState.GetInScopeVariableAndExprByName("x");
                var xVar   = xTuple.Key;
                // Find the symbolic associated with this variable

                // FIXME: Broken
                //var symbolicForX = e.CurrentState.Symbolics.Where( s => s.Origin.IsVariable && s.Origin.AsVariable == xVar).First();
                SymbolicVariable symbolicForX = null; // Just so it compiles

                // FIXME: Move constant construction functions to utility so can be shared across tests.
                var expectedConstraint = Expr.Gt(symbolicForX.Expr, Expr.Neg(Builder.ConstantInt(1)));

                int hasConstraint = e.CurrentState.Constraints.Constraints.Where(c => c.Condition.Equals(expectedConstraint)).Count();
                Assert.AreEqual(1, hasConstraint);
            };

            e.Run(GetMain(p));

            Assert.IsTrue(hitExpectedBreakPoint);
        }
Esempio n. 2
0
        public void Global()
        {
            p = LoadProgramFrom("programs/CallAssignsToGlobal.bpl");
            e = GetExecutor(p, new DFSStateScheduler(), GetSolver());

            bool checkg  = false;
            bool checkg2 = false;

            e.BreakPointReached += delegate(object executor, Executor.BreakPointEventArgs data)
            {
                if (data.Name != "checkg")
                {
                    return;
                }

                checkg = true;
                var gTuple = e.CurrentState.GetInScopeVariableAndExprByName("g");
                Assert.IsInstanceOf <LiteralExpr>(gTuple.Value);
                Assert.IsTrue((gTuple.Value as LiteralExpr).isBigNum);
                Assert.AreEqual(BigNum.FromInt(2), (gTuple.Value as LiteralExpr).asBigNum);
            };

            e.BreakPointReached += delegate(object executor, Executor.BreakPointEventArgs data)
            {
                if (data.Name != "checkg2")
                {
                    return;
                }

                checkg2 = true;

                // The symbolic assigned to g2 should have a constraint that says it is equal to 3
                var g2Tuple = e.CurrentState.GetInScopeVariableAndExprByName("g2");
                var g2Expr  = g2Tuple.Value;
                Assert.IsTrue(e.IsSymbolic(g2Tuple.Key));

                Assert.IsInstanceOf <IdentifierExpr>(g2Expr);
                Assert.IsInstanceOf <SymbolicVariable>((g2Expr as IdentifierExpr).Decl);

                var expectedConstraint = Expr.Eq(g2Expr, Builder.ConstantInt(3));
                int found = e.CurrentState.Constraints.Constraints.Where(c => c.Condition.Equals(expectedConstraint)).Count();
                Assert.AreEqual(1, found);
            };

            e.Run(GetMain(p));

            Assert.IsTrue(checkg);
            Assert.IsTrue(checkg2);
        }
Esempio n. 3
0
 public override Expr VisitLiteralExpr(LiteralExpr node)
 {
     if (node.isBool)
     {
         return((Expr)Builder.ConstantBool(node.asBool));
     }
     else if (node.isBigNum)
     {
         return(Builder.ConstantInt(node.asBigNum.ToBigInteger));
     }
     else if (node.isBigDec)
     {
         return(Builder.ConstantReal(node.asBigDec));
     }
     else if (node.isBvConst)
     {
         var bv = node.asBvConst;
         return(Builder.ConstantBV(bv.Value.ToBigInteger, bv.Bits));
     }
     else
     {
         throw new NotSupportedException("Unknown LiteralExpr type");
     }
 }
Esempio n. 4
0
        public void Integers()
        {
            var literal = Builder.ConstantInt(-15);

            checkLiteral(literal, "-15");
        }
Esempio n. 5
0
 public virtual LiteralExpr ConstantInt(int value)
 {
     return(UB.ConstantInt(value));
 }
Esempio n. 6
0
 public void Integer()
 {
     CheckType(BasicType.Int, builder.ConstantInt(15), "Int", "(= symbolic_0 15 )");
 }