public void CachedHashCodeForAllExpr() { var x = new BoundVariable(Token.NoToken, new TypedIdent(Token.NoToken, "x", BasicType.Int)); var y = new BoundVariable(Token.NoToken, new TypedIdent(Token.NoToken, "x", BasicType.Int)); var body = Expr.Gt (new IdentifierExpr (Token.NoToken, x, /*immutable=*/true), new IdentifierExpr(Token.NoToken, y, /*immutable=*/true)); var forAll = new ForallExpr(Token.NoToken, new List<Variable> () {x, y }, body, /*immutable=*/ true); Assert.AreEqual(forAll.ComputeHashCode(), forAll.GetHashCode()); }
public void SimpleForAll() { var boundVar = new BoundVariable(Token.NoToken, new TypedIdent(Token.NoToken,"foo",Microsoft.Boogie.Type.Bool)); var id = new IdentifierExpr(Token.NoToken, boundVar); var forall = new ForallExpr(Token.NoToken, new List<Variable>() { boundVar }, id); var id2 = new IdentifierExpr(Token.NoToken, boundVar); var forall2 = new ForallExpr(Token.NoToken, new List<Variable>() { boundVar }, id2); Assert.AreNotSame(forall, forall2); // These are different references Assert.IsTrue(forall.Equals(forall2)); // These are "structurally equal" Assert.AreEqual(forall.GetHashCode(), forall2.GetHashCode()); // If the .Equals() is true then hash codes must be the same }