@TestFactory
@DisplayName("Complex Mode Equals")
Stream<? extends DynamicNode> complexModesEquals() {

  return Stream.<Generator>of(
      this::simple,
      this::equivalence,
      this::overriddenEquals,
      this::collections,
      this::lenientOrderCollections,
      this::differentClasses,
      this::withDefaults
  ).map(generator -> generator.generate(
      sample -> assertReflective()
          .withLenientDates()
          .withLenientOrder()
          .withIgnoreDefaults()
          .that(sample.actual)
          .isEqualTo(sample.expected),
      sample -> assertFailing(
          () -> assertReflective()
              .withLenientDates()
              .withLenientOrder()
              .withIgnoreDefaults()
              .that(sample.actual)
              .isEqualTo(sample.expected)
      )
  ));
}