public void GetStartOfYearInDays()
        {
            // This exercises CalculateStartOfYearInDays too.
            var calculator = new UmAlQuraYearMonthDayCalculator();

            for (int year = calculator.MinYear; year <= calculator.MaxYear; year++)
            {
                var bcl  = BclCalendars.UmAlQura.ToDateTime(year, 1, 1, 0, 0, 0, 0);
                var days = (bcl - new DateTime(1970, 1, 1)).Days;
                Assert.AreEqual(days, calculator.GetStartOfYearInDays(year), "year={0}", year);
            }
        }
        public void GetDaysFromStartOfYearToStartOfMonth()
        {
            var calculator = new UmAlQuraYearMonthDayCalculator();

            for (int year = calculator.MinYear; year <= calculator.MaxYear; year++)
            {
                int dayOfYear = 1;
                for (int month = 1; month <= 12; month++)
                {
                    // This delegates to GetDaysFromStartOfYearToStartOfMonth (which is protected).
                    Assert.AreEqual(dayOfYear, calculator.GetDayOfYear(new YearMonthDay(year, month, 1)), "year={0}; month={1}", year, month);
                    dayOfYear += calculator.GetDaysInMonth(year, month);
                }
            }
        }
        public void GetYearMonthDay_YearAndDayOfYear()
        {
            var calculator = new UmAlQuraYearMonthDayCalculator();

            for (int year = calculator.MinYear; year <= calculator.MaxYear; year++)
            {
                int dayOfYear = 1;
                for (int month = 1; month <= 12; month++)
                {
                    for (int day = 1; day <= calculator.GetDaysInMonth(year, month); day++)
                    {
                        var actual   = calculator.GetYearMonthDay(year, dayOfYear);
                        var expected = new YearMonthDay(year, month, day);
                        Assert.AreEqual(expected, actual, "year={0}; dayOfYear={1}", year, dayOfYear);
                        dayOfYear++;
                    }
                }
            }
        }
        public void GetYearMonthDay_DaysSinceEpoch()
        {
            var calculator     = new UmAlQuraYearMonthDayCalculator();
            int daysSinceEpoch = calculator.GetStartOfYearInDays(calculator.MinYear);

            for (int year = calculator.MinYear; year <= calculator.MaxYear; year++)
            {
                for (int month = 1; month <= 12; month++)
                {
                    for (int day = 1; day <= calculator.GetDaysInMonth(year, month); day++)
                    {
                        var actual   = calculator.GetYearMonthDay(daysSinceEpoch);
                        var expected = new YearMonthDay(year, month, day);
                        Assert.AreEqual(expected, actual, "daysSinceEpoch={0}", daysSinceEpoch);
                        daysSinceEpoch++;
                    }
                }
            }
        }
        public void GetYearMonthDay_InvalidValueForCoverage()
        {
            var calculator = new UmAlQuraYearMonthDayCalculator();

            Assert.Throws <ArgumentOutOfRangeException>(() => calculator.GetYearMonthDay(calculator.MinYear, 1000));
        }