OLD | NEW |
| (Empty) |
1 /******************************************************************** | |
2 * COPYRIGHT: | |
3 * Copyright (c) 2003-2013, International Business Machines Corporation | |
4 * and others. All Rights Reserved. | |
5 ******************************************************************** | |
6 * Calendar Case Test is a type of CalendarTest which compares the | |
7 * behavior of a calendar to a certain set of 'test cases', involving | |
8 * conversion between julian-day to fields and vice versa. | |
9 ********************************************************************/ | |
10 | |
11 #include "calcasts.h" | |
12 | |
13 #if !UCONFIG_NO_FORMATTING | |
14 // ======= 'Main' =========================== | |
15 | |
16 #include "hebrwcal.h" // for Eras | |
17 #include "indiancal.h" | |
18 #include "coptccal.h" | |
19 #include "ethpccal.h" | |
20 #include "unicode/datefmt.h" | |
21 | |
22 #define CASE(id,test) case id: name = #test; if (exec) { logln(#test "---"); log
ln((UnicodeString)""); test(); } break | |
23 | |
24 | |
25 void CalendarCaseTest::runIndexedTest( int32_t index, UBool exec, const char* &n
ame, char* /*par*/ ) | |
26 { | |
27 if (exec) logln("TestSuite CalendarCaseTest"); | |
28 switch (index) { | |
29 CASE(0,IslamicCivil); | |
30 CASE(1,Hebrew); | |
31 CASE(2,Indian); | |
32 CASE(3,Coptic); | |
33 CASE(4,Ethiopic); | |
34 default: name = ""; break; | |
35 } | |
36 } | |
37 | |
38 #undef CASE | |
39 | |
40 // ======= Utility functions ================= | |
41 | |
42 void CalendarCaseTest::doTestCases(const TestCase *cases, Calendar *cal) { | |
43 static const int32_t ONE_SECOND = 1000; | |
44 static const int32_t ONE_MINUTE = 60*ONE_SECOND; | |
45 static const int32_t ONE_HOUR = 60*ONE_MINUTE; | |
46 static const double ONE_DAY = 24*ONE_HOUR; | |
47 static const double JULIAN_EPOCH = -210866760000000.; // 1/1/4713 BC 12:00 | |
48 int32_t i; | |
49 UErrorCode status = U_ZERO_ERROR; | |
50 cal->adoptTimeZone(TimeZone::getGMT()->clone()); | |
51 for(i=0;cases[i].era>=0;i++) { | |
52 UDate t = (JULIAN_EPOCH+(ONE_DAY*cases[i].julian)); | |
53 | |
54 logln("Test case %d: julianday%f -> date %f\n", i, cases[i].julian, t); | |
55 | |
56 // Millis -> fields | |
57 cal->setTime(t, status); | |
58 | |
59 logln(calToStr(*cal)); | |
60 | |
61 checkField(cal, UCAL_ERA, cases[i].era, status); | |
62 checkField(cal, UCAL_YEAR, cases[i].year,status); | |
63 checkField(cal, UCAL_MONTH, cases[i].month - 1,status); | |
64 checkField(cal, UCAL_DATE, cases[i].day,status); | |
65 checkField(cal, UCAL_DAY_OF_WEEK, cases[i].dayOfWeek,status); | |
66 checkField(cal, UCAL_HOUR, cases[i].hour,status); | |
67 checkField(cal, UCAL_MINUTE, cases[i].min,status); | |
68 checkField(cal, UCAL_SECOND, cases[i].sec,status); | |
69 | |
70 // Fields -> millis | |
71 cal->clear(); | |
72 | |
73 cal->set(UCAL_ERA, cases[i].era); | |
74 cal->set(UCAL_YEAR, cases[i].year); | |
75 cal->set(UCAL_MONTH, cases[i].month - 1); | |
76 cal->set(UCAL_DATE, cases[i].day); | |
77 cal->set(UCAL_DAY_OF_WEEK, cases[i].dayOfWeek); | |
78 cal->set(UCAL_HOUR, cases[i].hour); | |
79 cal->set(UCAL_MINUTE, cases[i].min); | |
80 cal->set(UCAL_SECOND, cases[i].sec); | |
81 | |
82 UDate t2 = cal->getTime(status); | |
83 | |
84 if(t != t2) { | |
85 errln("Field->millis: Expected %.0f but got %.0f\n", t, t2); | |
86 logln(calToStr(*cal)); | |
87 } | |
88 } | |
89 } | |
90 | |
91 UBool CalendarCaseTest::checkField(Calendar *cal, UCalendarDateFields field, int
32_t value, UErrorCode &status) | |
92 { | |
93 if(U_FAILURE(status)) return FALSE; | |
94 int32_t res = cal->get(field, status); | |
95 if(U_FAILURE(status)) { | |
96 errln((UnicodeString)"Checking field " + fieldName(field) + " and got " + u_
errorName(status)); | |
97 return FALSE; | |
98 } | |
99 if(res != value) { | |
100 errln((UnicodeString)"FAIL: Checking field " + fieldName(field) + " expected
" + value + " and got " + res + UnicodeString("\n")); | |
101 return FALSE; | |
102 } else { | |
103 logln((UnicodeString)"Checking field " + fieldName(field) + " == " + value +
UnicodeString("\n")); | |
104 } | |
105 return TRUE; | |
106 } | |
107 | |
108 // =========== Test Cases ===================== | |
109 enum { SUN=UCAL_SUNDAY, | |
110 MON=UCAL_MONDAY, | |
111 TUE=UCAL_TUESDAY, | |
112 WED=UCAL_WEDNESDAY, | |
113 THU=UCAL_THURSDAY, | |
114 FRI=UCAL_FRIDAY, | |
115 SAT=UCAL_SATURDAY}; | |
116 | |
117 void CalendarCaseTest::IslamicCivil() | |
118 { | |
119 static const TestCase tests[] = { | |
120 // | |
121 // Most of these test cases were taken from the back of | |
122 // "Calendrical Calculations", with some extras added to help | |
123 // debug a few of the problems that cropped up in development. | |
124 // | |
125 // The months in this table are 1-based rather than 0-based, | |
126 // because it's easier to edit that way. | |
127 // Islamic | |
128 // Julian Day Era Year Month Day WkDay Hour Min Sec | |
129 { 1507231.5, 0, -1245, 12, 9, SUN, 0, 0, 0}, | |
130 { 1660037.5, 0, -813, 2, 23, WED, 0, 0, 0}, | |
131 { 1746893.5, 0, -568, 4, 1, WED, 0, 0, 0}, | |
132 { 1770641.5, 0, -501, 4, 6, SUN, 0, 0, 0}, | |
133 { 1892731.5, 0, -157, 10, 17, WED, 0, 0, 0}, | |
134 { 1931579.5, 0, -47, 6, 3, MON, 0, 0, 0}, | |
135 { 1974851.5, 0, 75, 7, 13, SAT, 0, 0, 0}, | |
136 { 2091164.5, 0, 403, 10, 5, SUN, 0, 0, 0}, | |
137 { 2121509.5, 0, 489, 5, 22, SUN, 0, 0, 0}, | |
138 { 2155779.5, 0, 586, 2, 7, FRI, 0, 0, 0}, | |
139 { 2174029.5, 0, 637, 8, 7, SAT, 0, 0, 0}, | |
140 { 2191584.5, 0, 687, 2, 20, FRI, 0, 0, 0}, | |
141 { 2195261.5, 0, 697, 7, 7, SUN, 0, 0, 0}, | |
142 { 2229274.5, 0, 793, 7, 1, SUN, 0, 0, 0}, | |
143 { 2245580.5, 0, 839, 7, 6, WED, 0, 0, 0}, | |
144 { 2266100.5, 0, 897, 6, 1, SAT, 0, 0, 0}, | |
145 { 2288542.5, 0, 960, 9, 30, SAT, 0, 0, 0}, | |
146 { 2290901.5, 0, 967, 5, 27, SAT, 0, 0, 0}, | |
147 { 2323140.5, 0, 1058, 5, 18, WED, 0, 0, 0}, | |
148 { 2334848.5, 0, 1091, 6, 2, SUN, 0, 0, 0}, | |
149 { 2348020.5, 0, 1128, 8, 4, FRI, 0, 0, 0}, | |
150 { 2366978.5, 0, 1182, 2, 3, SUN, 0, 0, 0}, | |
151 { 2385648.5, 0, 1234, 10, 10, MON, 0, 0, 0}, | |
152 { 2392825.5, 0, 1255, 1, 11, WED, 0, 0, 0}, | |
153 { 2416223.5, 0, 1321, 1, 21, SUN, 0, 0, 0}, | |
154 { 2425848.5, 0, 1348, 3, 19, SUN, 0, 0, 0}, | |
155 { 2430266.5, 0, 1360, 9, 8, MON, 0, 0, 0}, | |
156 { 2430833.5, 0, 1362, 4, 13, MON, 0, 0, 0}, | |
157 { 2431004.5, 0, 1362, 10, 7, THU, 0, 0, 0}, | |
158 { 2448698.5, 0, 1412, 9, 13, TUE, 0, 0, 0}, | |
159 { 2450138.5, 0, 1416, 10, 5, SUN, 0, 0, 0}, | |
160 { 2465737.5, 0, 1460, 10, 12, WED, 0, 0, 0}, | |
161 { 2486076.5, 0, 1518, 3, 5, SUN, 0, 0, 0}, | |
162 { -1,-1,-1,-1,-1,-1,-1,-1,-1 } | |
163 }; | |
164 | |
165 UErrorCode status = U_ZERO_ERROR; | |
166 Calendar *c = Calendar::createInstance("ar@calendar=islamic-civil", status); | |
167 if (failure(status, "Calendar::createInstance", TRUE)) return; | |
168 c->setLenient(TRUE); | |
169 doTestCases(tests, c); | |
170 | |
171 static const UChar expectedUChars[] = { | |
172 0x0627, 0x0644, 0x062e, 0x0645, 0x064a, 0x0633, 0x060c, 0x0020, 0x0662,
0x0662, 0x0020, | |
173 0x0634, 0x0648, 0x0627, 0x0644, 0x060c, 0x0020, 0x0661, 0x0663, 0x0668,
0x0669, 0x0020, 0x0647, 0x0640, 0 | |
174 }; | |
175 UnicodeString result; | |
176 DateFormat *fmt = DateFormat::createDateInstance(DateFormat::kFull, Locale("
ar_JO@calendar=islamic-civil")); | |
177 if (fmt == NULL) { | |
178 dataerrln("Error calling DateFormat::createDateInstance"); | |
179 delete c; | |
180 return; | |
181 } | |
182 | |
183 fmt->setTimeZone(*TimeZone::getGMT()); | |
184 fmt->format((UDate)2486076.5, result); | |
185 if (result != expectedUChars) { | |
186 errln((UnicodeString)"FAIL: DateFormatting failed. Got " + result + " an
d expected " + UnicodeString(expectedUChars) + UnicodeString("\n")); | |
187 errln("Maybe the resource aliasing isn't working"); | |
188 } | |
189 delete fmt; | |
190 delete c; | |
191 } | |
192 | |
193 void CalendarCaseTest::Hebrew() { | |
194 static const int32_t TISHRI = HebrewCalendar::TISHRI; | |
195 //static const int32_t HESHVAN = HebrewCalendar::HESHVAN; | |
196 //static const int32_t KISLEV = HebrewCalendar::KISLEV; | |
197 //static const int32_t TEVET = HebrewCalendar::TEVET; | |
198 //static const int32_t SHEVAT = HebrewCalendar::SHEVAT; | |
199 //static const int32_t ADAR_1 = HebrewCalendar::ADAR_1; | |
200 //static const int32_t ADAR = HebrewCalendar::ADAR; | |
201 //static const int32_t NISAN = HebrewCalendar::NISAN; | |
202 //static const int32_t IYAR = HebrewCalendar::IYAR; | |
203 //static const int32_t SIVAN = HebrewCalendar::SIVAN; | |
204 //static const int32_t TAMUZ = HebrewCalendar::TAMUZ; | |
205 static const int32_t AV = HebrewCalendar::AV; | |
206 static const int32_t ELUL = HebrewCalendar::ELUL; | |
207 | |
208 static const TestCase tests[] = { | |
209 // | |
210 // Most of these test cases were taken from the back of | |
211 // "Calendrical Calculations", with some extras added to help | |
212 // debug a few of the problems that cropped up in development. | |
213 // | |
214 // The months in this table are 1-based rather than 0-based, | |
215 // because it's easier to edit that way. | |
216 // | |
217 // Julian Day Era Year Month Day WkDay Hour Min Sec | |
218 {1507231.5, 0, 3174, 12, 10, SUN, 0, 0, 0}, | |
219 {1660037.5, 0, 3593, 3, 25, WED, 0, 0, 0}, | |
220 {1746893.5, 0, 3831, 1, 3, WED, 0, 0, 0}, | |
221 {1770641.5, 0, 3896, 1, 9, SUN, 0, 0, 0}, | |
222 {1892731.5, 0, 4230, 4, 18, WED, 0, 0, 0}, | |
223 {1931579.5, 0, 4336, 10, 4, MON, 0, 0, 0}, | |
224 {1974851.5, 0, 4455, 2, 13, SAT, 0, 0, 0}, | |
225 {2091164.5, 0, 4773, 9, 6, SUN, 0, 0, 0}, | |
226 {2121509.5, 0, 4856, 9, 23, SUN, 0, 0, 0}, | |
227 {2155779.5, 0, 4950, 8, 7, FRI, 0, 0, 0}, | |
228 {2174029.5, 0, 5000, 7, 8, SAT, 0, 0, 0}, | |
229 {2191584.5, 0, 5048, 8, 21, FRI, 0, 0, 0}, | |
230 {2195261.5, 0, 5058, 9, 7, SUN, 0, 0, 0}, | |
231 {2229274.5, 0, 5151, 11, 1, SUN, 0, 0, 0}, | |
232 {2245580.5, 0, 5196, 5, 7, WED, 0, 0, 0}, | |
233 {2266100.5, 0, 5252, 8, 3, SAT, 0, 0, 0}, | |
234 {2288542.5, 0, 5314, 1, 1, SAT, 0, 0, 0}, | |
235 {2290901.5, 0, 5320, 6, 27, SAT, 0, 0, 0}, | |
236 {2323140.5, 0, 5408, 10, 20, WED, 0, 0, 0}, | |
237 {2334551.5, 0, 5440, 1, 1, THU, 0, 0, 0}, | |
238 {2334581.5, 0, 5440, 2, 1, SAT, 0, 0, 0}, | |
239 {2334610.5, 0, 5440, 3, 1, SUN, 0, 0, 0}, | |
240 {2334639.5, 0, 5440, 4, 1, MON, 0, 0, 0}, | |
241 {2334668.5, 0, 5440, 5, 1, TUE, 0, 0, 0}, | |
242 {2334698.5, 0, 5440, 6, 1, THU, 0, 0, 0}, | |
243 {2334728.5, 0, 5440, 7, 1, SAT, 0, 0, 0}, | |
244 {2334757.5, 0, 5440, 8, 1, SUN, 0, 0, 0}, | |
245 {2334787.5, 0, 5440, 9, 1, TUE, 0, 0, 0}, | |
246 {2334816.5, 0, 5440, 10, 1, WED, 0, 0, 0}, | |
247 {2334846.5, 0, 5440, 11, 1, FRI, 0, 0, 0}, | |
248 {2334848.5, 0, 5440, 11, 3, SUN, 0, 0, 0}, | |
249 {2334934.5, 0, 5441, 1, 1, TUE, 0, 0, 0}, | |
250 {2348020.5, 0, 5476, 12, 5, FRI, 0, 0, 0}, | |
251 {2366978.5, 0, 5528, 11, 4, SUN, 0, 0, 0}, | |
252 {2385648.5, 0, 5579, 12, 11, MON, 0, 0, 0}, | |
253 {2392825.5, 0, 5599, 8, 12, WED, 0, 0, 0}, | |
254 {2416223.5, 0, 5663, 8, 22, SUN, 0, 0, 0}, | |
255 {2425848.5, 0, 5689, 12, 19, SUN, 0, 0, 0}, | |
256 {2430266.5, 0, 5702, 1, 8, MON, 0, 0, 0}, | |
257 {2430833.5, 0, 5703, 8, 14, MON, 0, 0, 0}, | |
258 {2431004.5, 0, 5704, 1, 8, THU, 0, 0, 0}, | |
259 {2448698.5, 0, 5752, 7, 12, TUE, 0, 0, 0}, | |
260 {2450138.5, 0, 5756, 7, 5, SUN, 0, 0, 0}, | |
261 {2465737.5, 0, 5799, 2, 12, WED, 0, 0, 0}, | |
262 {2486076.5, 0, 5854, 12, 5, SUN, 0, 0, 0}, | |
263 | |
264 // Test cases taken from a table of 14 "year types" in the Help file | |
265 // of the application "Hebrew Calendar" | |
266 {2456187.5, 0, 5773, 1, 1, MON, 0, 0, 0}, | |
267 {2459111.5, 0, 5781, 1, 1, SAT, 0, 0, 0}, | |
268 {2453647.5, 0, 5766, 1, 1, TUE, 0, 0, 0}, | |
269 {2462035.5, 0, 5789, 1, 1, THU, 0, 0, 0}, | |
270 {2458756.5, 0, 5780, 1, 1, MON, 0, 0, 0}, | |
271 {2460586.5, 0, 5785, 1, 1, THU, 0, 0, 0}, | |
272 {2463864.5, 0, 5794, 1, 1, SAT, 0, 0, 0}, | |
273 {2463481.5, 0, 5793, 1, 1, MON, 0, 0, 0}, | |
274 {2470421.5, 0, 5812, 1, 1, THU, 0, 0, 0}, | |
275 {2460203.5, 0, 5784, 1, 1, SAT, 0, 0, 0}, | |
276 {2459464.5, 0, 5782, 1, 1, TUE, 0, 0, 0}, | |
277 {2467142.5, 0, 5803, 1, 1, MON, 0, 0, 0}, | |
278 {2455448.5, 0, 5771, 1, 1, THU, 0, 0, 0}, | |
279 // Test cases for JB#2327 | |
280 // http://www.fourmilab.com/documents/calendar/ | |
281 // http://www.calendarhome.com/converter/ | |
282 // 2452465.5, 2002, JULY, 10, 5762, AV, 1, | |
283 // 2452494.5, 2002, AUGUST, 8, 5762, AV, 30, | |
284 // 2452495.5, 2002, AUGUST, 9, 5762, ELUL, 1, | |
285 // 2452523.5, 2002, SEPTEMBER, 6, 5762, ELUL, 29, | |
286 // 2452524.5, 2002, SEPTEMBER, 7, 5763, TISHRI, 1, | |
287 // Julian Day Era Year Month Day WkDay Hour Min Sec | |
288 {2452465.5, 0, 5762, AV+1, 1, WED, 0, 0, 0}, | |
289 {2452494.5, 0, 5762, AV+1, 30, THU, 0, 0, 0}, | |
290 {2452495.5, 0, 5762, ELUL+1, 1, FRI, 0, 0, 0}, | |
291 {2452523.5, 0, 5762, ELUL+1, 29, FRI, 0, 0, 0}, | |
292 {2452524.5, 0, 5763, TISHRI+1, 1, SAT, 0, 0, 0}, | |
293 { -1,-1,-1,-1,-1,-1,-1,-1,-1 } | |
294 }; | |
295 | |
296 UErrorCode status = U_ZERO_ERROR; | |
297 Calendar *c = Calendar::createInstance("he_HE@calendar=hebrew", status); | |
298 if (failure(status, "Calendar::createInstance", TRUE)) return; | |
299 c->setLenient(TRUE); | |
300 doTestCases(tests, c); | |
301 | |
302 | |
303 // Additional test cases for bugs found during development | |
304 // G.YY/MM/DD Era Year Month Day WkDay Hour Min Sec | |
305 //{1013, 9, 8, 0, 4774, 1, 1, TUE, 0, 0, 0}, | |
306 //{1239, 9, 1, 0, 5000, 1, 1, THU, 0, 0, 0}, | |
307 //{1240, 9,18, 0, 5001, 1, 1, TUE, 0, 0, 0}, | |
308 | |
309 | |
310 delete c; | |
311 } | |
312 | |
313 void CalendarCaseTest::Indian() { | |
314 // Months in indian calendar are 0-based. Here taking 1-based names: | |
315 static const int32_t CHAITRA = IndianCalendar::CHAITRA + 1; | |
316 static const int32_t VAISAKHA = IndianCalendar::VAISAKHA + 1; | |
317 static const int32_t JYAISTHA = IndianCalendar::JYAISTHA + 1; | |
318 static const int32_t ASADHA = IndianCalendar::ASADHA + 1; | |
319 static const int32_t SRAVANA = IndianCalendar::SRAVANA + 1 ; | |
320 static const int32_t BHADRA = IndianCalendar::BHADRA + 1 ; | |
321 static const int32_t ASVINA = IndianCalendar::ASVINA + 1 ; | |
322 static const int32_t KARTIKA = IndianCalendar::KARTIKA + 1 ; | |
323 static const int32_t AGRAHAYANA = IndianCalendar::AGRAHAYANA + 1 ; | |
324 static const int32_t PAUSA = IndianCalendar::PAUSA + 1 ; | |
325 static const int32_t MAGHA = IndianCalendar::MAGHA + 1 ; | |
326 static const int32_t PHALGUNA = IndianCalendar::PHALGUNA + 1 ; | |
327 | |
328 | |
329 static const TestCase tests[] = { | |
330 // Test dates generated from: | |
331 // http://www.fourmilab.ch/documents/calendar/ | |
332 | |
333 // A huge list of test cases to make sure that computeTime and computeFields | |
334 // work properly for a wide range of data in the Indian civil calendar. | |
335 // | |
336 // Julian Day Era Year Month Day WkDay Hour Min Sec | |
337 {1770641.5, 0, 57, ASVINA, 10, SUN, 0, 0, 0}, | |
338 {1892731.5, 0, 391, PAUSA, 18, WED, 0, 0, 0}, | |
339 {1931579.5, 0, 498, VAISAKHA, 30, MON, 0, 0, 0}, | |
340 {1974851.5, 0, 616, KARTIKA, 19, SAT, 0, 0, 0}, | |
341 {2091164.5, 0, 935, VAISAKHA, 5, SUN, 0, 0, 0}, | |
342 {2121509.5, 0, 1018, JYAISTHA, 3, SUN, 0, 0, 0}, | |
343 {2155779.5, 0, 1112, CHAITRA, 2, FRI, 0, 0, 0}, | |
344 {2174029.5, 0, 1161, PHALGUNA, 20, SAT, 0, 0, 0}, | |
345 {2191584.5, 0, 1210, CHAITRA, 13, FRI, 0, 0, 0}, | |
346 {2195261.5, 0, 1220, VAISAKHA, 7, SUN, 0, 0, 0}, | |
347 {2229274.5, 0, 1313, JYAISTHA, 22, SUN, 0, 0, 0}, | |
348 {2245580.5, 0, 1357, MAGHA, 14, WED, 0, 0, 0}, | |
349 {2266100.5, 0, 1414, CHAITRA, 20, SAT, 0, 0, 0}, | |
350 {2288542.5, 0, 1475, BHADRA, 28, SAT, 0, 0, 0}, | |
351 {2290901.5, 0, 1481, PHALGUNA, 15, SAT, 0, 0, 0}, | |
352 {2323140.5, 0, 1570, JYAISTHA, 20, WED, 0, 0, 0}, | |
353 {2334551.5, 0, 1601, BHADRA, 16, THU, 0, 0, 0}, | |
354 {2334581.5, 0, 1601, ASVINA, 15, SAT, 0, 0, 0}, | |
355 {2334610.5, 0, 1601, KARTIKA, 14, SUN, 0, 0, 0}, | |
356 {2334639.5, 0, 1601, AGRAHAYANA, 13, MON, 0, 0, 0}, | |
357 {2334668.5, 0, 1601, PAUSA, 12, TUE, 0, 0, 0}, | |
358 {2334698.5, 0, 1601, MAGHA, 12, THU, 0, 0, 0}, | |
359 {2334728.5, 0, 1601, PHALGUNA, 12, SAT, 0, 0, 0}, | |
360 {2334757.5, 0, 1602, CHAITRA, 11, SUN, 0, 0, 0}, | |
361 {2334787.5, 0, 1602, VAISAKHA, 10, TUE, 0, 0, 0}, | |
362 {2334816.5, 0, 1602, JYAISTHA, 8, WED, 0, 0, 0}, | |
363 {2334846.5, 0, 1602, ASADHA, 7, FRI, 0, 0, 0}, | |
364 {2334848.5, 0, 1602, ASADHA, 9, SUN, 0, 0, 0}, | |
365 {2348020.5, 0, 1638, SRAVANA, 2, FRI, 0, 0, 0}, | |
366 {2334934.5, 0, 1602, ASVINA, 2, TUE, 0, 0, 0}, | |
367 {2366978.5, 0, 1690, JYAISTHA, 29, SUN, 0, 0, 0}, | |
368 {2385648.5, 0, 1741, SRAVANA, 11, MON, 0, 0, 0}, | |
369 {2392825.5, 0, 1761, CHAITRA, 6, WED, 0, 0, 0}, | |
370 {2416223.5, 0, 1825, CHAITRA, 29, SUN, 0, 0, 0}, | |
371 {2425848.5, 0, 1851, BHADRA, 3, SUN, 0, 0, 0}, | |
372 {2430266.5, 0, 1863, ASVINA, 7, MON, 0, 0, 0}, | |
373 {2430833.5, 0, 1865, CHAITRA, 29, MON, 0, 0, 0}, | |
374 {2431004.5, 0, 1865, ASVINA, 15, THU, 0, 0, 0}, | |
375 {2448698.5, 0, 1913, PHALGUNA, 27, TUE, 0, 0, 0}, | |
376 {2450138.5, 0, 1917, PHALGUNA, 6, SUN, 0, 0, 0}, | |
377 {2465737.5, 0, 1960, KARTIKA, 19, WED, 0, 0, 0}, | |
378 {2486076.5, 0, 2016, ASADHA, 27, SUN, 0, 0, 0}, | |
379 { -1,-1,-1,-1,-1,-1,-1,-1,-1 } | |
380 }; | |
381 | |
382 UErrorCode status = U_ZERO_ERROR; | |
383 Calendar *c = Calendar::createInstance("hi_IN@calendar=indian", status); | |
384 if (failure(status, "Calendar::createInstance", TRUE)) return; | |
385 c->setLenient(TRUE); | |
386 doTestCases(tests, c); | |
387 | |
388 delete c; | |
389 } | |
390 | |
391 void CalendarCaseTest::Coptic() { | |
392 static const TestCase tests[] = { | |
393 // JD Era Year Month Day WkDay Hour Min Sec | |
394 {2401442.5, 1, 1579, 2, 20, WED, 0, 0, 0}, // Gregorian: 20/
10/1862 | |
395 {2402422.5, 1, 1581, 10, 29, WED, 0, 0, 0}, // Gregorian: 05/
07/1865 | |
396 {2402630.5, 1, 1582, 5, 22, MON, 0, 0, 0}, // Gregorian: 29/
01/1866 | |
397 {2402708.5, 1, 1582, 8, 10, TUE, 0, 0, 0}, // Gregorian: 17/
04/1866 | |
398 {2402971.5, 1, 1583, 4, 28, SAT, 0, 0, 0}, // Gregorian: 05/
01/1867 | |
399 {2403344.5, 1, 1584, 5, 5, MON, 0, 0, 0}, // Gregorian: 13/
01/1868 | |
400 {1721059.5, 0, 285, 5, 7, SAT, 0, 0, 0}, // Gregorian: 01/
01/0000 | |
401 {1721425.5, 0, 284, 5, 8, MON, 0, 0, 0}, // Gregorian: 01/
01/0001 | |
402 {1824663.5, 0, 2, 13, 6, WED, 0, 0, 0}, // Gregorian: 29/
08/0283 | |
403 {1824664.5, 0, 1, 1, 1, THU, 0, 0, 0}, // Gregorian: 30/
08/0283 | |
404 {1825029.5, 1, 1, 1, 1, FRI, 0, 0, 0}, // Gregorian: 29/
08/0284 | |
405 {1825394.5, 1, 2, 1, 1, SAT, 0, 0, 0}, // Gregorian: 29/
08/0285 | |
406 {1825759.5, 1, 3, 1, 1, SUN, 0, 0, 0}, // Gregorian: 29/
08/0286 | |
407 {1826125.5, 1, 4, 1, 1, TUE, 0, 0, 0}, // Gregorian: 30/
08/0287 | |
408 {1825028.5, 0, 1, 13, 5, THU, 0, 0, 0}, // Gregorian: 28/
08/0284 | |
409 {1825393.5, 1, 1, 13, 5, FRI, 0, 0, 0}, // Gregorian: 28/
08/0285 | |
410 {1825758.5, 1, 2, 13, 5, SAT, 0, 0, 0}, // Gregorian: 28/
08/0286 | |
411 {1826123.5, 1, 3, 13, 5, SUN, 0, 0, 0}, // Gregorian: 28/
08/0287 | |
412 {1826124.5, 1, 3, 13, 6, MON, 0, 0, 0}, // Gregorian: 29/
08/0287 | |
413 // above is first coptic leap year | |
414 {1826489.5, 1, 4, 13, 5, TUE, 0, 0, 0}, // Gregorian: 28/
08/0288 | |
415 {2299158.5, 1, 1299, 2, 6, WED, 0, 0, 0}, // Gregorian: 13/
10/1582 | |
416 {2299159.5, 1, 1299, 2, 7, THU, 0, 0, 0}, // Gregorian: 14/
10/1582 | |
417 {2299160.5, 1, 1299, 2, 8, FRI, 0, 0, 0}, // Gregorian: 15/
10/1582 | |
418 {2299161.5, 1, 1299, 2, 9, SAT, 0, 0, 0}, // Gregorian: 16/
10/1582 | |
419 | |
420 {2415020.5, 1, 1616, 4, 23, MON, 0, 0, 0}, // Gregorian: 01/
01/1900 | |
421 {2453371.5, 1, 1721, 4, 23, SAT, 0, 0, 0}, // Gregorian: 01/
01/2005 | |
422 {2555528.5, 1, 2000, 13, 5, FRI, 0, 0, 0}, // Gregorian: 12/
09/2284 | |
423 { -1, -1, -1, -1, -1, -1, -1, -1, -1} | |
424 }; | |
425 | |
426 UErrorCode status = U_ZERO_ERROR; | |
427 Calendar *c = Calendar::createInstance("cop_EG@calendar=coptic", status); | |
428 if (failure(status, "Calendar::createInstance", TRUE)) return; | |
429 | |
430 c->setLenient(TRUE); | |
431 doTestCases(tests, c); | |
432 | |
433 delete c; | |
434 } | |
435 | |
436 void CalendarCaseTest::Ethiopic() { | |
437 static TestCase tests[] = { | |
438 // JD Era Year Month Day WkDay Hour Min Sec | |
439 {2401442.5, 1, 1855, 2, 20, WED, 0, 0, 0}, // Gregorian: 29/
10/1862 | |
440 {2402422.5, 1, 1857, 10, 29, WED, 0, 0, 0}, // Gregorian: 05/
07/1865 | |
441 {2402630.5, 1, 1858, 5, 22, MON, 0, 0, 0}, // Gregorian: 29/
01/1866 | |
442 {2402708.5, 1, 1858, 8, 10, TUE, 0, 0, 0}, // Gregorian: 17/
04/1866 | |
443 {2402971.5, 1, 1859, 4, 28, SAT, 0, 0, 0}, // Gregorian: 05/
01/1867 | |
444 {2403344.5, 1, 1860, 5, 5, MON, 0, 0, 0}, // Gregorian: 13/
01/1868 | |
445 {1721059.5, 0, 5492, 5, 7, SAT, 0, 0, 0}, // Gregorian: 01/
01/0000 | |
446 {1721425.5, 0, 5493, 5, 8, MON, 0, 0, 0}, // Gregorian: 01/
01/0001 | |
447 {1723854.5, 0, 5499, 13, 6, MON, 0, 0, 0}, // Gregorian: 27/
08/0007 | |
448 | |
449 {1723855.5, 0, 5500, 1, 1, TUE, 0, 0, 0}, // Gregorian: 28/
08/0007 | |
450 {1724220.5, 1, 1, 1, 1, WED, 0, 0, 0}, // Gregorian: 27/
08/0008 | |
451 {1724585.5, 1, 2, 1, 1, THU, 0, 0, 0}, // Gregorian: 27/
08/0009 | |
452 {1724950.5, 1, 3, 1, 1, FRI, 0, 0, 0}, // Gregorian: 27/
08/0010 | |
453 | |
454 //{1724536.5, 1, 4, 1, 1, SUN, 0, 0, 0}, // Gregorian: 2
8/08/0011 | |
455 {1725316.5, 1, 4, 1, 1, SUN, 0, 0, 0}, // Gregorian: 28/
08/0011 - dlf | |
456 {1724219.5, 0, 5500, 13, 5, TUE, 0, 0, 0}, // Gregorian: 26/
08/0008 | |
457 {1724584.5, 1, 1, 13, 5, WED, 0, 0, 0}, // Gregorian: 26/
08/0009 | |
458 {1724949.5, 1, 2, 13, 5, THU, 0, 0, 0}, // Gregorian: 26/
08/0010 | |
459 {1725314.5, 1, 3, 13, 5, FRI, 0, 0, 0}, // Gregorian: 26/
08/0011 | |
460 {1725315.5, 1, 3, 13, 6, SAT, 0, 0, 0}, // Gregorian: 27/
08/0011 - first ethiopic leap year | |
461 //{1725560.5, 1, 4, 13, 5, SUN, 0, 0, 0}, // Gregorian: 2
6/08/0012 - dlf | |
462 {1725680.5, 1, 4, 13, 5, SUN, 0, 0, 0}, // Gregorian: 26/
08/0012 | |
463 {2299158.5, 1, 1575, 2, 6, WED, 0, 0, 0}, // Gregorian: 13/
10/1582 | |
464 {2299159.5, 1, 1575, 2, 7, THU, 0, 0, 0}, // Gregorian: 14/
10/1582 Julian 04/10/1582 | |
465 | |
466 {2299160.5, 1, 1575, 2, 8, FRI, 0, 0, 0}, // Gregorian: 15/
10/1582 | |
467 {2299161.5, 1, 1575, 2, 9, SAT, 0, 0, 0}, // Gregorian: 16/
10/1582 | |
468 | |
469 {2415020.5, 1, 1892, 4, 23, MON, 0, 0, 0}, // Gregorian: 01/
01/1900 | |
470 {2453371.5, 1, 1997, 4, 23, SAT, 0, 0, 0}, // Gregorian: 01/
01/2005 | |
471 {2454719.5, 1, 2000, 13, 5, WED, 0, 0, 0}, // Gregorian: 10/
09/2008 | |
472 { -1, -1, -1, -1, -1, -1, -1, -1, -1} | |
473 }; | |
474 | |
475 UErrorCode status = U_ZERO_ERROR; | |
476 Calendar *c = Calendar::createInstance("am_ET@calendar=ethiopic", status); | |
477 if (failure(status, "Calendar::createInstance", TRUE)) return; | |
478 c->setLenient(TRUE); | |
479 doTestCases(tests, c); | |
480 | |
481 delete c; | |
482 | |
483 // Testing Amete Alem mode | |
484 int32_t i; | |
485 TestCase *tcase = tests; | |
486 for (i = 0; tcase[i].era >= 0; i++) { | |
487 if (tcase[i].era == 1) { | |
488 tcase[i].era = 0; // Change to Amete Alem era | |
489 tcase[i].year += 5500; // Amete Mihret 1 = Amete Alem 5501 | |
490 } | |
491 } | |
492 c = Calendar::createInstance("am_ET@calendar=ethiopic-amete-alem", status); | |
493 if (failure(status, "Calendar::createInstance", TRUE)) return; | |
494 c->setLenient(TRUE); | |
495 doTestCases(tests, c); | |
496 | |
497 delete c; | |
498 } | |
499 | |
500 | |
501 #endif | |
OLD | NEW |