diff options
Diffstat (limited to 'Timeline.Tests/Helpers/UserInfoComparers.cs')
-rw-r--r-- | Timeline.Tests/Helpers/UserInfoComparers.cs | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/Timeline.Tests/Helpers/UserInfoComparers.cs b/Timeline.Tests/Helpers/UserInfoComparers.cs new file mode 100644 index 00000000..d88b6622 --- /dev/null +++ b/Timeline.Tests/Helpers/UserInfoComparers.cs @@ -0,0 +1,49 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using Timeline.Entities; + +namespace Timeline.Tests.Helpers +{ + public static class UserInfoComparers + { + public static IEqualityComparer<UserInfo> EqualityComparer { get; } = new EqualityComparerImpl(); + public static IComparer<UserInfo> Comparer { get; } = Comparer<UserInfo>.Create(Compare); + + + private class EqualityComparerImpl : IEqualityComparer<UserInfo> + { + bool IEqualityComparer<UserInfo>.Equals(UserInfo x, UserInfo y) + { + return Compare(x, y) == 0; + } + + int IEqualityComparer<UserInfo>.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; + } + } +} |