/// <summary>
 /// Given an scriptural month number and a year in which it occurs, this method returns
 /// the equivalent scriptural month number.
 /// </summary>
 /// <remarks>
 /// No validation is performed in this method: an input month number of 13 in a non-leap-year
 /// will return a result of 7.
 /// </remarks>
 /// <param name="year">Year during which the month occurs.</param>
 /// <param name="month">Civil month number.</param>
 /// <returns>The scriptural month number.</returns>
 internal static int ScripturalToCivil(int year, int month)
 {
     if (month >= 7)
     {
         return(month - 6);
     }
     return(HebrewScripturalCalculator.IsLeapYear(year) ? month + 7 : month + 6);
 }
        public void DaysInYear()
        {
            var bcl     = new HebrewCalendar();
            var minYear = bcl.GetYear(bcl.MinSupportedDateTime);
            var maxYear = bcl.GetYear(bcl.MaxSupportedDateTime);

            for (int year = minYear; year <= maxYear; year++)
            {
                Assert.AreEqual(bcl.GetDaysInYear(year), HebrewScripturalCalculator.DaysInYear(year));
            }
        }
        /// <summary>
        /// Given a civil month number and a year in which it occurs, this method returns
        /// the equivalent scriptural month number.
        /// </summary>
        /// <remarks>
        /// No validation is performed in this method: an input month number of 13 in a non-leap-year
        /// will return a result of 7.
        /// </remarks>
        /// <param name="year">Year during which the month occurs.</param>
        /// <param name="month">Civil month number.</param>
        /// <returns>The scriptural month number.</returns>
        internal static int CivilToScriptural(int year, int month)
        {
            if (month < 7)
            {
                return(month + 6);
            }
            bool leapYear = HebrewScripturalCalculator.IsLeapYear(year);

            if (month == 7) // Adar II (13) or Nisan (1) depending on whether it's a leap year.
            {
                return(leapYear ? 13 : 1);
            }
            return(leapYear ? month - 7 : month - 6);
        }
        public void DaysInMonth()
        {
            var bcl = new HebrewCalendar();
            // Not all months in the min/max years are supported
            var minYear = bcl.GetYear(bcl.MinSupportedDateTime) + 1;
            var maxYear = bcl.GetYear(bcl.MaxSupportedDateTime) - 1;

            for (int year = minYear; year <= maxYear; year++)
            {
                int months = bcl.GetMonthsInYear(year);
                for (int month = 1; month <= months; month++)
                {
                    int scripturalMonth = HebrewMonthConverter.CivilToScriptural(year, month);
                    int bclDays         = bcl.GetDaysInMonth(year, month);
                    int nodaDays        = HebrewScripturalCalculator.DaysInMonth(year, scripturalMonth);
                    Assert.AreEqual(bclDays, nodaDays);
                }
            }
        }
 public void ScripturalGetDaysFromStartOfYearToStartOfMonth_InvalidForCoverage()
 {
     Assert.Throws <ArgumentOutOfRangeException>(() => HebrewScripturalCalculator.GetDaysFromStartOfYearToStartOfMonth(5502, 0));
 }