diff --git a/docs/dates.md b/docs/dates.md index 0c3d976e2..fcbc5b234 100644 --- a/docs/dates.md +++ b/docs/dates.md @@ -7,7 +7,6 @@ To change this file edit the source file and then run MarkdownSnippets. # Dates - By default dates and times (`DateTime`, `DateTimeOffset`, `DateOnly`, and `TimeOnly`) are sanitized during verification. This is done by finding each date and taking a counter based that that specific date. That counter is then used replace the date values. This allows for repeatable tests when date values are changing. @@ -288,3 +287,136 @@ public static void NamedDatesAndTimesGlobal() ``` snippet source | anchor + + +## Custom Comparers + +The following comparers can be overridden + + +### DateTime + +Default Comparer: + + + +```cs +class DateTimeComparer : IEqualityComparer +{ + public bool Equals(DateTime x, DateTime y) => + x == y && + x.Kind == y.Kind; + + public int GetHashCode(DateTime obj) => + obj.GetHashCode() + (int) obj.Kind; +} +``` +snippet source | anchor + + +Custom Comparer: + + + +```cs +[ModuleInitializer] +public static void UseCustomDateTimeComparer() => + Counter.UseDateTimeComparer(new CustomDateTimeComparer()); + +public class CustomDateTimeComparer : + IEqualityComparer +{ + public bool Equals(DateTime x, DateTime y) => + new DateTime(x.Year, x.Month, x.Day) == + new DateTime(y.Year, y.Month, y.Day); + + public int GetHashCode(DateTime date) => + new DateTime(date.Year, date.Month, date.Day).GetHashCode(); +} +``` +snippet source | anchor + + + +### DateTimeOffset + +Default Comparer: + + + +```cs +class DateTimeOffsetComparer : + IEqualityComparer +{ + public bool Equals(DateTimeOffset x, DateTimeOffset y) => + x == y && x.Offset == y.Offset; + + public int GetHashCode(DateTimeOffset obj) => + obj.GetHashCode() + (int) obj.Offset.TotalMinutes; +} +``` +snippet source | anchor + + +Custom Comparer: + + + +```cs +[ModuleInitializer] +public static void UseCustomDateTimeOffsetComparer() => + Counter.UseDateTimeOffsetComparer(new CustomDateTimeOffsetComparer()); + +public class CustomDateTimeOffsetComparer : + IEqualityComparer +{ + public bool Equals(DateTimeOffset x, DateTimeOffset y) => + new DateTimeOffset(new(x.Year, x.Month, x.Day)) == + new DateTimeOffset(new(y.Year, y.Month, y.Day)); + + public int GetHashCode(DateTimeOffset date) + { + var dateTime = new DateTime(date.Year, date.Month, date.Day); + return new DateTimeOffset(dateTime) + .GetHashCode(); + } +} +``` +snippet source | anchor + + + +### TimeOnly + +Default Comparer: + + + +```cs +EqualityComparer