@Override
  public final void isEqualTo(@Nullable Object other) {
    if (Objects.equal(actual, other)) {
      return;
    }

    // Fail but with a more descriptive message:

    if (actual == null || !(other instanceof Map)) {
      super.isEqualTo(other);
      return;
    }

    containsEntriesInAnyOrder((Map<?, ?>) other, /* allowUnexpected= */ false);
  }
@Test
  public void isEqualToFailureDiffering_sameToString() {
    ImmutableMap<String, Number> actual =
        ImmutableMap.<String, Number>of("jan", 1, "feb", 2, "march", 3L);
    ImmutableMap<String, Integer> expectedMap = ImmutableMap.of("jan", 1, "feb", 2, "march", 3);

    expectFailureWhenTestingThat(actual).isEqualTo(expectedMap);
    assertFailureKeys(
        "keys with wrong values",
        "for key",
        "expected value",
        "but got value",
        "---",
        "expected",
        "but was");
    assertFailureValueIndexed("for key", 0, "march");
    assertFailureValue("expected value", "3 (java.lang.Integer)");
    assertFailureValue("but got value", "3 (java.lang.Long)");
  }