using System; using System.Collections.Generic; using System.Linq; using Timeline.Entities; namespace Timeline.Tests.Helpers { public static class UserInfoComparers { public static IEqualityComparer EqualityComparer { get; } = new EqualityComparerImpl(); public static IComparer Comparer { get; } = Comparer.Create(Compare); private class EqualityComparerImpl : IEqualityComparer { bool IEqualityComparer.Equals(UserInfo x, UserInfo y) { return Compare(x, y) == 0; } int IEqualityComparer.GetHashCode(UserInfo obj) { return obj.Username.GetHashCode() ^ obj.IsAdmin.GetHashCode(); } } public static int Compare(UserInfo left, UserInfo right) { if (left == null) { if (right == null) return 0; return -1; } if (right == null) return 1; var uc = string.Compare(left.Username, right.Username); if (uc != 0) return uc; if (left.IsAdmin == right.IsAdmin) return 0; return left.IsAdmin ? -1 : 1; } } }