public void Equality() { using (var s1 = new NSString("\u00f6")) // o-umlaut using (var s2 = new NSString("o\u0308")) { // o + combining diaeresis // since ObjC thinks it's different Assert.That(s1.GetHashCode(), Is.Not.EqualTo(s2.GetHashCode()), "GetHashCode"); // then it's "correct" to return false for equality Assert.False(s1.Equals((object)s2), "Equal(object)"); Assert.False(s1.Equals((NSObject)s2), "Equal(NSObject)"); Assert.False(s1.Equals((NSString)s2), "Equal(NSString)"); Assert.False(NSString.Equals(s1, s2), "static"); // and people need to call compare Assert.That(s1.Compare(s2), Is.EqualTo(NSComparisonResult.Same), "Same"); } }