class AtomicReferenceAssert<V> extends AbstractAssert<AtomicReferenceAssert<V>, AtomicReference<V>> {

  public AtomicReferenceAssert(AtomicReference<V> actual) {
    super(actual, AtomicReferenceAssert.class);
  }

  /**
   * Verifies that the atomic under test has the given value.
   * <p>
   * Example:
   * <pre><code class='java'> // assertion succeeds
   * assertThat(new AtomicReference("foo")).hasValue("foo");
   *
   * // assertion fails
   * assertThat(new AtomicReference("foo")).hasValue("bar");</code></pre>
   *
   * @param expectedValue the expected value.
   * @return {@code this} assertion object.
   * @throws AssertionError if the atomic under test is {@code null}.
   * @throws AssertionError if the atomic under test does not have the given value.
   * @since 2.7.0 / 3.7.0
   */
  public AtomicReferenceAssert<V> hasValue(V expectedValue) {
    isNotNull();
    V actualValue = actual.get();
    if (!objects.getComparisonStrategy().areEqual(actualValue, expectedValue)) {
      throw assertionError(shouldHaveValue(actual, expectedValue));
    }
    return myself;
  }

  /**
   * Verifies that the atomic under test does not have the given value.
   * <p>
   * Example:
   * <pre><code class='java'> // assertion succeeds
   * assertThat(new AtomicReference("foo")).doesNotHaveValue("bar");
   *
   * // assertion fails
   * assertThat(new AtomicReference("foo")).doesNotHaveValue("foo");</code></pre>
   *
   * @param nonExpectedValue the value not expected.
   * @return {@code this} assertion object.
   * @throws AssertionError if the atomic under test is {@code null}.
   * @throws AssertionError if the atomic under test has the given value.
   *
   * @since 2.7.0 / 3.7.0
   */
  public AtomicReferenceAssert<V> doesNotHaveValue(V nonExpectedValue) {
    isNotNull();
    V actualValue = actual.get();
    if (objects.getComparisonStrategy().areEqual(actualValue, nonExpectedValue)) {
      throw assertionError(shouldNotContainValue(actual, nonExpectedValue));
    }
    return myself;
  }

  /**
   * Verifies that the atomic under test has a value satisfying the given predicate.
   * <p>
   * Example:
   * <pre><code class='java'> // assertion succeeds
   * assertThat(new AtomicReference("foo")).hasValueMatching(result -&gt; result != null);
   *
   * // assertion fails
   * assertThat(new AtomicReference("foo")).hasValueMatching(result -&gt; result == null); </code></pre>
   *
   * @param predicate the {@link Predicate} to apply on the resulting value.
   * @return {@code this} assertion object.
   * @throws NullPointerException if the given {@link Predicate} is null
   * @throws AssertionError if the atomic under test is {@code null}.
   * @throws AssertionError if the atomic under test value does not matches with the given predicate.
   *
   * @since 3.18.0
   */
  public AtomicReferenceAssert<V> hasValueMatching(Predicate<? super V> predicate) {
    return hasValueMatching(predicate, PredicateDescription.GIVEN);
  }

  /**
   * Verifies that the atomic under test has a value satisfying the given predicate, the string parameter is used in the error message
   * to describe the predicate.
   * <p>
   * Example:
   * <pre><code class='java'> // assertion succeeds
   * assertThat(new AtomicReference("foo")).hasValueMatching(result -&gt; result != null, "expected not null");
   *
   * // assertion fails
   * assertThat(new AtomicReference("foo")).hasValueMatching(result -&gt; result == null, "expected null");
   * </code></pre>
   *
   * @param predicate   the {@link Predicate} to apply on the resulting value.
   * @param description the {@link Predicate} description.
   * @return {@code this} assertion object.
   * @throws NullPointerException if the given {@link Predicate} is null
   * @throws AssertionError if the atomic under test is {@code null}.
   * @throws AssertionError if the atomic under test value does not matches with the given predicate.
   *
   * @since 3.18.0
   */
  public AtomicReferenceAssert<V> hasValueMatching(Predicate<? super V> predicate, String description) {
    return hasValueMatching(predicate, new PredicateDescription(description));
  }

