| // © 2016 and later: Unicode, Inc. and others. |
| // License & terms of use: http://www.unicode.org/copyright.html |
| /* |
| ******************************************************************************* |
| * Copyright (C) 1996-2015, International Business Machines Corporation and * |
| * others. All Rights Reserved. * |
| ******************************************************************************* |
| */ |
| package com.ibm.icu.dev.test.calendar; |
| |
| import java.io.ByteArrayInputStream; |
| import java.io.ByteArrayOutputStream; |
| import java.io.IOException; |
| import java.io.ObjectInputStream; |
| import java.io.ObjectOutputStream; |
| import java.util.Date; |
| import java.util.Locale; |
| |
| import org.junit.Test; |
| import org.junit.runner.RunWith; |
| import org.junit.runners.JUnit4; |
| |
| import com.ibm.icu.dev.test.TestFmwk; |
| import com.ibm.icu.impl.LocaleUtility; |
| import com.ibm.icu.text.DateFormat; |
| import com.ibm.icu.text.SimpleDateFormat; |
| import com.ibm.icu.util.Calendar; |
| import com.ibm.icu.util.GregorianCalendar; |
| import com.ibm.icu.util.IslamicCalendar; |
| import com.ibm.icu.util.IslamicCalendar.CalculationType; |
| import com.ibm.icu.util.TimeZone; |
| import com.ibm.icu.util.ULocale; |
| |
| /** |
| * Tests for the <code>IslamicCalendar</code> class. |
| */ |
| @RunWith(JUnit4.class) |
| public class IslamicTest extends CalendarTestFmwk { |
| /** Constants to save typing. */ |
| public static final int MUHARRAM = IslamicCalendar.MUHARRAM; |
| public static final int SAFAR = IslamicCalendar.SAFAR; |
| public static final int RABI_1 = IslamicCalendar.RABI_1; |
| public static final int RABI_2 = IslamicCalendar.RABI_2; |
| public static final int JUMADA_1 = IslamicCalendar.JUMADA_1; |
| public static final int JUMADA_2 = IslamicCalendar.JUMADA_2; |
| public static final int RAJAB = IslamicCalendar.RAJAB; |
| public static final int SHABAN = IslamicCalendar.SHABAN; |
| public static final int RAMADAN = IslamicCalendar.RAMADAN; |
| public static final int SHAWWAL = IslamicCalendar.SHAWWAL; |
| public static final int QIDAH = IslamicCalendar.DHU_AL_QIDAH; |
| public static final int HIJJAH = IslamicCalendar.DHU_AL_HIJJAH; |
| |
| @Test |
| public void TestRoll() { |
| int[][] tests = new int[][] { |
| // input roll by output |
| // year month day field amount year month day |
| |
| { 0001, QIDAH, 2, MONTH, 1, 0001, HIJJAH, 2 }, // non-leap years |
| { 0001, QIDAH, 2, MONTH, 2, 0001, MUHARRAM, 2 }, |
| { 0001, QIDAH, 2, MONTH, -1, 0001, SHAWWAL, 2 }, |
| { 0001, MUHARRAM, 2, MONTH, 12, 0001, MUHARRAM, 2 }, |
| { 0001, MUHARRAM, 2, MONTH, 13, 0001, SAFAR, 2 }, |
| |
| { 0001, HIJJAH, 1, DATE, 30, 0001, HIJJAH, 2 }, // 29-day month |
| { 0002, HIJJAH, 1, DATE, 31, 0002, HIJJAH, 2 }, // 30-day month |
| |
| // Try some rolls that require other fields to be adjusted |
| { 0001, MUHARRAM, 30, MONTH, 1, 0001, SAFAR, 29 }, |
| { 0002, HIJJAH, 30, YEAR, -1, 0001, HIJJAH, 29 }, |
| }; |
| |
| IslamicCalendar cal = newCivil(); |
| doRollAdd(ROLL, cal, tests); |
| |
| cal = newIslamicUmalqura(); |
| doRollAdd(ROLL, cal, tests); |
| } |
| |
| /** |
| * A huge list of test cases to make sure that computeTime and computeFields |
| * work properly for a wide range of data in the civil calendar. |
| */ |
| @Test |
| public void TestCivilCases() |
| { |
| final TestCase[] tests = { |
| // |
| // Most of these test cases were taken from the back of |
| // "Calendrical Calculations", with some extras added to help |
| // debug a few of the problems that cropped up in development. |
| // |
| // The months in this table are 1-based rather than 0-based, |
| // because it's easier to edit that way. |
| // Islamic |
| // Julian Day Era Year Month Day WkDay Hour Min Sec |
| new TestCase(1507231.5, 0, -1245, 12, 9, SUN, 0, 0, 0), |
| new TestCase(1660037.5, 0, -813, 2, 23, WED, 0, 0, 0), |
| new TestCase(1746893.5, 0, -568, 4, 1, WED, 0, 0, 0), |
| new TestCase(1770641.5, 0, -501, 4, 6, SUN, 0, 0, 0), |
| new TestCase(1892731.5, 0, -157, 10, 17, WED, 0, 0, 0), |
| new TestCase(1931579.5, 0, -47, 6, 3, MON, 0, 0, 0), |
| new TestCase(1974851.5, 0, 75, 7, 13, SAT, 0, 0, 0), |
| new TestCase(2091164.5, 0, 403, 10, 5, SUN, 0, 0, 0), |
| new TestCase(2121509.5, 0, 489, 5, 22, SUN, 0, 0, 0), |
| new TestCase(2155779.5, 0, 586, 2, 7, FRI, 0, 0, 0), |
| new TestCase(2174029.5, 0, 637, 8, 7, SAT, 0, 0, 0), |
| new TestCase(2191584.5, 0, 687, 2, 20, FRI, 0, 0, 0), |
| new TestCase(2195261.5, 0, 697, 7, 7, SUN, 0, 0, 0), |
| new TestCase(2229274.5, 0, 793, 7, 1, SUN, 0, 0, 0), |
| new TestCase(2245580.5, 0, 839, 7, 6, WED, 0, 0, 0), |
| new TestCase(2266100.5, 0, 897, 6, 1, SAT, 0, 0, 0), |
| new TestCase(2288542.5, 0, 960, 9, 30, SAT, 0, 0, 0), |
| new TestCase(2290901.5, 0, 967, 5, 27, SAT, 0, 0, 0), |
| new TestCase(2323140.5, 0, 1058, 5, 18, WED, 0, 0, 0), |
| new TestCase(2334848.5, 0, 1091, 6, 2, SUN, 0, 0, 0), |
| new TestCase(2348020.5, 0, 1128, 8, 4, FRI, 0, 0, 0), |
| new TestCase(2366978.5, 0, 1182, 2, 3, SUN, 0, 0, 0), |
| new TestCase(2385648.5, 0, 1234, 10, 10, MON, 0, 0, 0), |
| new TestCase(2392825.5, 0, 1255, 1, 11, WED, 0, 0, 0), |
| new TestCase(2416223.5, 0, 1321, 1, 21, SUN, 0, 0, 0), |
| new TestCase(2425848.5, 0, 1348, 3, 19, SUN, 0, 0, 0), |
| new TestCase(2430266.5, 0, 1360, 9, 8, MON, 0, 0, 0), |
| new TestCase(2430833.5, 0, 1362, 4, 13, MON, 0, 0, 0), |
| new TestCase(2431004.5, 0, 1362, 10, 7, THU, 0, 0, 0), |
| new TestCase(2448698.5, 0, 1412, 9, 13, TUE, 0, 0, 0), |
| new TestCase(2450138.5, 0, 1416, 10, 5, SUN, 0, 0, 0), |
| new TestCase(2465737.5, 0, 1460, 10, 12, WED, 0, 0, 0), |
| new TestCase(2486076.5, 0, 1518, 3, 5, SUN, 0, 0, 0), |
| }; |
| |
| IslamicCalendar civilCalendar = newCivil(); |
| civilCalendar.setLenient(true); |
| doTestCases(tests, civilCalendar); |
| } |
| |
| @Test |
| public void TestBasic() { |
| IslamicCalendar cal = newCivil(); |
| cal.clear(); |
| cal.set(1000, 0, 30); |
| logln("1000/0/30 -> " + |
| cal.get(YEAR) + "/" + |
| cal.get(MONTH) + "/" + |
| cal.get(DATE)); |
| cal.clear(); |
| cal.set(1, 0, 30); |
| logln("1/0/30 -> " + |
| cal.get(YEAR) + "/" + |
| cal.get(MONTH) + "/" + |
| cal.get(DATE)); |
| } |
| |
| /** |
| * Test limits of the Islamic calendar |
| */ |
| @Test |
| public void TestLimits() { |
| Calendar cal = Calendar.getInstance(); |
| cal.set(2007, Calendar.JANUARY, 1); |
| IslamicCalendar islamic = newCivil(); |
| doLimitsTest(islamic, null, cal.getTime()); |
| doTheoreticalLimitsTest(islamic, true); |
| |
| |
| // number of days to test - Islamic calendar starts to exhibit |
| // rounding errors after year AH3954 - about 2500 years out. |
| |
| IslamicCalendar islamic2 = new IslamicCalendar(); |
| islamic2.setCalculationType(CalculationType.ISLAMIC); |
| int testTime = TestFmwk.getExhaustiveness() <= 5 ? 20000 : 800000; |
| doLimitsTest(islamic2, null, cal.getTime(), testTime); |
| doTheoreticalLimitsTest(islamic2, true); |
| } |
| |
| @Test |
| public void Test7427() { |
| // Test the add month in a leap year problem as reported in ticket #7427 |
| IslamicCalendar cal = new IslamicCalendar(); |
| cal.clear(); |
| cal.set(IslamicCalendar.YEAR,1431); |
| cal.set(IslamicCalendar.MONTH, IslamicCalendar.DHU_AL_HIJJAH); |
| cal.add(IslamicCalendar.MONTH,1); |
| if ( cal.get(IslamicCalendar.MONTH) != IslamicCalendar.MUHARRAM || |
| ( cal.get(IslamicCalendar.YEAR) != 1432 )) { |
| errln("Error incrementing month at the end of a leap year. Expected Month:0 Year:1432 - Got Month:" + |
| cal.get(IslamicCalendar.MONTH) + " Year:" + cal.get(IslamicCalendar.YEAR)); |
| } |
| } |
| |
| @Test |
| public void TestCoverage() { |
| { |
| // new IslamicCalendar(TimeZone) |
| IslamicCalendar cal = new IslamicCalendar(TimeZone.getDefault()); |
| if(cal == null){ |
| errln("could not create IslamicCalendar with TimeZone"); |
| } |
| } |
| |
| { |
| // new IslamicCalendar(ULocale) |
| IslamicCalendar cal = new IslamicCalendar(ULocale.getDefault()); |
| if(cal == null){ |
| errln("could not create IslamicCalendar with ULocale"); |
| } |
| } |
| |
| { |
| // new IslamicCalendar(Locale) |
| IslamicCalendar cal = new IslamicCalendar(Locale.getDefault()); |
| if(cal == null){ |
| errln("could not create IslamicCalendar with Locale"); |
| } |
| } |
| |
| { |
| // new IslamicCalendar(Date) |
| IslamicCalendar cal = new IslamicCalendar(new Date()); |
| if(cal == null){ |
| errln("could not create IslamicCalendar with Date"); |
| } |
| } |
| |
| { |
| // new IslamicCalendar(int year, int month, int date) |
| IslamicCalendar cal = new IslamicCalendar(800, IslamicCalendar.RAMADAN, 1); |
| if(cal == null){ |
| errln("could not create IslamicCalendar with year,month,date"); |
| } |
| } |
| |
| { |
| // new IslamicCalendar(int year, int month, int date, int hour, int minute, int second) |
| IslamicCalendar cal = new IslamicCalendar(800, IslamicCalendar.RAMADAN, 1, 1, 1, 1); |
| if(cal == null){ |
| errln("could not create IslamicCalendar with year,month,date,hour,minute,second"); |
| } |
| } |
| |
| { |
| // setCivil/isCivil |
| // operations on non-civil calendar |
| IslamicCalendar cal = new IslamicCalendar(800, IslamicCalendar.RAMADAN, 1, 1, 1, 1); |
| cal.setCivil(false); |
| if (cal.isCivil()) { |
| errln("islamic calendar is civil"); |
| } |
| |
| // since setCivil/isCivil are now deprecated, make sure same test works for setType |
| // operations on non-civil calendar |
| cal = new IslamicCalendar(800, IslamicCalendar.RAMADAN, 1, 1, 1, 1); |
| cal.setCalculationType(CalculationType.ISLAMIC); |
| if (cal.isCivil()) { |
| errln("islamic calendar is civil"); |
| } |
| |
| // ensure calculation type getter returns correct object and value |
| cal.setCalculationType(CalculationType.ISLAMIC_UMALQURA); |
| Object ctObj = cal.getCalculationType(); |
| if(ctObj instanceof CalculationType) { |
| CalculationType ct = (CalculationType)ctObj; |
| if(ct != CalculationType.ISLAMIC_UMALQURA) { |
| errln("wrong calculation type returned from getCalculationType"); |
| } |
| } else { |
| errln("wrong object type returned from getCalculationType"); |
| } |
| |
| |
| Date now = new Date(); |
| cal.setTime(now); |
| |
| Date then = cal.getTime(); |
| if (!now.equals(then)) { |
| errln("get/set time failed with non-civil islamic calendar"); |
| } |
| |
| logln(then.toString()); |
| |
| cal.add(Calendar.MONTH, 1); |
| cal.add(Calendar.DAY_OF_MONTH, 1); |
| cal.add(Calendar.YEAR, 1); |
| |
| logln(cal.getTime().toString()); |
| } |
| |
| { |
| // data |
| IslamicCalendar cal = new IslamicCalendar(800, IslamicCalendar.RAMADAN, 1); |
| Date time = cal.getTime(); |
| |
| String[] calendarLocales = { |
| "ar_AE", "ar_BH", "ar_DZ", "ar_EG", "ar_JO", "ar_KW", "ar_OM", |
| "ar_QA", "ar_SA", "ar_SY", "ar_YE", "ms_MY" |
| }; |
| |
| String[] formatLocales = { |
| "en", "ar", "fi", "fr", "hu", "iw", "nl" |
| }; |
| for (int i = 0; i < calendarLocales.length; ++i) { |
| String calLocName = calendarLocales[i]; |
| Locale calLocale = LocaleUtility.getLocaleFromName(calLocName); |
| cal = new IslamicCalendar(calLocale); |
| |
| for (int j = 0; j < formatLocales.length; ++j) { |
| String locName = formatLocales[j]; |
| Locale formatLocale = LocaleUtility.getLocaleFromName(locName); |
| DateFormat format = DateFormat.getDateTimeInstance(cal, DateFormat.FULL, DateFormat.FULL, formatLocale); |
| logln(calLocName + "/" + locName + " --> " + format.format(time)); |
| } |
| } |
| } |
| } |
| |
| private static IslamicCalendar newCivil() { |
| IslamicCalendar civilCalendar = new IslamicCalendar(); |
| civilCalendar.setCalculationType(CalculationType.ISLAMIC_CIVIL); |
| return civilCalendar; |
| } |
| private static IslamicCalendar newIslamic() { |
| IslamicCalendar civilCalendar = new IslamicCalendar(); |
| civilCalendar.setCalculationType(CalculationType.ISLAMIC); |
| return civilCalendar; |
| } |
| |
| private static IslamicCalendar newIslamicUmalqura() { |
| IslamicCalendar civilCalendar = new IslamicCalendar(); |
| civilCalendar.setCalculationType(CalculationType.ISLAMIC_UMALQURA); |
| return civilCalendar; |
| } |
| |
| private void verifyType(Calendar c, String expectType) { |
| String theType = c.getType(); |
| if(!theType.equals(expectType)) { |
| errln("Expected calendar to be type " + expectType + " but instead it is " + theType); |
| } |
| } |
| |
| @Test |
| public void Test8822() { |
| verifyType(newIslamic(),"islamic"); |
| verifyType(newCivil(),"islamic-civil"); |
| verifyType(newIslamicUmalqura(), "islamic-umalqura"); |
| } |
| |
| private void setAndTestCalendar(IslamicCalendar cal, int initMonth, int initDay, int initYear) { |
| cal.clear(); |
| cal.setLenient(false); |
| cal.set(initYear, initMonth, initDay); |
| int day = cal.get(Calendar.DAY_OF_MONTH); |
| int month = cal.get(Calendar.MONTH); |
| int year = cal.get(Calendar.YEAR); |
| if(initDay != day || initMonth != month || initYear != year) |
| { |
| errln("year init values:\tmonth "+initMonth+"\tday "+initDay+"\tyear "+initYear); |
| errln("values post set():\tmonth "+month+"\tday "+day+"\tyear "+year); |
| } |
| } |
| |
| private void setAndTestWholeYear(IslamicCalendar cal, int startYear) { |
| for(int startMonth = 0; startMonth < 12; startMonth++) { |
| for(int startDay = 1; startDay < 31; startDay++ ) { |
| try { |
| setAndTestCalendar(cal, startMonth, startDay, startYear); |
| } catch(IllegalArgumentException iae) { |
| if(startDay != 30) { |
| errln("unexpected exception that wasn't for trying to set a date to '30'. errmsg - " + iae.getLocalizedMessage()); |
| } |
| } |
| } |
| } |
| } |
| |
| @Test |
| public void TestIslamicUmAlQura() { |
| |
| class GregoUmmAlQuraMap { |
| public int gYear; |
| public int gMon; // 1-based |
| public int gDay; |
| public int uYear; |
| public int uMon; // 1-based |
| public int uDay; |
| // Simple constructor |
| public GregoUmmAlQuraMap(int gY, int gM, int gD, int uY, int uM, int uD) { |
| gYear = gY; |
| gMon = gM; |
| gDay = gD; |
| uYear = uY; |
| uMon = uM; |
| uDay = uD; |
| } |
| }; |
| // data from |
| // Official Umm-al-Qura calendar of SA: |
| // home, http://www.ummulqura.org.sa/default.aspx |
| // converter, http://www.ummulqura.org.sa/Index.aspx |
| final GregoUmmAlQuraMap[] guMappings = { |
| // gregorian, ummAlQura |
| // year mo da, year mo da |
| // (using 1-based months here) |
| new GregoUmmAlQuraMap( 1882,11,12, 1300, 1, 1 ), |
| new GregoUmmAlQuraMap( 1892, 7,25, 1310, 1, 1 ), |
| new GregoUmmAlQuraMap( 1896, 6,12, 1314, 1, 1 ), |
| new GregoUmmAlQuraMap( 1898, 5,22, 1316, 1, 1 ), |
| new GregoUmmAlQuraMap( 1900, 4,30, 1318, 1, 1 ), |
| new GregoUmmAlQuraMap( 1901, 4,20, 1319, 1, 1 ), |
| new GregoUmmAlQuraMap( 1902, 4,10, 1320, 1, 1 ), |
| new GregoUmmAlQuraMap( 1903, 3,30, 1321, 1, 1 ), |
| new GregoUmmAlQuraMap( 1904, 3,19, 1322, 1, 1 ), |
| new GregoUmmAlQuraMap( 1905, 3, 8, 1323, 1, 1 ), |
| new GregoUmmAlQuraMap( 1906, 2,25, 1324, 1, 1 ), |
| new GregoUmmAlQuraMap( 1907, 2,14, 1325, 1, 1 ), |
| new GregoUmmAlQuraMap( 1908, 2, 4, 1326, 1, 1 ), |
| new GregoUmmAlQuraMap( 1909, 1,23, 1327, 1, 1 ), |
| new GregoUmmAlQuraMap( 1910, 1,13, 1328, 1, 1 ), |
| new GregoUmmAlQuraMap( 1911, 1, 2, 1329, 1, 1 ), |
| new GregoUmmAlQuraMap( 1911,12,22, 1330, 1, 1 ), |
| new GregoUmmAlQuraMap( 1912,12,10, 1331, 1, 1 ), |
| new GregoUmmAlQuraMap( 1913,11,30, 1332, 1, 1 ), |
| new GregoUmmAlQuraMap( 1914,11,19, 1333, 1, 1 ), |
| new GregoUmmAlQuraMap( 1915,11, 9, 1334, 1, 1 ), |
| new GregoUmmAlQuraMap( 1916,10,28, 1335, 1, 1 ), |
| new GregoUmmAlQuraMap( 1917,10,18, 1336, 1, 1 ), |
| new GregoUmmAlQuraMap( 1918,10, 7, 1337, 1, 1 ), |
| new GregoUmmAlQuraMap( 1919, 9,26, 1338, 1, 1 ), |
| new GregoUmmAlQuraMap( 1920, 9,14, 1339, 1, 1 ), |
| new GregoUmmAlQuraMap( 1921, 9, 4, 1340, 1, 1 ), |
| new GregoUmmAlQuraMap( 1922, 8,24, 1341, 1, 1 ), |
| new GregoUmmAlQuraMap( 1923, 8,14, 1342, 1, 1 ), |
| new GregoUmmAlQuraMap( 1924, 8, 2, 1343, 1, 1 ), |
| new GregoUmmAlQuraMap( 1925, 7,22, 1344, 1, 1 ), |
| new GregoUmmAlQuraMap( 1926, 7,11, 1345, 1, 1 ), |
| new GregoUmmAlQuraMap( 1927, 6,30, 1346, 1, 1 ), |
| new GregoUmmAlQuraMap( 1928, 6,19, 1347, 1, 1 ), |
| new GregoUmmAlQuraMap( 1929, 6, 9, 1348, 1, 1 ), |
| new GregoUmmAlQuraMap( 1930, 5,29, 1349, 1, 1 ), |
| new GregoUmmAlQuraMap( 1931, 5,19, 1350, 1, 1 ), |
| new GregoUmmAlQuraMap( 1932, 5, 7, 1351, 1, 1 ), |
| new GregoUmmAlQuraMap( 1933, 4,26, 1352, 1, 1 ), |
| new GregoUmmAlQuraMap( 1934, 4,15, 1353, 1, 1 ), |
| new GregoUmmAlQuraMap( 1935, 4, 5, 1354, 1, 1 ), |
| new GregoUmmAlQuraMap( 1936, 3,24, 1355, 1, 1 ), |
| new GregoUmmAlQuraMap( 1937, 3,14, 1356, 1, 1 ), |
| new GregoUmmAlQuraMap( 1938, 3, 4, 1357, 1, 1 ), |
| new GregoUmmAlQuraMap( 1939, 2,21, 1358, 1, 1 ), |
| new GregoUmmAlQuraMap( 1940, 2,10, 1359, 1, 1 ), |
| new GregoUmmAlQuraMap( 1941, 1,29, 1360, 1, 1 ), |
| new GregoUmmAlQuraMap( 1942, 1,18, 1361, 1, 1 ), |
| new GregoUmmAlQuraMap( 1943, 1, 8, 1362, 1, 1 ), |
| new GregoUmmAlQuraMap( 1943,12,28, 1363, 1, 1 ), |
| new GregoUmmAlQuraMap( 1944,12,17, 1364, 1, 1 ), |
| new GregoUmmAlQuraMap( 1945,12, 6, 1365, 1, 1 ), |
| new GregoUmmAlQuraMap( 1946,11,25, 1366, 1, 1 ), |
| new GregoUmmAlQuraMap( 1947,11,14, 1367, 1, 1 ), |
| new GregoUmmAlQuraMap( 1948,11, 3, 1368, 1, 1 ), |
| new GregoUmmAlQuraMap( 1949,10,23, 1369, 1, 1 ), |
| new GregoUmmAlQuraMap( 1950,10,13, 1370, 1, 1 ), |
| new GregoUmmAlQuraMap( 1951,10, 3, 1371, 1, 1 ), |
| new GregoUmmAlQuraMap( 1952, 9,21, 1372, 1, 1 ), |
| new GregoUmmAlQuraMap( 1953, 9,10, 1373, 1, 1 ), |
| new GregoUmmAlQuraMap( 1954, 8,30, 1374, 1, 1 ), |
| new GregoUmmAlQuraMap( 1955, 8,19, 1375, 1, 1 ), |
| new GregoUmmAlQuraMap( 1956, 8, 8, 1376, 1, 1 ), |
| new GregoUmmAlQuraMap( 1957, 7,29, 1377, 1, 1 ), |
| new GregoUmmAlQuraMap( 1958, 7,18, 1378, 1, 1 ), |
| new GregoUmmAlQuraMap( 1959, 7, 8, 1379, 1, 1 ), |
| new GregoUmmAlQuraMap( 1960, 6,26, 1380, 1, 1 ), |
| new GregoUmmAlQuraMap( 1961, 6,15, 1381, 1, 1 ), |
| new GregoUmmAlQuraMap( 1962, 6, 4, 1382, 1, 1 ), |
| new GregoUmmAlQuraMap( 1963, 5,24, 1383, 1, 1 ), |
| new GregoUmmAlQuraMap( 1964, 5,13, 1384, 1, 1 ), |
| new GregoUmmAlQuraMap( 1965, 5, 3, 1385, 1, 1 ), |
| new GregoUmmAlQuraMap( 1966, 4,22, 1386, 1, 1 ), |
| new GregoUmmAlQuraMap( 1967, 4,11, 1387, 1, 1 ), |
| new GregoUmmAlQuraMap( 1968, 3,30, 1388, 1, 1 ), |
| new GregoUmmAlQuraMap( 1969, 3,19, 1389, 1, 1 ), |
| new GregoUmmAlQuraMap( 1970, 3, 9, 1390, 1, 1 ), |
| new GregoUmmAlQuraMap( 1971, 2,27, 1391, 1, 1 ), |
| new GregoUmmAlQuraMap( 1972, 2,16, 1392, 1, 1 ), |
| new GregoUmmAlQuraMap( 1973, 2, 5, 1393, 1, 1 ), |
| new GregoUmmAlQuraMap( 1974, 1,25, 1394, 1, 1 ), |
| new GregoUmmAlQuraMap( 1975, 1,14, 1395, 1, 1 ), |
| new GregoUmmAlQuraMap( 1976, 1, 3, 1396, 1, 1 ), |
| new GregoUmmAlQuraMap( 1976,12,22, 1397, 1, 1 ), |
| new GregoUmmAlQuraMap( 1977,12,12, 1398, 1, 1 ), |
| new GregoUmmAlQuraMap( 1978,12, 1, 1399, 1, 1 ), |
| new GregoUmmAlQuraMap( 1979,11,21, 1400, 1, 1 ), |
| new GregoUmmAlQuraMap( 1980,11, 9, 1401, 1, 1 ), |
| new GregoUmmAlQuraMap( 1981,10,29, 1402, 1, 1 ), |
| new GregoUmmAlQuraMap( 1982,10,18, 1403, 1, 1 ), |
| new GregoUmmAlQuraMap( 1983,10, 8, 1404, 1, 1 ), |
| new GregoUmmAlQuraMap( 1984, 9,26, 1405, 1, 1 ), |
| new GregoUmmAlQuraMap( 1985, 9,16, 1406, 1, 1 ), |
| new GregoUmmAlQuraMap( 1986, 9, 6, 1407, 1, 1 ), |
| new GregoUmmAlQuraMap( 1987, 8,26, 1408, 1, 1 ), |
| new GregoUmmAlQuraMap( 1988, 8,14, 1409, 1, 1 ), |
| new GregoUmmAlQuraMap( 1989, 8, 3, 1410, 1, 1 ), |
| new GregoUmmAlQuraMap( 1990, 7,23, 1411, 1, 1 ), |
| new GregoUmmAlQuraMap( 1991, 7,13, 1412, 1, 1 ), |
| new GregoUmmAlQuraMap( 1992, 7, 2, 1413, 1, 1 ), |
| new GregoUmmAlQuraMap( 1993, 6,21, 1414, 1, 1 ), |
| new GregoUmmAlQuraMap( 1994, 6,11, 1415, 1, 1 ), |
| new GregoUmmAlQuraMap( 1995, 5,31, 1416, 1, 1 ), |
| new GregoUmmAlQuraMap( 1996, 5,19, 1417, 1, 1 ), |
| new GregoUmmAlQuraMap( 1997, 5, 8, 1418, 1, 1 ), |
| new GregoUmmAlQuraMap( 1998, 4,28, 1419, 1, 1 ), |
| new GregoUmmAlQuraMap( 1999, 4,17, 1420, 1, 1 ), |
| new GregoUmmAlQuraMap( 1999, 5,16, 1420, 2, 1 ), |
| new GregoUmmAlQuraMap( 1999, 6,15, 1420, 3, 1 ), |
| new GregoUmmAlQuraMap( 1999, 7,14, 1420, 4, 1 ), |
| new GregoUmmAlQuraMap( 1999, 8,12, 1420, 5, 1 ), |
| new GregoUmmAlQuraMap( 1999, 9,11, 1420, 6, 1 ), |
| new GregoUmmAlQuraMap( 1999,10,10, 1420, 7, 1 ), |
| new GregoUmmAlQuraMap( 1999,11, 9, 1420, 8, 1 ), |
| new GregoUmmAlQuraMap( 1999,12, 9, 1420, 9, 1 ), |
| new GregoUmmAlQuraMap( 2000, 1, 8, 1420,10, 1 ), |
| new GregoUmmAlQuraMap( 2000, 2, 7, 1420,11, 1 ), |
| new GregoUmmAlQuraMap( 2000, 3, 7, 1420,12, 1 ), |
| new GregoUmmAlQuraMap( 2000, 4, 6, 1421, 1, 1 ), |
| new GregoUmmAlQuraMap( 2000, 5, 5, 1421, 2, 1 ), |
| new GregoUmmAlQuraMap( 2000, 6, 3, 1421, 3, 1 ), |
| new GregoUmmAlQuraMap( 2000, 7, 3, 1421, 4, 1 ), |
| new GregoUmmAlQuraMap( 2000, 8, 1, 1421, 5, 1 ), |
| new GregoUmmAlQuraMap( 2000, 8,30, 1421, 6, 1 ), |
| new GregoUmmAlQuraMap( 2000, 9,28, 1421, 7, 1 ), |
| new GregoUmmAlQuraMap( 2000,10,28, 1421, 8, 1 ), |
| new GregoUmmAlQuraMap( 2000,11,27, 1421, 9, 1 ), |
| new GregoUmmAlQuraMap( 2000,12,27, 1421,10, 1 ), |
| new GregoUmmAlQuraMap( 2001, 1,26, 1421,11, 1 ), |
| new GregoUmmAlQuraMap( 2001, 2,24, 1421,12, 1 ), |
| new GregoUmmAlQuraMap( 2001, 3,26, 1422, 1, 1 ), |
| new GregoUmmAlQuraMap( 2001, 4,25, 1422, 2, 1 ), |
| new GregoUmmAlQuraMap( 2001, 5,24, 1422, 3, 1 ), |
| new GregoUmmAlQuraMap( 2001, 6,22, 1422, 4, 1 ), |
| new GregoUmmAlQuraMap( 2001, 7,22, 1422, 5, 1 ), |
| new GregoUmmAlQuraMap( 2001, 8,20, 1422, 6, 1 ), |
| new GregoUmmAlQuraMap( 2001, 9,18, 1422, 7, 1 ), |
| new GregoUmmAlQuraMap( 2001,10,17, 1422, 8, 1 ), |
| new GregoUmmAlQuraMap( 2001,11,16, 1422, 9, 1 ), |
| new GregoUmmAlQuraMap( 2001,12,16, 1422,10, 1 ), |
| new GregoUmmAlQuraMap( 2002, 1,15, 1422,11, 1 ), |
| new GregoUmmAlQuraMap( 2002, 2,13, 1422,12, 1 ), |
| new GregoUmmAlQuraMap( 2002, 3,15, 1423, 1, 1 ), |
| new GregoUmmAlQuraMap( 2002, 4,14, 1423, 2, 1 ), |
| new GregoUmmAlQuraMap( 2002, 5,13, 1423, 3, 1 ), |
| new GregoUmmAlQuraMap( 2002, 6,12, 1423, 4, 1 ), |
| new GregoUmmAlQuraMap( 2002, 7,11, 1423, 5, 1 ), |
| new GregoUmmAlQuraMap( 2002, 8,10, 1423, 6, 1 ), |
| new GregoUmmAlQuraMap( 2002, 9, 8, 1423, 7, 1 ), |
| new GregoUmmAlQuraMap( 2002,10, 7, 1423, 8, 1 ), |
| new GregoUmmAlQuraMap( 2002,11, 6, 1423, 9, 1 ), |
| new GregoUmmAlQuraMap( 2002,12, 5, 1423,10, 1 ), |
| new GregoUmmAlQuraMap( 2003, 1, 4, 1423,11, 1 ), |
| new GregoUmmAlQuraMap( 2003, 2, 2, 1423,12, 1 ), |
| new GregoUmmAlQuraMap( 2003, 3, 4, 1424, 1, 1 ), |
| new GregoUmmAlQuraMap( 2003, 4, 3, 1424, 2, 1 ), |
| new GregoUmmAlQuraMap( 2003, 5, 2, 1424, 3, 1 ), |
| new GregoUmmAlQuraMap( 2003, 6, 1, 1424, 4, 1 ), |
| new GregoUmmAlQuraMap( 2003, 7, 1, 1424, 5, 1 ), |
| new GregoUmmAlQuraMap( 2003, 7,30, 1424, 6, 1 ), |
| new GregoUmmAlQuraMap( 2003, 8,29, 1424, 7, 1 ), |
| new GregoUmmAlQuraMap( 2003, 9,27, 1424, 8, 1 ), |
| new GregoUmmAlQuraMap( 2003,10,26, 1424, 9, 1 ), |
| new GregoUmmAlQuraMap( 2003,11,25, 1424,10, 1 ), |
| new GregoUmmAlQuraMap( 2003,12,24, 1424,11, 1 ), |
| new GregoUmmAlQuraMap( 2004, 1,23, 1424,12, 1 ), |
| new GregoUmmAlQuraMap( 2004, 2,21, 1425, 1, 1 ), |
| new GregoUmmAlQuraMap( 2004, 3,22, 1425, 2, 1 ), |
| new GregoUmmAlQuraMap( 2004, 4,20, 1425, 3, 1 ), |
| new GregoUmmAlQuraMap( 2004, 5,20, 1425, 4, 1 ), |
| new GregoUmmAlQuraMap( 2004, 6,19, 1425, 5, 1 ), |
| new GregoUmmAlQuraMap( 2004, 7,18, 1425, 6, 1 ), |
| new GregoUmmAlQuraMap( 2004, 8,17, 1425, 7, 1 ), |
| new GregoUmmAlQuraMap( 2004, 9,15, 1425, 8, 1 ), |
| new GregoUmmAlQuraMap( 2004,10,15, 1425, 9, 1 ), |
| new GregoUmmAlQuraMap( 2004,11,14, 1425,10, 1 ), |
| new GregoUmmAlQuraMap( 2004,12,13, 1425,11, 1 ), |
| new GregoUmmAlQuraMap( 2005, 1,12, 1425,12, 1 ), |
| new GregoUmmAlQuraMap( 2005, 2,10, 1426, 1, 1 ), |
| new GregoUmmAlQuraMap( 2005, 3,11, 1426, 2, 1 ), |
| new GregoUmmAlQuraMap( 2005, 4,10, 1426, 3, 1 ), |
| new GregoUmmAlQuraMap( 2005, 5, 9, 1426, 4, 1 ), |
| new GregoUmmAlQuraMap( 2005, 6, 8, 1426, 5, 1 ), |
| new GregoUmmAlQuraMap( 2005, 7, 7, 1426, 6, 1 ), |
| new GregoUmmAlQuraMap( 2005, 8, 6, 1426, 7, 1 ), |
| new GregoUmmAlQuraMap( 2005, 9, 5, 1426, 8, 1 ), |
| new GregoUmmAlQuraMap( 2005,10, 4, 1426, 9, 1 ), |
| new GregoUmmAlQuraMap( 2005,11, 3, 1426,10, 1 ), |
| new GregoUmmAlQuraMap( 2005,12, 3, 1426,11, 1 ), |
| new GregoUmmAlQuraMap( 2006, 1, 1, 1426,12, 1 ), |
| new GregoUmmAlQuraMap( 2006, 1,31, 1427, 1, 1 ), |
| new GregoUmmAlQuraMap( 2006, 3, 1, 1427, 2, 1 ), |
| new GregoUmmAlQuraMap( 2006, 3,30, 1427, 3, 1 ), |
| new GregoUmmAlQuraMap( 2006, 4,29, 1427, 4, 1 ), |
| new GregoUmmAlQuraMap( 2006, 5,28, 1427, 5, 1 ), |
| new GregoUmmAlQuraMap( 2006, 6,27, 1427, 6, 1 ), |
| new GregoUmmAlQuraMap( 2006, 7,26, 1427, 7, 1 ), |
| new GregoUmmAlQuraMap( 2006, 8,25, 1427, 8, 1 ), |
| new GregoUmmAlQuraMap( 2006, 9,24, 1427, 9, 1 ), |
| new GregoUmmAlQuraMap( 2006,10,23, 1427,10, 1 ), |
| new GregoUmmAlQuraMap( 2006,11,22, 1427,11, 1 ), |
| new GregoUmmAlQuraMap( 2006,12,22, 1427,12, 1 ), |
| new GregoUmmAlQuraMap( 2007, 1,20, 1428, 1, 1 ), |
| new GregoUmmAlQuraMap( 2007, 2,19, 1428, 2, 1 ), |
| new GregoUmmAlQuraMap( 2007, 3,20, 1428, 3, 1 ), |
| new GregoUmmAlQuraMap( 2007, 4,18, 1428, 4, 1 ), |
| new GregoUmmAlQuraMap( 2007, 5,18, 1428, 5, 1 ), |
| new GregoUmmAlQuraMap( 2007, 6,16, 1428, 6, 1 ), |
| new GregoUmmAlQuraMap( 2007, 7,15, 1428, 7, 1 ), |
| new GregoUmmAlQuraMap( 2007, 8,14, 1428, 8, 1 ), |
| new GregoUmmAlQuraMap( 2007, 9,13, 1428, 9, 1 ), |
| new GregoUmmAlQuraMap( 2007,10,13, 1428,10, 1 ), |
| new GregoUmmAlQuraMap( 2007,11,11, 1428,11, 1 ), |
| new GregoUmmAlQuraMap( 2007,12,11, 1428,12, 1 ), |
| new GregoUmmAlQuraMap( 2008, 1,10, 1429, 1, 1 ), |
| new GregoUmmAlQuraMap( 2008, 2, 8, 1429, 2, 1 ), |
| new GregoUmmAlQuraMap( 2008, 3, 9, 1429, 3, 1 ), |
| new GregoUmmAlQuraMap( 2008, 4, 7, 1429, 4, 1 ), |
| new GregoUmmAlQuraMap( 2008, 5, 6, 1429, 5, 1 ), |
| new GregoUmmAlQuraMap( 2008, 6, 5, 1429, 6, 1 ), |
| new GregoUmmAlQuraMap( 2008, 7, 4, 1429, 7, 1 ), |
| new GregoUmmAlQuraMap( 2008, 8, 2, 1429, 8, 1 ), |
| new GregoUmmAlQuraMap( 2008, 9, 1, 1429, 9, 1 ), |
| new GregoUmmAlQuraMap( 2008,10, 1, 1429,10, 1 ), |
| new GregoUmmAlQuraMap( 2008,10,30, 1429,11, 1 ), |
| new GregoUmmAlQuraMap( 2008,11,29, 1429,12, 1 ), |
| new GregoUmmAlQuraMap( 2008,12,29, 1430, 1, 1 ), |
| new GregoUmmAlQuraMap( 2009, 1,27, 1430, 2, 1 ), |
| new GregoUmmAlQuraMap( 2009, 2,26, 1430, 3, 1 ), |
| new GregoUmmAlQuraMap( 2009, 3,28, 1430, 4, 1 ), |
| new GregoUmmAlQuraMap( 2009, 4,26, 1430, 5, 1 ), |
| new GregoUmmAlQuraMap( 2009, 5,25, 1430, 6, 1 ), |
| new GregoUmmAlQuraMap( 2009, 6,24, 1430, 7, 1 ), |
| new GregoUmmAlQuraMap( 2009, 7,23, 1430, 8, 1 ), |
| new GregoUmmAlQuraMap( 2009, 8,22, 1430, 9, 1 ), |
| new GregoUmmAlQuraMap( 2009, 9,20, 1430,10, 1 ), |
| new GregoUmmAlQuraMap( 2009,10,20, 1430,11, 1 ), |
| new GregoUmmAlQuraMap( 2009,11,18, 1430,12, 1 ), |
| new GregoUmmAlQuraMap( 2009,12,18, 1431, 1, 1 ), |
| new GregoUmmAlQuraMap( 2010, 1,16, 1431, 2, 1 ), |
| new GregoUmmAlQuraMap( 2010, 2,15, 1431, 3, 1 ), |
| new GregoUmmAlQuraMap( 2010, 3,17, 1431, 4, 1 ), |
| new GregoUmmAlQuraMap( 2010, 4,15, 1431, 5, 1 ), |
| new GregoUmmAlQuraMap( 2010, 5,15, 1431, 6, 1 ), |
| new GregoUmmAlQuraMap( 2010, 6,13, 1431, 7, 1 ), |
| new GregoUmmAlQuraMap( 2010, 7,13, 1431, 8, 1 ), |
| new GregoUmmAlQuraMap( 2010, 8,11, 1431, 9, 1 ), |
| new GregoUmmAlQuraMap( 2010, 9,10, 1431,10, 1 ), |
| new GregoUmmAlQuraMap( 2010,10, 9, 1431,11, 1 ), |
| new GregoUmmAlQuraMap( 2010,11, 7, 1431,12, 1 ), |
| new GregoUmmAlQuraMap( 2010,12, 7, 1432, 1, 1 ), |
| new GregoUmmAlQuraMap( 2011, 1, 5, 1432, 2, 1 ), |
| new GregoUmmAlQuraMap( 2011, 2, 4, 1432, 3, 1 ), |
| new GregoUmmAlQuraMap( 2011, 3, 6, 1432, 4, 1 ), |
| new GregoUmmAlQuraMap( 2011, 4, 5, 1432, 5, 1 ), |
| new GregoUmmAlQuraMap( 2011, 5, 4, 1432, 6, 1 ), |
| new GregoUmmAlQuraMap( 2011, 6, 3, 1432, 7, 1 ), |
| new GregoUmmAlQuraMap( 2011, 7, 2, 1432, 8, 1 ), |
| new GregoUmmAlQuraMap( 2011, 8, 1, 1432, 9, 1 ), |
| new GregoUmmAlQuraMap( 2011, 8,30, 1432,10, 1 ), |
| new GregoUmmAlQuraMap( 2011, 9,29, 1432,11, 1 ), |
| new GregoUmmAlQuraMap( 2011,10,28, 1432,12, 1 ), |
| new GregoUmmAlQuraMap( 2011,11,26, 1433, 1, 1 ), |
| new GregoUmmAlQuraMap( 2011,12,26, 1433, 2, 1 ), |
| new GregoUmmAlQuraMap( 2012, 1,24, 1433, 3, 1 ), |
| new GregoUmmAlQuraMap( 2012, 2,23, 1433, 4, 1 ), |
| new GregoUmmAlQuraMap( 2012, 3,24, 1433, 5, 1 ), |
| new GregoUmmAlQuraMap( 2012, 4,22, 1433, 6, 1 ), |
| new GregoUmmAlQuraMap( 2012, 5,22, 1433, 7, 1 ), |
| new GregoUmmAlQuraMap( 2012, 6,21, 1433, 8, 1 ), |
| new GregoUmmAlQuraMap( 2012, 7,20, 1433, 9, 1 ), |
| new GregoUmmAlQuraMap( 2012, 8,19, 1433,10, 1 ), |
| new GregoUmmAlQuraMap( 2012, 9,17, 1433,11, 1 ), |
| new GregoUmmAlQuraMap( 2012,10,17, 1433,12, 1 ), |
| new GregoUmmAlQuraMap( 2012,11,15, 1434, 1, 1 ), |
| new GregoUmmAlQuraMap( 2012,12,14, 1434, 2, 1 ), |
| new GregoUmmAlQuraMap( 2013, 1,13, 1434, 3, 1 ), |
| new GregoUmmAlQuraMap( 2013, 2,11, 1434, 4, 1 ), |
| new GregoUmmAlQuraMap( 2013, 3,13, 1434, 5, 1 ), |
| new GregoUmmAlQuraMap( 2013, 4,11, 1434, 6, 1 ), |
| new GregoUmmAlQuraMap( 2013, 5,11, 1434, 7, 1 ), |
| new GregoUmmAlQuraMap( 2013, 6,10, 1434, 8, 1 ), |
| new GregoUmmAlQuraMap( 2013, 7, 9, 1434, 9, 1 ), |
| new GregoUmmAlQuraMap( 2013, 8, 8, 1434,10, 1 ), |
| new GregoUmmAlQuraMap( 2013, 9, 7, 1434,11, 1 ), |
| new GregoUmmAlQuraMap( 2013,10, 6, 1434,12, 1 ), |
| new GregoUmmAlQuraMap( 2013,11, 4, 1435, 1, 1 ), |
| new GregoUmmAlQuraMap( 2013,12, 4, 1435, 2, 1 ), |
| new GregoUmmAlQuraMap( 2014, 1, 2, 1435, 3, 1 ), |
| new GregoUmmAlQuraMap( 2014, 2, 1, 1435, 4, 1 ), |
| new GregoUmmAlQuraMap( 2014, 3, 2, 1435, 5, 1 ), |
| new GregoUmmAlQuraMap( 2014, 4, 1, 1435, 6, 1 ), |
| new GregoUmmAlQuraMap( 2014, 4,30, 1435, 7, 1 ), |
| new GregoUmmAlQuraMap( 2014, 5,30, 1435, 8, 1 ), |
| new GregoUmmAlQuraMap( 2014, 6,28, 1435, 9, 1 ), |
| new GregoUmmAlQuraMap( 2014, 7,28, 1435,10, 1 ), |
| new GregoUmmAlQuraMap( 2014, 8,27, 1435,11, 1 ), |
| new GregoUmmAlQuraMap( 2014, 9,25, 1435,12, 1 ), |
| new GregoUmmAlQuraMap( 2014,10,25, 1436, 1, 1 ), |
| new GregoUmmAlQuraMap( 2014,11,23, 1436, 2, 1 ), |
| new GregoUmmAlQuraMap( 2014,12,23, 1436, 3, 1 ), |
| new GregoUmmAlQuraMap( 2015, 1,21, 1436, 4, 1 ), |
| new GregoUmmAlQuraMap( 2015, 2,20, 1436, 5, 1 ), |
| new GregoUmmAlQuraMap( 2015, 3,21, 1436, 6, 1 ), |
| new GregoUmmAlQuraMap( 2015, 4,20, 1436, 7, 1 ), |
| new GregoUmmAlQuraMap( 2015, 5,19, 1436, 8, 1 ), |
| new GregoUmmAlQuraMap( 2015, 6,18, 1436, 9, 1 ), |
| new GregoUmmAlQuraMap( 2015, 7,17, 1436,10, 1 ), |
| new GregoUmmAlQuraMap( 2015, 8,16, 1436,11, 1 ), |
| new GregoUmmAlQuraMap( 2015, 9,14, 1436,12, 1 ), |
| new GregoUmmAlQuraMap( 2015,10,14, 1437, 1, 1 ), |
| new GregoUmmAlQuraMap( 2015,11,13, 1437, 2, 1 ), |
| new GregoUmmAlQuraMap( 2015,12,12, 1437, 3, 1 ), |
| new GregoUmmAlQuraMap( 2016, 1,11, 1437, 4, 1 ), |
| new GregoUmmAlQuraMap( 2016, 2,10, 1437, 5, 1 ), |
| new GregoUmmAlQuraMap( 2016, 3,10, 1437, 6, 1 ), |
| new GregoUmmAlQuraMap( 2016, 4, 8, 1437, 7, 1 ), |
| new GregoUmmAlQuraMap( 2016, 5, 8, 1437, 8, 1 ), |
| new GregoUmmAlQuraMap( 2016, 6, 6, 1437, 9, 1 ), |
| new GregoUmmAlQuraMap( 2016, 7, 6, 1437,10, 1 ), |
| new GregoUmmAlQuraMap( 2016, 8, 4, 1437,11, 1 ), |
| new GregoUmmAlQuraMap( 2016, 9, 2, 1437,12, 1 ), |
| new GregoUmmAlQuraMap( 2016,10, 2, 1438, 1, 1 ), |
| new GregoUmmAlQuraMap( 2016,11, 1, 1438, 2, 1 ), |
| new GregoUmmAlQuraMap( 2016,11,30, 1438, 3, 1 ), |
| new GregoUmmAlQuraMap( 2016,12,30, 1438, 4, 1 ), |
| new GregoUmmAlQuraMap( 2017, 1,29, 1438, 5, 1 ), |
| new GregoUmmAlQuraMap( 2017, 2,28, 1438, 6, 1 ), |
| new GregoUmmAlQuraMap( 2017, 3,29, 1438, 7, 1 ), |
| new GregoUmmAlQuraMap( 2017, 4,27, 1438, 8, 1 ), |
| new GregoUmmAlQuraMap( 2017, 5,27, 1438, 9, 1 ), |
| new GregoUmmAlQuraMap( 2017, 6,25, 1438,10, 1 ), |
| new GregoUmmAlQuraMap( 2017, 7,24, 1438,11, 1 ), |
| new GregoUmmAlQuraMap( 2017, 8,23, 1438,12, 1 ), |
| new GregoUmmAlQuraMap( 2017, 9,21, 1439, 1, 1 ), |
| new GregoUmmAlQuraMap( 2017,10,21, 1439, 2, 1 ), |
| new GregoUmmAlQuraMap( 2017,11,19, 1439, 3, 1 ), |
| new GregoUmmAlQuraMap( 2017,12,19, 1439, 4, 1 ), |
| new GregoUmmAlQuraMap( 2018, 1,18, 1439, 5, 1 ), |
| new GregoUmmAlQuraMap( 2018, 2,17, 1439, 6, 1 ), |
| new GregoUmmAlQuraMap( 2018, 3,18, 1439, 7, 1 ), |
| new GregoUmmAlQuraMap( 2018, 4,17, 1439, 8, 1 ), |
| new GregoUmmAlQuraMap( 2018, 5,16, 1439, 9, 1 ), |
| new GregoUmmAlQuraMap( 2018, 6,15, 1439,10, 1 ), |
| new GregoUmmAlQuraMap( 2018, 7,14, 1439,11, 1 ), |
| new GregoUmmAlQuraMap( 2018, 8,12, 1439,12, 1 ), |
| new GregoUmmAlQuraMap( 2018, 9,11, 1440, 1, 1 ), |
| new GregoUmmAlQuraMap( 2019, 8,31, 1441, 1, 1 ), |
| new GregoUmmAlQuraMap( 2020, 8,20, 1442, 1, 1 ), |
| new GregoUmmAlQuraMap( 2021, 8, 9, 1443, 1, 1 ), |
| new GregoUmmAlQuraMap( 2022, 7,30, 1444, 1, 1 ), |
| new GregoUmmAlQuraMap( 2023, 7,19, 1445, 1, 1 ), |
| new GregoUmmAlQuraMap( 2024, 7, 7, 1446, 1, 1 ), |
| new GregoUmmAlQuraMap( 2025, 6,26, 1447, 1, 1 ), |
| new GregoUmmAlQuraMap( 2026, 6,16, 1448, 1, 1 ), |
| new GregoUmmAlQuraMap( 2027, 6, 6, 1449, 1, 1 ), |
| new GregoUmmAlQuraMap( 2028, 5,25, 1450, 1, 1 ), |
| new GregoUmmAlQuraMap( 2029, 5,14, 1451, 1, 1 ), |
| new GregoUmmAlQuraMap( 2030, 5, 4, 1452, 1, 1 ), |
| new GregoUmmAlQuraMap( 2031, 4,23, 1453, 1, 1 ), |
| new GregoUmmAlQuraMap( 2032, 4,11, 1454, 1, 1 ), |
| new GregoUmmAlQuraMap( 2033, 4, 1, 1455, 1, 1 ), |
| new GregoUmmAlQuraMap( 2034, 3,22, 1456, 1, 1 ), |
| new GregoUmmAlQuraMap( 2035, 3,11, 1457, 1, 1 ), |
| new GregoUmmAlQuraMap( 2036, 2,29, 1458, 1, 1 ), |
| new GregoUmmAlQuraMap( 2037, 2,17, 1459, 1, 1 ), |
| new GregoUmmAlQuraMap( 2038, 2, 6, 1460, 1, 1 ), |
| new GregoUmmAlQuraMap( 2039, 1,26, 1461, 1, 1 ), |
| new GregoUmmAlQuraMap( 2040, 1,15, 1462, 1, 1 ), |
| new GregoUmmAlQuraMap( 2041, 1, 4, 1463, 1, 1 ), |
| new GregoUmmAlQuraMap( 2041,12,25, 1464, 1, 1 ), |
| new GregoUmmAlQuraMap( 2042,12,14, 1465, 1, 1 ), |
| new GregoUmmAlQuraMap( 2043,12, 3, 1466, 1, 1 ), |
| new GregoUmmAlQuraMap( 2044,11,21, 1467, 1, 1 ), |
| new GregoUmmAlQuraMap( 2045,11,11, 1468, 1, 1 ), |
| new GregoUmmAlQuraMap( 2046,10,31, 1469, 1, 1 ), |
| new GregoUmmAlQuraMap( 2047,10,21, 1470, 1, 1 ), |
| new GregoUmmAlQuraMap( 2048,10, 9, 1471, 1, 1 ), |
| new GregoUmmAlQuraMap( 2049, 9,29, 1472, 1, 1 ), |
| new GregoUmmAlQuraMap( 2050, 9,18, 1473, 1, 1 ), |
| new GregoUmmAlQuraMap( 2051, 9, 7, 1474, 1, 1 ), |
| new GregoUmmAlQuraMap( 2052, 8,26, 1475, 1, 1 ), |
| new GregoUmmAlQuraMap( 2053, 8,15, 1476, 1, 1 ), |
| new GregoUmmAlQuraMap( 2054, 8, 5, 1477, 1, 1 ), |
| new GregoUmmAlQuraMap( 2055, 7,26, 1478, 1, 1 ), |
| new GregoUmmAlQuraMap( 2056, 7,14, 1479, 1, 1 ), |
| new GregoUmmAlQuraMap( 2057, 7, 3, 1480, 1, 1 ), |
| new GregoUmmAlQuraMap( 2058, 6,22, 1481, 1, 1 ), |
| new GregoUmmAlQuraMap( 2059, 6,11, 1482, 1, 1 ), |
| new GregoUmmAlQuraMap( 2061, 5,21, 1484, 1, 1 ), |
| new GregoUmmAlQuraMap( 2063, 4,30, 1486, 1, 1 ), |
| new GregoUmmAlQuraMap( 2065, 4, 7, 1488, 1, 1 ), |
| new GregoUmmAlQuraMap( 2067, 3,17, 1490, 1, 1 ), |
| new GregoUmmAlQuraMap( 2069, 2,23, 1492, 1, 1 ), |
| new GregoUmmAlQuraMap( 2071, 2, 2, 1494, 1, 1 ), |
| new GregoUmmAlQuraMap( 2073, 1,10, 1496, 1, 1 ), |
| new GregoUmmAlQuraMap( 2074,12,20, 1498, 1, 1 ), |
| new GregoUmmAlQuraMap( 2076,11,28, 1500, 1, 1 ), |
| }; |
| |
| |
| int firstYear = 1318; |
| //* use either 1 or 2 leading slashes to toggle |
| int lastYear = 1368; // just enough to be pretty sure |
| /*/ |
| int lastYear = 1480; // the whole shootin' match |
| //*/ |
| |
| ULocale umalquraLoc = new ULocale("ar_SA@calendar=islamic-umalqura"); |
| ULocale gregoLoc = new ULocale("ar_SA@calendar=gregorian"); |
| TimeZone tzSA = TimeZone.getTimeZone("Asia/Riyadh"); |
| IslamicCalendar tstCal = new IslamicCalendar(tzSA, umalquraLoc); |
| GregorianCalendar gregCal = new GregorianCalendar(tzSA, gregoLoc); |
| tstCal.clear(); |
| tstCal.setLenient(false); |
| |
| int day=0, month=0, year=0, initDay = 27, initMonth = IslamicCalendar.RAJAB, initYear = 1434; |
| |
| try { |
| for( int startYear = firstYear; startYear <= lastYear; startYear++) { |
| setAndTestWholeYear(tstCal, startYear); |
| } |
| } catch(Throwable t) { |
| errln("unexpected exception thrown - message=" +t.getLocalizedMessage()); |
| } |
| |
| try { |
| initMonth = IslamicCalendar.RABI_2; |
| initDay = 5; |
| int loopCnt = 25; |
| tstCal.clear(); |
| setAndTestCalendar( tstCal, initMonth, initDay, initYear); |
| for(int x=1; x<=loopCnt; x++) { |
| day = tstCal.get(Calendar.DAY_OF_MONTH); |
| month = tstCal.get(Calendar.MONTH); |
| year = tstCal.get(Calendar.YEAR); |
| tstCal.roll(Calendar.DAY_OF_MONTH, true); |
| } |
| if(day != (initDay + loopCnt - 1) || month != IslamicCalendar.RABI_2 || year != 1434) |
| errln("invalid values for RABI_2 date after roll of " + loopCnt); |
| } catch(IllegalArgumentException iae) { |
| errln("unexpected exception received!!!"); |
| } |
| |
| try { |
| tstCal.clear(); |
| initMonth = 2; |
| initDay = 30; |
| setAndTestCalendar( tstCal, initMonth, initDay, initYear); |
| errln("expected exception NOT thrown"); |
| } catch(IllegalArgumentException iae) { |
| // expected this |
| } |
| |
| try { |
| tstCal.clear(); |
| initMonth = 3; |
| initDay = 30; |
| setAndTestCalendar( tstCal, initMonth, initDay, initYear); |
| } catch(IllegalArgumentException iae) { |
| errln("unexpected exception received!!!"); |
| } |
| |
| try { |
| SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd"); |
| Date date = formatter.parse("1975-05-06"); |
| IslamicCalendar is_cal = new IslamicCalendar(); |
| is_cal.setCalculationType(CalculationType.ISLAMIC_UMALQURA); |
| is_cal.setTime(date); |
| SimpleDateFormat formatterIslamic = (SimpleDateFormat) is_cal.getDateTimeFormat(0,0,umalquraLoc); |
| formatterIslamic.applyPattern("yyyy-MMMM-dd"); |
| String str = formatterIslamic.format(is_cal.getTime()); |
| |
| // 1395 - Rabi - 24 |
| int is_day = is_cal.get(Calendar.DAY_OF_MONTH); |
| int is_month = is_cal.get(Calendar.MONTH); |
| int is_year = is_cal.get(Calendar.YEAR); |
| if(is_day != 24 || is_month != IslamicCalendar.RABI_2 || is_year != 1395) |
| errln("unexpected conversion date: "+is_day+" "+is_month+" "+is_year); |
| |
| String expectedFormatResult = "\u0661\u0663\u0669\u0665-\u0631\u0628\u064A\u0639 \u0627\u0644\u0622\u062E\u0631-\u0662\u0664"; |
| if(!str.equals(expectedFormatResult)) |
| errln("unexpected formatted result: "+str); |
| |
| }catch(Exception e){ |
| errln(e.getLocalizedMessage()); |
| } |
| |
| // check against data |
| gregCal.clear(); |
| tstCal.clear(); |
| for (GregoUmmAlQuraMap guMap: guMappings) { |
| gregCal.set(guMap.gYear, guMap.gMon - 1, guMap.gDay, 12, 0); |
| long mapDate = gregCal.getTimeInMillis(); |
| tstCal.setTimeInMillis(mapDate); |
| int uYear = tstCal.get(Calendar.YEAR); |
| int uMon = tstCal.get(Calendar.MONTH) + 1; |
| int uDay = tstCal.get(Calendar.DATE); |
| if ( uYear != guMap.uYear || uMon != guMap.uMon || uDay != guMap.uDay ) { |
| errln("For gregorian " + guMap.gYear+"-"+guMap.gMon+"-"+guMap.gDay+ |
| ", expect umalqura " + guMap.uYear+"-"+guMap.uMon+"-"+guMap.uDay+ |
| ", get " + uYear+"-"+ uMon+"-"+ uDay); |
| } |
| } |
| } |
| |
| @Test |
| public void TestSerialization8449() { |
| try { |
| ByteArrayOutputStream icuStream = new ByteArrayOutputStream(); |
| |
| IslamicCalendar tstCalendar = new IslamicCalendar(); |
| tstCalendar.setCivil(false); |
| |
| long expectMillis = 1187912520931L; // with seconds (not ms) cleared. |
| tstCalendar.setTimeInMillis(expectMillis); |
| |
| logln("instantiated: "+tstCalendar); |
| logln("getMillis: "+tstCalendar.getTimeInMillis()); |
| tstCalendar.set(IslamicCalendar.SECOND, 0); |
| logln("setSecond=0: "+tstCalendar); |
| { |
| long gotMillis = tstCalendar.getTimeInMillis(); |
| if(gotMillis != expectMillis) { |
| errln("expect millis "+expectMillis+" but got "+gotMillis); |
| } else { |
| logln("getMillis: "+gotMillis); |
| } |
| } |
| ObjectOutputStream icuOut = new ObjectOutputStream(icuStream); |
| icuOut.writeObject(tstCalendar); |
| icuOut.flush(); |
| icuOut.close(); |
| |
| ObjectInputStream icuIn = new ObjectInputStream(new ByteArrayInputStream(icuStream.toByteArray())); |
| tstCalendar = null; |
| tstCalendar = (IslamicCalendar)icuIn.readObject(); |
| |
| logln("serialized back in: "+tstCalendar); |
| { |
| long gotMillis = tstCalendar.getTimeInMillis(); |
| if(gotMillis != expectMillis) { |
| errln("expect millis "+expectMillis+" but got "+gotMillis); |
| } else { |
| logln("getMillis: "+gotMillis); |
| } |
| } |
| |
| tstCalendar.set(IslamicCalendar.SECOND, 0); |
| |
| logln("setSecond=0: "+tstCalendar); |
| { |
| long gotMillis = tstCalendar.getTimeInMillis(); |
| if(gotMillis != expectMillis) { |
| errln("expect millis "+expectMillis+" after stream and setSecond but got "+gotMillis); |
| } else { |
| logln("getMillis after stream and setSecond: "+gotMillis); |
| } |
| } |
| } catch(IOException e) { |
| errln(e.toString()); |
| e.printStackTrace(); |
| } catch(ClassNotFoundException cnf) { |
| errln(cnf.toString()); |
| cnf.printStackTrace(); |
| } |
| } |
| |
| @Test |
| public void TestIslamicTabularDates() { |
| SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd"); |
| Date date = null; |
| try { |
| date = formatter.parse("1975-05-06"); |
| }catch(Exception e){ |
| errln("unable to parse test date string - errMsg:" +e.getLocalizedMessage()); |
| } |
| |
| IslamicCalendar is_cal = new IslamicCalendar(); |
| is_cal.setCalculationType(CalculationType.ISLAMIC_CIVIL); |
| is_cal.setTime(date); |
| IslamicCalendar is_cal2 = new IslamicCalendar(); |
| is_cal2.setCalculationType(CalculationType.ISLAMIC_TBLA); |
| is_cal2.setTime(date); |
| |
| int is_month = is_cal.get(Calendar.MONTH); |
| int is_month2 = is_cal2.get(Calendar.MONTH); |
| int is_year = is_cal.get(Calendar.YEAR); |
| int is_year2 = is_cal2.get(Calendar.YEAR); |
| if( (is_month != is_month2) || (is_year != is_year2)) |
| errln("unexpected difference between islamic and tbla month "+is_month+" : "+is_month2+" and/or year "+is_year+" : "+is_year2); |
| |
| int is_day = is_cal.get(Calendar.DAY_OF_MONTH); |
| int is_day2 = is_cal2.get(Calendar.DAY_OF_MONTH); |
| if(is_day2 - is_day != 1) |
| errln("unexpected difference between civil and tbla: "+is_day2+" : "+is_day); |
| |
| } |
| |
| @Test |
| public void TestCreationByLocale() { |
| ULocale islamicLoc = new ULocale("ar_SA@calendar=islamic-umalqura"); |
| IslamicCalendar is_cal = new IslamicCalendar(islamicLoc); |
| String thisCalcType = is_cal.getType(); |
| if(!"islamic-umalqura".equalsIgnoreCase(thisCalcType)) { |
| errln("non umalqura calc type generated - " + thisCalcType); |
| } |
| |
| islamicLoc = new ULocale("ar_SA@calendar=islamic-civil"); |
| is_cal = new IslamicCalendar(islamicLoc); |
| thisCalcType = is_cal.getType(); |
| if(!"islamic-civil".equalsIgnoreCase(thisCalcType)) { |
| errln("non civil calc type generated - " + thisCalcType); |
| } |
| |
| islamicLoc = new ULocale("ar_SA@calendar=ISLAMIC-UMALQURA"); |
| is_cal = new IslamicCalendar(islamicLoc); |
| thisCalcType = is_cal.getType(); |
| if (!"islamic-umalqura".equalsIgnoreCase(thisCalcType)) { |
| errln("non umalqura calc type generated - " + thisCalcType); |
| } |
| |
| islamicLoc = new ULocale("ar_SA@calendar=ISLAMIC-CIVIL"); |
| is_cal = new IslamicCalendar(islamicLoc); |
| thisCalcType = is_cal.getType(); |
| if (!"islamic-civil".equalsIgnoreCase(thisCalcType)) { |
| errln("non civil calc type generated - " + thisCalcType); |
| } |
| |
| islamicLoc = new ULocale("ar_SA@calendar=islamic-tbla"); |
| is_cal = new IslamicCalendar(islamicLoc); |
| thisCalcType = is_cal.getType(); |
| if(!"islamic-tbla".equalsIgnoreCase(thisCalcType)) { |
| errln("non tbla calc type generated - " + thisCalcType); |
| } |
| |
| islamicLoc = new ULocale("ar_SA@calendar=islamic-xyzzy"); |
| is_cal = new IslamicCalendar(islamicLoc); |
| thisCalcType = is_cal.getType(); |
| if(!"islamic".equalsIgnoreCase(thisCalcType)) { |
| errln("incorrect default calc type generated - " + thisCalcType); |
| } |
| |
| } |
| |
| } |