assertFalse ("NilObject.hashCode()", e1.hashCode() == e2.hashCode());
assertEquals("NilObject.equals(Object)", e1, e3);
assertFalse ("NilObject.equals(Object)", e1.equals(e2));
assertInstanceOf("e1", LenientComparable.class, e1);
final LenientComparable c = (LenientComparable) e1;
assertTrue (c.equals(e3, ComparisonMode.STRICT));
assertFalse(c.equals(e2, ComparisonMode.STRICT));
assertFalse(c.equals(e2, ComparisonMode.BY_CONTRACT));
assertTrue (c.equals(e2, ComparisonMode.IGNORE_METADATA));
assertTrue (c.equals(e2, ComparisonMode.APPROXIMATIVE));
assertTrue (c.equals(e2, ComparisonMode.DEBUG));
// Following object should alway be different because it does not implement the same interface.
final ResponsibleParty r1 = NilReason.TEMPLATE.createNilObject(ResponsibleParty.class);
assertFalse(c.equals(r1, ComparisonMode.STRICT));
assertFalse(c.equals(r1, ComparisonMode.BY_CONTRACT));
assertFalse(c.equals(r1, ComparisonMode.IGNORE_METADATA));
assertFalse(c.equals(r1, ComparisonMode.APPROXIMATIVE));
assertFalse(c.equals(r1, ComparisonMode.DEBUG));
}