  private AtomicReferenceAssert<V> hasValueMatching(Predicate<? super V> predicate, PredicateDescription description) {
    requireNonNull(predicate, "The predicate must not be null");
    isNotNull();
    V actualValue = actual.get();
    if (!predicate.test(actualValue)) {
      throw assertionError(shouldMatch(actualValue, predicate, description));
    }
    return myself;
  }

  /**
   * Verifies that the atomic under test has a value satisfying the given requirements.
   * <p>
   * Example:
   * <pre><code class='java'> // assertion succeeds
   * assertThat(new AtomicReference("foo")).hasValueSatisfying(result -&gt; assertThat(result).isNotBlank());
   *
   * // assertion fails
   * assertThat(new AtomicReference("foo")).hasValueSatisfying(result -&gt; assertThat(result).isBlank()); </code></pre>
   *
   * @param requirements to assert on the actual object - must not be null.
   * @return this assertion object.
   *
   * @throws NullPointerException if the given {@link Consumer} is null
   * @throws AssertionError if the atomic under test is {@code null}.
   * @throws AssertionError if the atomic under test value does not satisfies with the given requirements.
   *
   * @since 3.18.0
   */
  public AtomicReferenceAssert<V> hasValueSatisfying(Consumer<? super V> requirements) {<FILL_FUNCTION_BODY>}

  /**
   * Verifies that the atomic under test has the {@code null} value.
   * <p>
   * Example:
   * <pre><code class='java'> // assertion succeeds
   * assertThat(new AtomicReference(null)).hasNullValue();
   *
   * // assertion fails
   * assertThat(new AtomicReference("foo")).hasNullValue();</code></pre>
   *
   * @return {@code this} assertion object.
   * @throws AssertionError if the atomic under test does not have the null value.
   * @since 3.25.0
   */
  public AtomicReferenceAssert<V> hasNullValue() {
    return hasValue(null);
  }

  /**
   * Verifies that the atomic under test does not have the {@code null} value.
   * <p>
   * Example:
   * <pre><code class='java'> // assertion succeeds
   * assertThat(new AtomicReference("foo")).doesNotHaveNullValue();
   *
   * // assertion fails
   * assertThat(new AtomicReference(null)).doesNotHaveNullValue();</code></pre>
   *
   * @return {@code this} assertion object.
   * @throws AssertionError if the atomic under test has the null value.
   * @since 3.25.0
   */
  public AtomicReferenceAssert<V> doesNotHaveNullValue() {
    return doesNotHaveValue(null);
  }
}

    requireNonNull(requirements, "The Consumer<? super V> expressing the assertions requirements must not be null");
    isNotNull();
    requirements.accept(actual.get());
    return myself;
  
