public interface IDateRange
DateTime? StartDate { get; }
DateTime? EndDate { get; }
public class DateRangeTest
public static bool HasOverlap(IDateRange a, IDateRange b)
public static void Main()
Console.WriteLine("Test Cases");
Console.WriteLine("-----------------");
Console.WriteLine("Identical: {0}", TestIdenticalRanges() ? "Ok" : "FAIL");
Console.WriteLine("Overlapping: {0}", TestOverlappingRanges() ? "Ok" : "FAIL");
Console.WriteLine("Contained: {0}", TestContainedRanges() ? "Ok" : "FAIL");
Console.WriteLine("SharedDate: {0}", TestSharedDateRanges() ? "Ok" : "FAIL");
Console.WriteLine("OpenStart: {0}", TestOpenStart() ? "Ok" : "FAIL");
Console.WriteLine("OpenEnd: {0}", TestOpenEnd() ? "Ok" : "FAIL");
Console.WriteLine("Adjacent: {0}", TestAdjacentRanges() ? "Ok" : "FAIL");
Console.WriteLine("Spaced: {0}", TestSpacedRanges() ? "Ok" : "FAIL");
private class DateRange : IDateRange
public DateTime? StartDate { get; set; }
public DateTime? EndDate { get; set; }
private static bool TestIdenticalRanges()
var range = new DateRange() { StartDate = new DateTime(2015, 1, 1), EndDate = new DateTime(2015, 6, 30) };
return HasOverlap(range, range) == true;
private static bool TestOverlappingRanges()
new DateRange() { StartDate = new DateTime(2015, 1, 1), EndDate = new DateTime(2015, 6, 30) },
new DateRange() { StartDate = new DateTime(2015, 3, 1), EndDate = new DateTime(2015, 9, 30) }
private static bool TestContainedRanges()
new DateRange() { StartDate = new DateTime(2015, 1, 1), EndDate = new DateTime(2015, 6, 30) },
new DateRange() { StartDate = new DateTime(2015, 3, 1), EndDate = new DateTime(2015, 3, 31) }
private static bool TestSharedDateRanges()
new DateRange() { StartDate = new DateTime(2015, 1, 1), EndDate = new DateTime(2015, 6, 30) },
new DateRange() { StartDate = new DateTime(2015, 6, 30), EndDate = new DateTime(2015, 12, 31) }
private static bool TestOpenStart()
new DateRange() { StartDate = null, EndDate = new DateTime(2020, 12, 31) },
new DateRange() { StartDate = new DateTime(2015, 6, 30), EndDate = new DateTime(2015, 12, 31) }
private static bool TestOpenEnd()
new DateRange() { StartDate = new DateTime(2015, 1, 1), EndDate = null },
new DateRange() { StartDate = new DateTime(2015, 6, 30), EndDate = new DateTime(2015, 12, 31) }
private static bool TestAdjacentRanges()
new DateRange() { StartDate = new DateTime(2015, 1, 1), EndDate = new DateTime(2015, 6, 30) },
new DateRange() { StartDate = new DateTime(2015, 7, 1), EndDate = new DateTime(2015, 12, 31) }
private static bool TestSpacedRanges()
new DateRange() { StartDate = new DateTime(2015, 1, 1), EndDate = new DateTime(2015, 4, 30) },
new DateRange() { StartDate = new DateTime(2015, 7, 1), EndDate = new DateTime(2015, 12, 31) }