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); }
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]); }
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); }