public void testHashCode() throws Exception { ConstraintSet cs1 = new ConstraintSet(ConstraintOp.AND); ConstraintSet cs2 = new ConstraintSet(ConstraintOp.AND); ConstraintSet cs3 = new ConstraintSet(ConstraintOp.AND); ConstraintSet cs4 = new ConstraintSet(ConstraintOp.AND); ConstraintSet cs5 = new ConstraintSet(ConstraintOp.OR); ConstraintSet cs6 = new ConstraintSet(ConstraintOp.NAND); cs1.addConstraint(sc1).addConstraint(sc2); cs2.addConstraint(sc1).addConstraint(sc2); assertEquals(cs1.hashCode(), cs1.hashCode()); assertEquals(cs1.hashCode(), cs2.hashCode()); // cs3 has same two constraints but in different oreder, should still be equal cs3.addConstraint(sc2).addConstraint(sc1); assertEquals(cs1.hashCode(), cs3.hashCode()); cs4.addConstraint(sc1); assertEquals(cs4.hashCode(), cs4.hashCode()); assertTrue("Expected cs1.hashCode() and cs4.hashCode() to not be equal", cs1.hashCode() != cs4.hashCode()); // cs5 is AND, cs4 is OR cs5.addConstraint(sc1); assertTrue("Expected cs4.hashCode() and cs5.hashCode() to not be equal", cs4.hashCode() != cs5.hashCode()); // cs6 is negated, cs4 is not cs6.addConstraint(sc1); assertTrue("Expected cs4.hashCode() and cs6.hashCode() to not be equal", cs4.hashCode() != cs6.hashCode()); }