public void NoFold() { var pair = GetSimpleAndConstantFoldingBuilder(); var sb = pair.Item1; var cfb = pair.Item2; var xPair = GetBoundVarAndIdExpr("x", BasicType.Int); var freeVarX = xPair.Item1; var x = xPair.Item2; var yPair = GetBoundVarAndIdExpr("y", BasicType.Int); var freeVarY = yPair.Item1; var y = yPair.Item2; var fb = new FunctionCallBuilder(); var dummyFunc = fb.CreateCachedUninterpretedFunctionCall("f", BPLType.Bool, new List <BPLType>() { BPLType.Int, BPLType.Int }); var triggerExpr = sb.UFC(dummyFunc, x, y); var trigger = new Trigger(Token.NoToken, /*pos=*/ true, new List <Expr>() { triggerExpr }, null); var foldedResult = cfb.ForAll(new List <Variable>() { freeVarX, freeVarY }, cfb.Lt(x, y), trigger); var simpleResult = sb.ForAll(new List <Variable>() { freeVarX, freeVarY }, sb.Lt(x, y), trigger); CheckIsBoolType(foldedResult); CheckIsBoolType(simpleResult); Assert.AreEqual(simpleResult, foldedResult); // FIXME: Equals() currently doesn't check triggers, so do it manually Assert.IsInstanceOf <ForallExpr>(foldedResult); Assert.IsInstanceOf <ForallExpr>(simpleResult); var foldedResultAsForAll = foldedResult as ForallExpr; var simpleResultAsForAll = simpleResult as ForallExpr; Assert.IsNotNull(foldedResultAsForAll.Triggers); Assert.IsNull(foldedResultAsForAll.Triggers.Next); Assert.IsNotNull(simpleResultAsForAll.Triggers); Assert.IsNull(simpleResultAsForAll.Triggers.Next); Assert.AreSame(foldedResultAsForAll.Triggers, simpleResultAsForAll.Triggers); // Use this gross Boogie API too Assert.IsTrue(BinderExpr.EqualWithAttributesAndTriggers(simpleResult, foldedResult)); }
public override BinderExpr VisitBinderExpr(BinderExpr node) { add(node); return(base.VisitBinderExpr(node)); }
public override BinderExpr VisitBinderExpr(BinderExpr node) { // don't recurse on subexpression return node; }
public override BinderExpr VisitBinderExpr(BinderExpr node) { throw new NotImplementedException(); }