< Summary

Line coverage
0%
Covered lines: 0
Uncovered lines: 230
Coverable lines: 230
Total lines: 302
Line coverage: 0%
Branch coverage
0%
Covered branches: 0
Total branches: 12
Branch coverage: 0%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Cyclomatic complexity NPath complexity Sequence coverage
.cctor()100%110%
GetYearInfo(...)0%440%
GetYear(...)100%110%
GetGregorianYear(...)0%880%
.ctor()100%110%
GetEra(...)100%110%

File(s)

https://raw.githubusercontent.com/dotnet/runtime/811a7eabb75c42db53440e8ba3f60c07511cfd1f/src/libraries/System.Private.CoreLib/src/System/Globalization/ChineseLunisolarCalendar.cs

#LineLine coverage
 1// Licensed to the .NET Foundation under one or more agreements.
 2// The .NET Foundation licenses this file to you under the MIT license.
 3
 4namespace System.Globalization
 5{
 6    /// <remarks>
 7    /// Calendar support range:
 8    ///     Calendar               Minimum             Maximum
 9    ///     ==========             ==========          ==========
 10    ///     Gregorian              1901/02/19          2101/01/28
 11    ///     ChineseLunisolar       1901/01/01          2100/12/29
 12    /// </remarks>
 13
 14    public class ChineseLunisolarCalendar : EastAsianLunisolarCalendar
 15    {
 16        public const int ChineseEra = 1;
 17
 18        private const int MinLunisolarYear = 1901;
 19        private const int MaxLunisolarYear = 2100;
 20
 021        private static readonly DateTime s_minDate = new DateTime(1901, 2, 19);
 022        private static readonly DateTime s_maxDate = new DateTime((new DateTime(2101, 1, 28, 23, 59, 59, 999)).Ticks + 9
 23
 024        public override DateTime MinSupportedDateTime => s_minDate;
 25
 026        public override DateTime MaxSupportedDateTime => s_maxDate;
 27
 28        protected override int DaysInYearBeforeMinSupportedYear =>
 29            // 1900: 1-29 2-30 3-29 4-29 5-30 6-29 7-30 8-30 Leap8-29 9-30 10-30 11-29 12-30 from Calendrical Tabulation
 30            // [1] Reingold, Edward M, and Nachum Dershowitz. Calendrical Tabulations, 1900 - 2200.Cambridge: Cambridge 
 031            384;
 32
 33        // Data for years 1901-1905 and 1907-2100 matches output of Calendrical Calculations [2] and published calendar 
 34        // For 1906, month 4 of the Chinese year starts on 24 Apr 1906 and has 29 days.  This is historially accurate
 35        // but different to the values in [1] and output from [2].  This is due to a change in the astronomical methods 
 36        // by the Chinese to calculate the calendar from 1913 onwards (see warnings in [1]).
 37        // [2] Reingold, Edward M, and Nachum Dershowitz. Calendrical Calculations: The Ultimate Edition. Cambridge [etc
 38        // [3] Wang, Jianmin. Xin Bian Wan Nian Li: (1840-2050) Chong Bian Ben. Beijing: Ke xue pu ji chu ban she, 1990.
 039        private static readonly int[,] s_yinfo =
 040        {
 041/*Y           LM  Lmon  Lday    DaysPerMonth               D1   D2   D3   D4   D5   D6   D7   D8   D9   D10  D11  D12  D
 0421901     */ { 00,   02,   19,   0b0100101011100000 }, /*   29   30   29   29   30   29   30   29   30   30   30   29    
 0431902     */ { 00,   02,   08,   0b1010010101110000 }, /*   30   29   30   29   29   30   29   30   29   30   30   30    
 0441903     */ { 05,   01,   29,   0b0101001001101000 }, /*   29   30   29   30   29   29   30   29   29   30   30   29   3
 0451904     */ { 00,   02,   16,   0b1101001001100000 }, /*   30   30   29   30   29   29   30   29   29   30   30   29    
 0461905     */ { 00,   02,   04,   0b1101100101010000 }, /*   30   30   29   30   30   29   29   30   29   30   29   30    
 0471906     */ { 04,   01,   25,   0b0110101010101000 }, /*   29   30   30   29   30   29   30   29   30   29   30   29   3
 0481907     */ { 00,   02,   13,   0b0101011010100000 }, /*   29   30   29   30   29   30   30   29   30   29   30   29    
 0491908     */ { 00,   02,   02,   0b1001101011010000 }, /*   30   29   29   30   30   29   30   29   30   30   29   30    
 0501909     */ { 02,   01,   22,   0b0100101011101000 }, /*   29   30   29   29   30   29   30   29   30   30   30   29   3
 0511910     */ { 00,   02,   10,   0b0100101011100000 }, /*   29   30   29   29   30   29   30   29   30   30   30   29    
 0521911     */ { 06,   01,   30,   0b1010010011011000 }, /*   30   29   30   29   29   30   29   29   30   30   29   30   3
 0531912     */ { 00,   02,   18,   0b1010010011010000 }, /*   30   29   30   29   29   30   29   29   30   30   29   30    
 0541913     */ { 00,   02,   06,   0b1101001001010000 }, /*   30   30   29   30   29   29   30   29   29   30   29   30    
 0551914     */ { 05,   01,   26,   0b1101010100101000 }, /*   30   30   29   30   29   30   29   30   29   29   30   29   3
 0561915     */ { 00,   02,   14,   0b1011010101000000 }, /*   30   29   30   30   29   30   29   30   29   30   29   29    
 0571916     */ { 00,   02,   03,   0b1101011010100000 }, /*   30   30   29   30   29   30   30   29   30   29   30   29    
 0581917     */ { 02,   01,   23,   0b1001011011010000 }, /*   30   29   29   30   29   30   30   29   30   30   29   30   2
 0591918     */ { 00,   02,   11,   0b1001010110110000 }, /*   30   29   29   30   29   30   29   30   30   29   30   30    
 0601919     */ { 07,   02,   01,   0b0100100110111000 }, /*   29   30   29   29   30   29   29   30   30   29   30   30   3
 0611920     */ { 00,   02,   20,   0b0100100101110000 }, /*   29   30   29   29   30   29   29   30   29   30   30   30    
 0621921     */ { 00,   02,   08,   0b1010010010110000 }, /*   30   29   30   29   29   30   29   29   30   29   30   30    
 0631922     */ { 05,   01,   28,   0b1011001001011000 }, /*   30   29   30   30   29   29   30   29   29   30   29   30   3
 0641923     */ { 00,   02,   16,   0b0110101001010000 }, /*   29   30   30   29   30   29   30   29   29   30   29   30    
 0651924     */ { 00,   02,   05,   0b0110110101000000 }, /*   29   30   30   29   30   30   29   30   29   30   29   29    
 0661925     */ { 04,   01,   24,   0b1010110110101000 }, /*   30   29   30   29   30   30   29   30   30   29   30   29   3
 0671926     */ { 00,   02,   13,   0b0010101101100000 }, /*   29   29   30   29   30   29   30   30   29   30   30   29    
 0681927     */ { 00,   02,   02,   0b1001010101110000 }, /*   30   29   29   30   29   30   29   30   29   30   30   30    
 0691928     */ { 02,   01,   23,   0b0100100101111000 }, /*   29   30   29   29   30   29   29   30   29   30   30   30   3
 0701929     */ { 00,   02,   10,   0b0100100101110000 }, /*   29   30   29   29   30   29   29   30   29   30   30   30    
 0711930     */ { 06,   01,   30,   0b0110010010110000 }, /*   29   30   30   29   29   30   29   29   30   29   30   30   2
 0721931     */ { 00,   02,   17,   0b1101010010100000 }, /*   30   30   29   30   29   30   29   29   30   29   30   29    
 0731932     */ { 00,   02,   06,   0b1110101001010000 }, /*   30   30   30   29   30   29   30   29   29   30   29   30    
 0741933     */ { 05,   01,   26,   0b0110110101001000 }, /*   29   30   30   29   30   30   29   30   29   30   29   29   3
 0751934     */ { 00,   02,   14,   0b0101101011010000 }, /*   29   30   29   30   30   29   30   29   30   30   29   30    
 0761935     */ { 00,   02,   04,   0b0010101101100000 }, /*   29   29   30   29   30   29   30   30   29   30   30   29    
 0771936     */ { 03,   01,   24,   0b1001001101110000 }, /*   30   29   29   30   29   29   30   30   29   30   30   30   2
 0781937     */ { 00,   02,   11,   0b1001001011100000 }, /*   30   29   29   30   29   29   30   29   30   30   30   29    
 0791938     */ { 07,   01,   31,   0b1100100101101000 }, /*   30   30   29   29   30   29   29   30   29   30   30   29   3
 0801939     */ { 00,   02,   19,   0b1100100101010000 }, /*   30   30   29   29   30   29   29   30   29   30   29   30    
 0811940     */ { 00,   02,   08,   0b1101010010100000 }, /*   30   30   29   30   29   30   29   29   30   29   30   29    
 0821941     */ { 06,   01,   27,   0b1101101001010000 }, /*   30   30   29   30   30   29   30   29   29   30   29   30   2
 0831942     */ { 00,   02,   15,   0b1011010101010000 }, /*   30   29   30   30   29   30   29   30   29   30   29   30    
 0841943     */ { 00,   02,   05,   0b0101011010100000 }, /*   29   30   29   30   29   30   30   29   30   29   30   29    
 0851944     */ { 04,   01,   25,   0b1010101011011000 }, /*   30   29   30   29   30   29   30   29   30   30   29   30   3
 0861945     */ { 00,   02,   13,   0b0010010111010000 }, /*   29   29   30   29   29   30   29   30   30   30   29   30    
 0871946     */ { 00,   02,   02,   0b1001001011010000 }, /*   30   29   29   30   29   29   30   29   30   30   29   30    
 0881947     */ { 02,   01,   22,   0b1100100101011000 }, /*   30   30   29   29   30   29   29   30   29   30   29   30   3
 0891948     */ { 00,   02,   10,   0b1010100101010000 }, /*   30   29   30   29   30   29   29   30   29   30   29   30    
 0901949     */ { 07,   01,   29,   0b1011010010101000 }, /*   30   29   30   30   29   30   29   29   30   29   30   29   3
 0911950     */ { 00,   02,   17,   0b0110110010100000 }, /*   29   30   30   29   30   30   29   29   30   29   30   29    
 0921951     */ { 00,   02,   06,   0b1011010101010000 }, /*   30   29   30   30   29   30   29   30   29   30   29   30    
 0931952     */ { 05,   01,   27,   0b0101010110101000 }, /*   29   30   29   30   29   30   29   30   30   29   30   29   3
 0941953     */ { 00,   02,   14,   0b0100110110100000 }, /*   29   30   29   29   30   30   29   30   30   29   30   29    
 0951954     */ { 00,   02,   03,   0b1010010110110000 }, /*   30   29   30   29   29   30   29   30   30   29   30   30    
 0961955     */ { 03,   01,   24,   0b0101001010111000 }, /*   29   30   29   30   29   29   30   29   30   29   30   30   3
 0971956     */ { 00,   02,   12,   0b0101001010110000 }, /*   29   30   29   30   29   29   30   29   30   29   30   30    
 0981957     */ { 08,   01,   31,   0b1010100101010000 }, /*   30   29   30   29   30   29   29   30   29   30   29   30   2
 0991958     */ { 00,   02,   18,   0b1110100101010000 }, /*   30   30   30   29   30   29   29   30   29   30   29   30    
 01001959     */ { 00,   02,   08,   0b0110101010100000 }, /*   29   30   30   29   30   29   30   29   30   29   30   29    
 01011960     */ { 06,   01,   28,   0b1010110101010000 }, /*   30   29   30   29   30   30   29   30   29   30   29   30   2
 01021961     */ { 00,   02,   15,   0b1010101101010000 }, /*   30   29   30   29   30   29   30   30   29   30   29   30    
 01031962     */ { 00,   02,   05,   0b0100101101100000 }, /*   29   30   29   29   30   29   30   30   29   30   30   29    
 01041963     */ { 04,   01,   25,   0b1010010101110000 }, /*   30   29   30   29   29   30   29   30   29   30   30   30   2
 01051964     */ { 00,   02,   13,   0b1010010101110000 }, /*   30   29   30   29   29   30   29   30   29   30   30   30    
 01061965     */ { 00,   02,   02,   0b0101001001100000 }, /*   29   30   29   30   29   29   30   29   29   30   30   29    
 01071966     */ { 03,   01,   21,   0b1110100100110000 }, /*   30   30   30   29   30   29   29   30   29   29   30   30   2
 01081967     */ { 00,   02,   09,   0b1101100101010000 }, /*   30   30   29   30   30   29   29   30   29   30   29   30    
 01091968     */ { 07,   01,   30,   0b0101101010101000 }, /*   29   30   29   30   30   29   30   29   30   29   30   29   3
 01101969     */ { 00,   02,   17,   0b0101011010100000 }, /*   29   30   29   30   29   30   30   29   30   29   30   29    
 01111970     */ { 00,   02,   06,   0b1001011011010000 }, /*   30   29   29   30   29   30   30   29   30   30   29   30    
 01121971     */ { 05,   01,   27,   0b0100101011101000 }, /*   29   30   29   29   30   29   30   29   30   30   30   29   3
 01131972     */ { 00,   02,   15,   0b0100101011010000 }, /*   29   30   29   29   30   29   30   29   30   30   29   30    
 01141973     */ { 00,   02,   03,   0b1010010011010000 }, /*   30   29   30   29   29   30   29   29   30   30   29   30    
 01151974     */ { 04,   01,   23,   0b1101001001101000 }, /*   30   30   29   30   29   29   30   29   29   30   30   29   3
 01161975     */ { 00,   02,   11,   0b1101001001010000 }, /*   30   30   29   30   29   29   30   29   29   30   29   30    
 01171976     */ { 08,   01,   31,   0b1101010100101000 }, /*   30   30   29   30   29   30   29   30   29   29   30   29   3
 01181977     */ { 00,   02,   18,   0b1011010101000000 }, /*   30   29   30   30   29   30   29   30   29   30   29   29    
 01191978     */ { 00,   02,   07,   0b1011011010100000 }, /*   30   29   30   30   29   30   30   29   30   29   30   29    
 01201979     */ { 06,   01,   28,   0b1001011011010000 }, /*   30   29   29   30   29   30   30   29   30   30   29   30   2
 01211980     */ { 00,   02,   16,   0b1001010110110000 }, /*   30   29   29   30   29   30   29   30   30   29   30   30    
 01221981     */ { 00,   02,   05,   0b0100100110110000 }, /*   29   30   29   29   30   29   29   30   30   29   30   30    
 01231982     */ { 04,   01,   25,   0b1010010010111000 }, /*   30   29   30   29   29   30   29   29   30   29   30   30   3
 01241983     */ { 00,   02,   13,   0b1010010010110000 }, /*   30   29   30   29   29   30   29   29   30   29   30   30    
 01251984     */ { 10,   02,   02,   0b1011001001011000 }, /*   30   29   30   30   29   29   30   29   29   30   29   30   3
 01261985     */ { 00,   02,   20,   0b0110101001010000 }, /*   29   30   30   29   30   29   30   29   29   30   29   30    
 01271986     */ { 00,   02,   09,   0b0110110101000000 }, /*   29   30   30   29   30   30   29   30   29   30   29   29    
 01281987     */ { 06,   01,   29,   0b1010110110100000 }, /*   30   29   30   29   30   30   29   30   30   29   30   29   2
 01291988     */ { 00,   02,   17,   0b1010101101100000 }, /*   30   29   30   29   30   29   30   30   29   30   30   29    
 01301989     */ { 00,   02,   06,   0b1001010101110000 }, /*   30   29   29   30   29   30   29   30   29   30   30   30    
 01311990     */ { 05,   01,   27,   0b0100100101111000 }, /*   29   30   29   29   30   29   29   30   29   30   30   30   3
 01321991     */ { 00,   02,   15,   0b0100100101110000 }, /*   29   30   29   29   30   29   29   30   29   30   30   30    
 01331992     */ { 00,   02,   04,   0b0110010010110000 }, /*   29   30   30   29   29   30   29   29   30   29   30   30    
 01341993     */ { 03,   01,   23,   0b0110101001010000 }, /*   29   30   30   29   30   29   30   29   29   30   29   30   2
 01351994     */ { 00,   02,   10,   0b1110101001010000 }, /*   30   30   30   29   30   29   30   29   29   30   29   30    
 01361995     */ { 08,   01,   31,   0b0110101100101000 }, /*   29   30   30   29   30   29   30   30   29   29   30   29   3
 01371996     */ { 00,   02,   19,   0b0101101011000000 }, /*   29   30   29   30   30   29   30   29   30   30   29   29    
 01381997     */ { 00,   02,   07,   0b1010101101100000 }, /*   30   29   30   29   30   29   30   30   29   30   30   29    
 01391998     */ { 05,   01,   28,   0b1001001101101000 }, /*   30   29   29   30   29   29   30   30   29   30   30   29   3
 01401999     */ { 00,   02,   16,   0b1001001011100000 }, /*   30   29   29   30   29   29   30   29   30   30   30   29    
 01412000     */ { 00,   02,   05,   0b1100100101100000 }, /*   30   30   29   29   30   29   29   30   29   30   30   29    
 01422001     */ { 04,   01,   24,   0b1101010010101000 }, /*   30   30   29   30   29   30   29   29   30   29   30   29   3
 01432002     */ { 00,   02,   12,   0b1101010010100000 }, /*   30   30   29   30   29   30   29   29   30   29   30   29    
 01442003     */ { 00,   02,   01,   0b1101101001010000 }, /*   30   30   29   30   30   29   30   29   29   30   29   30    
 01452004     */ { 02,   01,   22,   0b0101101010101000 }, /*   29   30   29   30   30   29   30   29   30   29   30   29   3
 01462005     */ { 00,   02,   09,   0b0101011010100000 }, /*   29   30   29   30   29   30   30   29   30   29   30   29    
 01472006     */ { 07,   01,   29,   0b1010101011011000 }, /*   30   29   30   29   30   29   30   29   30   30   29   30   3
 01482007     */ { 00,   02,   18,   0b0010010111010000 }, /*   29   29   30   29   29   30   29   30   30   30   29   30    
 01492008     */ { 00,   02,   07,   0b1001001011010000 }, /*   30   29   29   30   29   29   30   29   30   30   29   30    
 01502009     */ { 05,   01,   26,   0b1100100101011000 }, /*   30   30   29   29   30   29   29   30   29   30   29   30   3
 01512010     */ { 00,   02,   14,   0b1010100101010000 }, /*   30   29   30   29   30   29   29   30   29   30   29   30    
 01522011     */ { 00,   02,   03,   0b1011010010100000 }, /*   30   29   30   30   29   30   29   29   30   29   30   29    
 01532012     */ { 04,   01,   23,   0b1011010101010000 }, /*   30   29   30   30   29   30   29   30   29   30   29   30   2
 01542013     */ { 00,   02,   10,   0b1010110101010000 }, /*   30   29   30   29   30   30   29   30   29   30   29   30    
 01552014     */ { 09,   01,   31,   0b0101010110101000 }, /*   29   30   29   30   29   30   29   30   30   29   30   29   3
 01562015     */ { 00,   02,   19,   0b0100101110100000 }, /*   29   30   29   29   30   29   30   30   30   29   30   29    
 01572016     */ { 00,   02,   08,   0b1010010110110000 }, /*   30   29   30   29   29   30   29   30   30   29   30   30    
 01582017     */ { 06,   01,   28,   0b0101001010111000 }, /*   29   30   29   30   29   29   30   29   30   29   30   30   3
 01592018     */ { 00,   02,   16,   0b0101001010110000 }, /*   29   30   29   30   29   29   30   29   30   29   30   30    
 01602019     */ { 00,   02,   05,   0b1010100100110000 }, /*   30   29   30   29   30   29   29   30   29   29   30   30    
 01612020     */ { 04,   01,   25,   0b0111010010101000 }, /*   29   30   30   30   29   30   29   29   30   29   30   29   3
 01622021     */ { 00,   02,   12,   0b0110101010100000 }, /*   29   30   30   29   30   29   30   29   30   29   30   29    
 01632022     */ { 00,   02,   01,   0b1010110101010000 }, /*   30   29   30   29   30   30   29   30   29   30   29   30    
 01642023     */ { 02,   01,   22,   0b0100110110101000 }, /*   29   30   29   29   30   30   29   30   30   29   30   29   3
 01652024     */ { 00,   02,   10,   0b0100101101100000 }, /*   29   30   29   29   30   29   30   30   29   30   30   29    
 01662025     */ { 06,   01,   29,   0b1010010101110000 }, /*   30   29   30   29   29   30   29   30   29   30   30   30   2
 01672026     */ { 00,   02,   17,   0b1010010011100000 }, /*   30   29   30   29   29   30   29   29   30   30   30   29    
 01682027     */ { 00,   02,   06,   0b1101001001100000 }, /*   30   30   29   30   29   29   30   29   29   30   30   29    
 01692028     */ { 05,   01,   26,   0b1110100100110000 }, /*   30   30   30   29   30   29   29   30   29   29   30   30   2
 01702029     */ { 00,   02,   13,   0b1101010100110000 }, /*   30   30   29   30   29   30   29   30   29   29   30   30    
 01712030     */ { 00,   02,   03,   0b0101101010100000 }, /*   29   30   29   30   30   29   30   29   30   29   30   29    
 01722031     */ { 03,   01,   23,   0b0110101101010000 }, /*   29   30   30   29   30   29   30   30   29   30   29   30   2
 01732032     */ { 00,   02,   11,   0b1001011011010000 }, /*   30   29   29   30   29   30   30   29   30   30   29   30    
 01742033     */ { 11,   01,   31,   0b0100101011101000 }, /*   29   30   29   29   30   29   30   29   30   30   30   29   3
 01752034     */ { 00,   02,   19,   0b0100101011010000 }, /*   29   30   29   29   30   29   30   29   30   30   29   30    
 01762035     */ { 00,   02,   08,   0b1010010011010000 }, /*   30   29   30   29   29   30   29   29   30   30   29   30    
 01772036     */ { 06,   01,   28,   0b1101001001011000 }, /*   30   30   29   30   29   29   30   29   29   30   29   30   3
 01782037     */ { 00,   02,   15,   0b1101001001010000 }, /*   30   30   29   30   29   29   30   29   29   30   29   30    
 01792038     */ { 00,   02,   04,   0b1101010100100000 }, /*   30   30   29   30   29   30   29   30   29   29   30   29    
 01802039     */ { 05,   01,   24,   0b1101101010100000 }, /*   30   30   29   30   30   29   30   29   30   29   30   29   2
 01812040     */ { 00,   02,   12,   0b1011010110100000 }, /*   30   29   30   30   29   30   29   30   30   29   30   29    
 01822041     */ { 00,   02,   01,   0b0101011011010000 }, /*   29   30   29   30   29   30   30   29   30   30   29   30    
 01832042     */ { 02,   01,   22,   0b0100101011011000 }, /*   29   30   29   29   30   29   30   29   30   30   29   30   3
 01842043     */ { 00,   02,   10,   0b0100100110110000 }, /*   29   30   29   29   30   29   29   30   30   29   30   30    
 01852044     */ { 07,   01,   30,   0b1010010010111000 }, /*   30   29   30   29   29   30   29   29   30   29   30   30   3
 01862045     */ { 00,   02,   17,   0b1010010010110000 }, /*   30   29   30   29   29   30   29   29   30   29   30   30    
 01872046     */ { 00,   02,   06,   0b1010101001010000 }, /*   30   29   30   29   30   29   30   29   29   30   29   30    
 01882047     */ { 05,   01,   26,   0b1011010100101000 }, /*   30   29   30   30   29   30   29   30   29   29   30   29   3
 01892048     */ { 00,   02,   14,   0b0110110100100000 }, /*   29   30   30   29   30   30   29   30   29   29   30   29    
 01902049     */ { 00,   02,   02,   0b1010110110100000 }, /*   30   29   30   29   30   30   29   30   30   29   30   29    
 01912050     */ { 03,   01,   23,   0b0101010110110000 }, /*   29   30   29   30   29   30   29   30   30   29   30   30   2
 01922051     */ { 00,   02,   11,   0b1001001101110000 }, /*   30   29   29   30   29   29   30   30   29   30   30   30    
 01932052     */ { 08,   02,   01,   0b0100100101111000 }, /*   29   30   29   29   30   29   29   30   29   30   30   30   3
 01942053     */ { 00,   02,   19,   0b0100100101110000 }, /*   29   30   29   29   30   29   29   30   29   30   30   30    
 01952054     */ { 00,   02,   08,   0b0110010010110000 }, /*   29   30   30   29   29   30   29   29   30   29   30   30    
 01962055     */ { 06,   01,   28,   0b0110101001010000 }, /*   29   30   30   29   30   29   30   29   29   30   29   30   2
 01972056     */ { 00,   02,   15,   0b1110101001010000 }, /*   30   30   30   29   30   29   30   29   29   30   29   30    
 01982057     */ { 00,   02,   04,   0b0110101100100000 }, /*   29   30   30   29   30   29   30   30   29   29   30   29    
 01992058     */ { 04,   01,   24,   0b1010101101100000 }, /*   30   29   30   29   30   29   30   30   29   30   30   29   2
 02002059     */ { 00,   02,   12,   0b1010101011100000 }, /*   30   29   30   29   30   29   30   29   30   30   30   29    
 02012060     */ { 00,   02,   02,   0b1001001011100000 }, /*   30   29   29   30   29   29   30   29   30   30   30   29    
 02022061     */ { 03,   01,   21,   0b1100100101110000 }, /*   30   30   29   29   30   29   29   30   29   30   30   30   2
 02032062     */ { 00,   02,   09,   0b1100100101100000 }, /*   30   30   29   29   30   29   29   30   29   30   30   29    
 02042063     */ { 07,   01,   29,   0b1101010010101000 }, /*   30   30   29   30   29   30   29   29   30   29   30   29   3
 02052064     */ { 00,   02,   17,   0b1101010010100000 }, /*   30   30   29   30   29   30   29   29   30   29   30   29    
 02062065     */ { 00,   02,   05,   0b1101101001010000 }, /*   30   30   29   30   30   29   30   29   29   30   29   30    
 02072066     */ { 05,   01,   26,   0b0101101010101000 }, /*   29   30   29   30   30   29   30   29   30   29   30   29   3
 02082067     */ { 00,   02,   14,   0b0101011010100000 }, /*   29   30   29   30   29   30   30   29   30   29   30   29    
 02092068     */ { 00,   02,   03,   0b1010011011010000 }, /*   30   29   30   29   29   30   30   29   30   30   29   30    
 02102069     */ { 04,   01,   23,   0b0101001011101000 }, /*   29   30   29   30   29   29   30   29   30   30   30   29   3
 02112070     */ { 00,   02,   11,   0b0101001011010000 }, /*   29   30   29   30   29   29   30   29   30   30   29   30    
 02122071     */ { 08,   01,   31,   0b1010100101011000 }, /*   30   29   30   29   30   29   29   30   29   30   29   30   3
 02132072     */ { 00,   02,   19,   0b1010100101010000 }, /*   30   29   30   29   30   29   29   30   29   30   29   30    
 02142073     */ { 00,   02,   07,   0b1011010010100000 }, /*   30   29   30   30   29   30   29   29   30   29   30   29    
 02152074     */ { 06,   01,   27,   0b1011010101010000 }, /*   30   29   30   30   29   30   29   30   29   30   29   30   2
 02162075     */ { 00,   02,   15,   0b1010110101010000 }, /*   30   29   30   29   30   30   29   30   29   30   29   30    
 02172076     */ { 00,   02,   05,   0b0101010110100000 }, /*   29   30   29   30   29   30   29   30   30   29   30   29    
 02182077     */ { 04,   01,   24,   0b1010010111010000 }, /*   30   29   30   29   29   30   29   30   30   30   29   30   2
 02192078     */ { 00,   02,   12,   0b1010010110110000 }, /*   30   29   30   29   29   30   29   30   30   29   30   30    
 02202079     */ { 00,   02,   02,   0b0101001010110000 }, /*   29   30   29   30   29   29   30   29   30   29   30   30    
 02212080     */ { 03,   01,   22,   0b1010100100111000 }, /*   30   29   30   29   30   29   29   30   29   29   30   30   3
 02222081     */ { 00,   02,   09,   0b0110100100110000 }, /*   29   30   30   29   30   29   29   30   29   29   30   30    
 02232082     */ { 07,   01,   29,   0b0111001010011000 }, /*   29   30   30   30   29   29   30   29   30   29   29   30   3
 02242083     */ { 00,   02,   17,   0b0110101010100000 }, /*   29   30   30   29   30   29   30   29   30   29   30   29    
 02252084     */ { 00,   02,   06,   0b1010110101010000 }, /*   30   29   30   29   30   30   29   30   29   30   29   30    
 02262085     */ { 05,   01,   26,   0b0100110110101000 }, /*   29   30   29   29   30   30   29   30   30   29   30   29   3
 02272086     */ { 00,   02,   14,   0b0100101101100000 }, /*   29   30   29   29   30   29   30   30   29   30   30   29    
 02282087     */ { 00,   02,   03,   0b1010010101110000 }, /*   30   29   30   29   29   30   29   30   29   30   30   30    
 02292088     */ { 04,   01,   24,   0b0101001001110000 }, /*   29   30   29   30   29   29   30   29   29   30   30   30   2
 02302089     */ { 00,   02,   10,   0b1101000101100000 }, /*   30   30   29   30   29   29   29   30   29   30   30   29    
 02312090     */ { 08,   01,   30,   0b1110100100110000 }, /*   30   30   30   29   30   29   29   30   29   29   30   30   2
 02322091     */ { 00,   02,   18,   0b1101010100100000 }, /*   30   30   29   30   29   30   29   30   29   29   30   29    
 02332092     */ { 00,   02,   07,   0b1101101010100000 }, /*   30   30   29   30   30   29   30   29   30   29   30   29    
 02342093     */ { 06,   01,   27,   0b0110101101010000 }, /*   29   30   30   29   30   29   30   30   29   30   29   30   2
 02352094     */ { 00,   02,   15,   0b0101011011010000 }, /*   29   30   29   30   29   30   30   29   30   30   29   30    
 02362095     */ { 00,   02,   05,   0b0100101011100000 }, /*   29   30   29   29   30   29   30   29   30   30   30   29    
 02372096     */ { 04,   01,   25,   0b1010010011101000 }, /*   30   29   30   29   29   30   29   29   30   30   30   29   3
 02382097     */ { 00,   02,   12,   0b1010001011010000 }, /*   30   29   30   29   29   29   30   29   30   30   29   30    
 02392098     */ { 00,   02,   01,   0b1101000101010000 }, /*   30   30   29   30   29   29   29   30   29   30   29   30    
 02402099     */ { 02,   01,   21,   0b1101100100101000 }, /*   30   30   29   30   30   29   29   30   29   29   30   29   3
 02412100     */ { 00,   02,   09,   0b1101010100100000 }, /*   30   30   29   30   29   30   29   30   29   29   30   29    
 0242         */ };
 243
 0244        internal override int MinCalendarYear => MinLunisolarYear;
 245
 0246        internal override int MaxCalendarYear => MaxLunisolarYear;
 247
 0248        internal override DateTime MinDate => s_minDate;
 249
 0250        internal override DateTime MaxDate => s_maxDate;
 251
 0252        internal override EraInfo[]? CalEraInfo => null;
 253
 254        internal override int GetYearInfo(int lunarYear, int index)
 255        {
 0256            if (lunarYear < MinLunisolarYear || lunarYear > MaxLunisolarYear)
 257            {
 0258                throw new ArgumentOutOfRangeException("year", lunarYear, SR.Format(SR.ArgumentOutOfRange_Range, MinLunis
 259            }
 260
 0261            return s_yinfo[lunarYear - MinLunisolarYear, index];
 262        }
 263
 264        internal override int GetYear(int year, DateTime time)
 265        {
 0266            return year;
 267        }
 268
 269        internal override int GetGregorianYear(int year, int era)
 270        {
 0271            if (era != CurrentEra && era != ChineseEra)
 272            {
 0273                throw new ArgumentOutOfRangeException(nameof(era), era, SR.ArgumentOutOfRange_InvalidEraValue);
 274            }
 0275            if (year < MinLunisolarYear || year > MaxLunisolarYear)
 276            {
 0277                throw new ArgumentOutOfRangeException(nameof(year), year, SR.Format(SR.ArgumentOutOfRange_Range, MinLuni
 278            }
 279
 0280            return year;
 281        }
 282
 0283        public ChineseLunisolarCalendar()
 284        {
 0285        }
 286
 287        public override int GetEra(DateTime time)
 288        {
 0289            CheckTicksRange(time.Ticks);
 0290            return ChineseEra;
 291        }
 292
 0293        internal override CalendarId ID => CalendarId.CHINESELUNISOLAR;
 294
 295        internal override CalendarId BaseCalendarID =>
 296            // Use CAL_GREGORIAN just to get CurrentEraValue as 1 since we do not have data under the ID CAL_ChineseLuni
 0297            CalendarId.GREGORIAN;
 298
 0299        public override int[] Eras => [ChineseEra];
 300    }
 301}
 302