public static UPrimitiveType create(TypeKind typeKind) {
    checkArgument(
        isDeFactoPrimitive(typeKind), "Non-primitive type %s passed to UPrimitiveType", typeKind);
    return new AutoValue_UPrimitiveType(typeKind);
  }
@Test
  public void equality() {
    new EqualsTester()
        .addEqualityGroup(UPrimitiveType.create(TypeKind.INT), UPrimitiveType.INT)
        .addEqualityGroup(UPrimitiveType.create(TypeKind.LONG), UPrimitiveType.LONG)
        .addEqualityGroup(UPrimitiveType.create(TypeKind.DOUBLE), UPrimitiveType.DOUBLE)
        .addEqualityGroup(UPrimitiveType.create(TypeKind.FLOAT), UPrimitiveType.FLOAT)
        .addEqualityGroup(UPrimitiveType.create(TypeKind.CHAR), UPrimitiveType.CHAR)
        .addEqualityGroup(UPrimitiveType.create(TypeKind.VOID), UPrimitiveType.VOID)
        .addEqualityGroup(UPrimitiveType.create(TypeKind.NULL), UPrimitiveType.NULL)
        .addEqualityGroup(UPrimitiveType.create(TypeKind.BOOLEAN), UPrimitiveType.BOOLEAN)
        .addEqualityGroup(UPrimitiveType.create(TypeKind.BYTE), UPrimitiveType.BYTE)
        .addEqualityGroup(UPrimitiveType.create(TypeKind.SHORT), UPrimitiveType.SHORT)
        .testEquals();
  }