### Question:
UAssignOp extends UExpression implements CompoundAssignmentTree { public static UAssignOp create(UExpression variable, Kind operator, UExpression expression) { checkArgument( TAG.containsKey(operator), "Tree kind %s does not represent a compound assignment operator", operator); return new AutoValue_UAssignOp(variable, operator, expression); }  static UAssignOp create(UExpression variable, Kind operator, UExpression expression); @Override abstract UExpression getVariable(); @Override abstract Kind getKind(); @Override abstract UExpression getExpression(); @Override JCAssignOp inline(Inliner inliner); @Override R accept(TreeVisitor<R, D> visitor, D data); @Override Choice<Unifier> visitCompoundAssignment(CompoundAssignmentTree assignOp, Unifier unifier);  }### Answer:
@Test public void equality() { new EqualsTester() .addEqualityGroup( UAssignOp.create(UFreeIdent.create("x"), Kind.PLUS_ASSIGNMENT, UFreeIdent.create("y"))) .addEqualityGroup( UAssignOp.create(UFreeIdent.create("x"), Kind.PLUS_ASSIGNMENT, ULiteral.intLit(2))) .addEqualityGroup( UAssignOp.create(UFreeIdent.create("y"), Kind.PLUS_ASSIGNMENT, ULiteral.intLit(2))) .testEquals(); }
@Test public void serialization() { SerializableTester.reserializeAndAssert( UAssignOp.create(UFreeIdent.create("x"), Kind.PLUS_ASSIGNMENT, ULiteral.intLit(2))); }