public static UBinary create(Kind binaryOp, UExpression lhs, UExpression rhs) {
    checkArgument(
        OP_CODES.containsKey(binaryOp), "%s is not a supported binary operation", binaryOp);
    return new AutoValue_UBinary(binaryOp, lhs, rhs);
  }
@Test
  public void serialization() {
    ULiteral oneLit = ULiteral.intLit(1);
    ULiteral twoLit = ULiteral.intLit(2);
    ULiteral piLit = ULiteral.doubleLit(Math.PI);
    ULiteral trueLit = ULiteral.booleanLit(true);
    ULiteral falseLit = ULiteral.booleanLit(false);

    SerializableTester.reserializeAndAssert(UBinary.create(Kind.PLUS, oneLit, twoLit));
    SerializableTester.reserializeAndAssert(UBinary.create(Kind.PLUS, oneLit, piLit));
    SerializableTester.reserializeAndAssert(UBinary.create(Kind.PLUS, piLit, twoLit));
    SerializableTester.reserializeAndAssert(UBinary.create(Kind.MINUS, oneLit, twoLit));
    SerializableTester.reserializeAndAssert(UBinary.create(Kind.XOR, oneLit, twoLit));
    SerializableTester.reserializeAndAssert(UBinary.create(Kind.CONDITIONAL_OR, trueLit, falseLit));
    SerializableTester.reserializeAndAssert(UBinary.create(Kind.OR, trueLit, falseLit));
  }