public void TestDaysInMonth()
        {
            for (int i = 1; i < 10000; ++i)
            {
                Assert.AreEqual(31, YearMonthDay.DaysInMonth(i, 1)); // January
                if ((i % 4 == 0) && !((i % 100 == 0) && (i % 400 != 0)))
                {
                    Assert.AreEqual(29, YearMonthDay.DaysInMonth(i, 2)); // February of a leap year
                }
                else
                {
                    Assert.AreEqual(28, YearMonthDay.DaysInMonth(i, 2)); // February of a common year
                }

                Assert.AreEqual(31, YearMonthDay.DaysInMonth(i, 3));  // March
                Assert.AreEqual(30, YearMonthDay.DaysInMonth(i, 4));  // April
                Assert.AreEqual(31, YearMonthDay.DaysInMonth(i, 5));  // May
                Assert.AreEqual(30, YearMonthDay.DaysInMonth(i, 6));  // June
                Assert.AreEqual(31, YearMonthDay.DaysInMonth(i, 7));  // July
                Assert.AreEqual(31, YearMonthDay.DaysInMonth(i, 8));  // August
                Assert.AreEqual(30, YearMonthDay.DaysInMonth(i, 9));  // September
                Assert.AreEqual(31, YearMonthDay.DaysInMonth(i, 10)); // October
                Assert.AreEqual(30, YearMonthDay.DaysInMonth(i, 11)); // November
                Assert.AreEqual(31, YearMonthDay.DaysInMonth(i, 12)); // December
            }
        }
        public void TestIsValidDate()
        {
            Assert.IsFalse(YearMonthDay.IsValidDate(2000, 0, 1));
            Assert.IsTrue(YearMonthDay.IsValidDate(2000, 1, 1));
            Assert.IsTrue(YearMonthDay.IsValidDate(2000, 2, 1));
            Assert.IsTrue(YearMonthDay.IsValidDate(2000, 3, 1));
            Assert.IsTrue(YearMonthDay.IsValidDate(2000, 4, 1));
            Assert.IsTrue(YearMonthDay.IsValidDate(2000, 5, 1));
            Assert.IsTrue(YearMonthDay.IsValidDate(2000, 6, 1));
            Assert.IsTrue(YearMonthDay.IsValidDate(2000, 7, 1));
            Assert.IsTrue(YearMonthDay.IsValidDate(2000, 8, 1));
            Assert.IsTrue(YearMonthDay.IsValidDate(2000, 9, 1));
            Assert.IsTrue(YearMonthDay.IsValidDate(2000, 10, 1));
            Assert.IsTrue(YearMonthDay.IsValidDate(2000, 11, 1));
            Assert.IsTrue(YearMonthDay.IsValidDate(2000, 12, 1));
            Assert.IsFalse(YearMonthDay.IsValidDate(2000, 13, 1));

            for (int month = 1; month < 13; ++month)
            {
                int daysInMonth = YearMonthDay.DaysInMonth(2000, month);

                Assert.IsFalse(YearMonthDay.IsValidDate(2000, month, 0));
                for (int day = 1; day < daysInMonth + 1; ++day)
                {
                    Assert.IsTrue(YearMonthDay.IsValidDate(2000, month, day));
                }

                Assert.IsFalse(YearMonthDay.IsValidDate(2000, month, daysInMonth + 1));
            }
        }
        public void TestConstructFromDayOfYear()
        {
            int[] years = { 2000, 2001 };

            Assert.IsTrue(YearMonthDay.IsLeapYear(years[0]));
            Assert.IsFalse(YearMonthDay.IsLeapYear(years[1]));

            foreach (int year in years)
            {
                int cumulativeDays = 0;
                for (int month = 1; month <= 12; ++month)
                {
                    // Test first of the month.
                    YearMonthDay ymd = new YearMonthDay(year, cumulativeDays + 1);
                    Assert.AreEqual(year, ymd.Year);
                    Assert.AreEqual(month, ymd.Month);
                    Assert.AreEqual(1, ymd.Day);

                    int daysInMonth = YearMonthDay.DaysInMonth(year, month);

                    // Test last of the month.
                    ymd = new YearMonthDay(year, cumulativeDays + daysInMonth);
                    Assert.AreEqual(year, ymd.Year);
                    Assert.AreEqual(month, ymd.Month);
                    Assert.AreEqual(daysInMonth, ymd.Day);

                    cumulativeDays += daysInMonth;
                }
            }
        }