<methods>public ASSERT asInstanceOf(InstanceOfAssertFactory<?,ASSERT>) ,public AbstractListAssert<?,List<?>,java.lang.Object,ObjectAssert<java.lang.Object>> asList() ,public AbstractStringAssert<?> asString() ,public AtomicReferenceAssert<V> describedAs(org.assertj.core.description.Description) ,public java.lang.String descriptionText() ,public AtomicReferenceAssert<V> doesNotHave(Condition<? super AtomicReference<V>>) ,public AtomicReferenceAssert<V> doesNotHaveSameClassAs(java.lang.Object) ,public AtomicReferenceAssert<V> doesNotHaveSameHashCodeAs(java.lang.Object) ,public AtomicReferenceAssert<V> doesNotHaveToString(java.lang.String) ,public transient AtomicReferenceAssert<V> doesNotHaveToString(java.lang.String, java.lang.Object[]) ,public boolean equals(java.lang.Object) ,public org.assertj.core.api.WritableAssertionInfo getWritableAssertionInfo() ,public AtomicReferenceAssert<V> has(Condition<? super AtomicReference<V>>) ,public AtomicReferenceAssert<V> hasSameClassAs(java.lang.Object) ,public AtomicReferenceAssert<V> hasSameHashCodeAs(java.lang.Object) ,public AtomicReferenceAssert<V> hasToString(java.lang.String) ,public transient AtomicReferenceAssert<V> hasToString(java.lang.String, java.lang.Object[]) ,public int hashCode() ,public AtomicReferenceAssert<V> is(Condition<? super AtomicReference<V>>) ,public AtomicReferenceAssert<V> isEqualTo(java.lang.Object) ,public AtomicReferenceAssert<V> isExactlyInstanceOf(Class<?>) ,public transient AtomicReferenceAssert<V> isIn(java.lang.Object[]) ,public AtomicReferenceAssert<V> isIn(Iterable<?>) ,public AtomicReferenceAssert<V> isInstanceOf(Class<?>) ,public transient AtomicReferenceAssert<V> isInstanceOfAny(Class<?>[]) ,public AtomicReferenceAssert<V> isInstanceOfSatisfying(Class<T>, Consumer<T>) ,public AtomicReferenceAssert<V> isNot(Condition<? super AtomicReference<V>>) ,public AtomicReferenceAssert<V> isNotEqualTo(java.lang.Object) ,public AtomicReferenceAssert<V> isNotExactlyInstanceOf(Class<?>) ,public transient AtomicReferenceAssert<V> isNotIn(java.lang.Object[]) ,public AtomicReferenceAssert<V> isNotIn(Iterable<?>) ,public AtomicReferenceAssert<V> isNotInstanceOf(Class<?>) ,public transient AtomicReferenceAssert<V> isNotInstanceOfAny(Class<?>[]) ,public AtomicReferenceAssert<V> isNotNull() ,public transient AtomicReferenceAssert<V> isNotOfAnyClassIn(Class<?>[]) ,public AtomicReferenceAssert<V> isNotSameAs(java.lang.Object) ,public void isNull() ,public transient AtomicReferenceAssert<V> isOfAnyClassIn(Class<?>[]) ,public AtomicReferenceAssert<V> isSameAs(java.lang.Object) ,public AtomicReferenceAssert<V> matches(Predicate<? super AtomicReference<V>>) ,public AtomicReferenceAssert<V> matches(Predicate<? super AtomicReference<V>>, java.lang.String) ,public transient AtomicReferenceAssert<V> overridingErrorMessage(java.lang.String, java.lang.Object[]) ,public AtomicReferenceAssert<V> overridingErrorMessage(Supplier<java.lang.String>) ,public AtomicReferenceAssert<V> satisfies(Condition<? super AtomicReference<V>>) ,public final transient AtomicReferenceAssert<V> satisfies(Consumer<? super AtomicReference<V>>[]) ,public final transient AtomicReferenceAssert<V> satisfies(ThrowingConsumer<? super AtomicReference<V>>[]) ,public final transient AtomicReferenceAssert<V> satisfiesAnyOf(Consumer<? super AtomicReference<V>>[]) ,public final transient AtomicReferenceAssert<V> satisfiesAnyOf(ThrowingConsumer<? super AtomicReference<V>>[]) ,public static void setCustomRepresentation(org.assertj.core.presentation.Representation) ,public static void setDescriptionConsumer(Consumer<org.assertj.core.description.Description>) ,public static void setPrintAssertionsDescription(boolean) ,public AtomicReferenceAssert<V> usingComparator(Comparator<? super AtomicReference<V>>) ,public AtomicReferenceAssert<V> usingComparator(Comparator<? super AtomicReference<V>>, java.lang.String) ,public AtomicReferenceAssert<V> usingDefaultComparator() ,public transient AtomicReferenceAssert<V> withFailMessage(java.lang.String, java.lang.Object[]) ,public AtomicReferenceAssert<V> withFailMessage(Supplier<java.lang.String>) ,public AtomicReferenceAssert<V> withRepresentation(org.assertj.core.presentation.Representation) ,public AtomicReferenceAssert<V> withThreadDumpOnError() <variables>private static final java.lang.String ORG_ASSERTJ,protected final non-sealed AtomicReference<V> actual,org.assertj.core.error.AssertionErrorCreator assertionErrorCreator,org.assertj.core.internal.Conditions conditions,static org.assertj.core.presentation.Representation customRepresentation,private static Consumer<org.assertj.core.description.Description> descriptionConsumer,public org.assertj.core.api.WritableAssertionInfo info,protected final non-sealed AtomicReferenceAssert<V> myself,protected org.assertj.core.internal.Objects objects,static boolean printAssertionsDescription,public static boolean throwUnsupportedExceptionOnEquals