class AtomicReferenceArrayElementComparisonStrategy<T> extends StandardComparisonStrategy {

  private final Comparator<? super T> elementComparator;

  public AtomicReferenceArrayElementComparisonStrategy(Comparator<? super T> elementComparator) {
    this.elementComparator = elementComparator;
  }

  @SuppressWarnings("unchecked")
  @Override
  public boolean areEqual(Object actual, Object other) {<FILL_FUNCTION_BODY>}

  private boolean compareElementsOf(AtomicReferenceArray<T> actual, T[] other) {
    if (actual.length() != other.length) return false;
    // compare their elements with elementComparator
    for (int i = 0; i < actual.length(); i++) {
      if (elementComparator.compare(actual.get(i), other[i]) != 0) return false;
    }
    return true;
  }

  @Override
  public String toString() {
    return "AtomicReferenceArrayElementComparisonStrategy using " + CONFIGURATION_PROVIDER.representation()
                                                                                          .toStringOf(
                                                                                                      elementComparator);
  }

  @Override
  public String asText() {
    return "when comparing elements using " + CONFIGURATION_PROVIDER.representation().toStringOf(elementComparator);
  }

  @Override
  public boolean isStandard() {
    return false;
  }
}

    if (actual == null && other == null) return true;
    if (actual == null || other == null) return false;
    // expecting actual and other to be T[]
    return actual instanceof AtomicReferenceArray && isArray(other)
           && compareElementsOf((AtomicReferenceArray<T>) actual, (T[]) other);
  
<methods>public boolean areEqual(java.lang.Object, java.lang.Object) ,public Iterable<?> duplicatesFrom(Iterable<?>) ,public static org.assertj.core.internal.StandardComparisonStrategy instance() ,public boolean isGreaterThan(java.lang.Object, java.lang.Object) ,public boolean isLessThan(java.lang.Object, java.lang.Object) ,public boolean isStandard() ,public boolean iterableContains(Iterable<?>, java.lang.Object) ,public void iterableRemoves(Iterable<?>, java.lang.Object) ,public void iterablesRemoveFirst(Iterable<?>, java.lang.Object) ,public boolean stringContains(java.lang.String, java.lang.String) ,public boolean stringEndsWith(java.lang.String, java.lang.String) ,public boolean stringStartsWith(java.lang.String, java.lang.String) <variables>private static final org.assertj.core.internal.StandardComparisonStrategy INSTANCE