Example #1
0
        public void AsBVSEXTWithoutBVSEXT()
        {
            var sb       = GetSimpleBuilder();
            var v        = GetVarAndIdExpr("foo", BasicType.GetBvType(4)).Item2;
            var sext     = sb.BVADD(v, v);
            var asBvSExt = ExprUtil.AsBVSEXT(sext);

            Assert.IsNull(asBvSExt);
        }
Example #2
0
        public void noFold()
        {
            var pair         = GetSimpleAndConstantFoldingBuilder();
            var sb           = pair.Item1;
            var cfb          = pair.Item2;
            var id           = GetVarAndIdExpr("foo", BasicType.GetBvType(8)).Item2;
            var foldedResult = cfb.BVSEXT(id, 16);
            var simpleResult = sb.BVSEXT(id, 16);

            CheckIsBvType(simpleResult, 16);
            CheckIsBvType(foldedResult, 16);
            Assert.AreEqual(simpleResult, foldedResult);

            var asBvSExt = ExprUtil.AsBVSEXT(foldedResult);

            Assert.IsNotNull(asBvSExt);
            Assert.AreSame(id, asBvSExt.Args[0]);
        }
Example #3
0
        public void nestedBVSEXT(int depth)
        {
            var  pair     = GetVarAndIdExpr("foo", BasicType.GetBvType(8));
            var  variable = pair.Item1;
            var  id       = pair.Item2;
            var  cfb      = GetConstantFoldingBuilder();
            Expr result   = cfb.BVSEXT(id, 8);

            Assert.IsNotNull(ExprUtil.AsBVSEXT(result));
            Expr root = result;

            for (int i = 0; i < depth; ++i)
            {
                // Sign extending to the same width should be a no-op
                result = cfb.BVSEXT(result, 8);
                CheckIsBvType(result, 8);
            }

            Assert.AreSame(root, result);
        }