public void CalendarHoursTest(int? monthCount) {
var now = ClockProxy.Clock.Now;
var months = new MonthRangeCollection(now, monthCount ?? 12);
var startTime = now.TrimToDay().Add(months.TimeCalendar.StartOffset);
var endTime = startTime.AddMonths(monthCount ?? 12).Add(months.TimeCalendar.EndOffset);
months.Start.Should().Be(startTime);
months.End.Should().Be(endTime);
months.MonthCount.Should().Be(monthCount);
var items = months.GetMonths().ToList();
items.Count.Should().Be(monthCount);
Enumerable
.Range(0, monthCount ?? 12)
.RunEach(i => {
items[i].Start.Should().Be(startTime.AddMonths(i));
items[i].End.Should().Be(months.TimeCalendar.MapEnd(startTime.AddMonths(i + 1)));
items[i].UnmappedStart.Should().Be(startTime.AddMonths(i));
items[i].UnmappedEnd.Should().Be(startTime.AddMonths(i + 1));
items[i].IsSamePeriod(new MonthRange(months.Start.AddMonths(i))).Should().Be.True();
var ym = TimeTool.AddMonth(now.Year, now.Month, i);
items[i].IsSamePeriod(new MonthRange(ym.Year ?? 0, ym.Month ?? 1)).Should().Be.True();
});
}