class PredicateDescription {
  private static final String DEFAULT = "given";
  public static final PredicateDescription GIVEN = new PredicateDescription(DEFAULT);

  // can be public as it is immutable, never null
  public final String description;

  /**
   * Build a {@link PredicateDescription}.
   *
   * @param description must not be null
   */
  public PredicateDescription(String description) {
    requireNonNull(description, "The predicate description must not be null");
    this.description = description;
  }

  public boolean isDefault() {
    return DEFAULT.equals(description);
  }

  @Override
  public boolean equals(Object obj) {<FILL_FUNCTION_BODY>}

  @Override
  public int hashCode() {
    return HASH_CODE_PRIME * hashCodeFor(description);
  }
}

    if (this == obj) {
      return true;
    }

    if (obj == null || getClass() != obj.getClass()) {
      return false;
    }
    PredicateDescription description = (PredicateDescription) obj;
    return deepEquals(this.description, description.description);
  
<no_super_class>