public override int Compare(ImmutableHashSet <T> oldValue, ImmutableHashSet <T> newValue, bool assertMonotonicity) { Debug.Assert(oldValue != null); Debug.Assert(newValue != null); if (ReferenceEquals(oldValue, newValue)) { return(0); } int result; // PERF: Avoid additional hash set allocation by using overload which takes // a set argument instead of IEnumerable argument. var isSubset = oldValue.IsSubsetOfSet(newValue); if (isSubset && oldValue.Count == newValue.Count) { // oldValue == newValue result = 0; } else if (isSubset) { // oldValue < newValue result = -1; } else { // oldValue > newValue result = 1; } return(result); }