1b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/************************************************************************
2b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * COPYRIGHT:
350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * Copyright (c) 1997-2010, International Business Machines Corporation
4b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * and others. All Rights Reserved.
5b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ************************************************************************/
6b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
7b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/utypes.h"
8b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
9b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if !UCONFIG_NO_FORMATTING
10b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
11b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "caltest.h"
12b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/dtfmtsym.h"
13b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/gregocal.h"
1450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#include "hebrwcal.h"
15b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/smpdtfmt.h"
16b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/simpletz.h"
1727f654740f2a26ad62a5c155af9199af9e69b889claireho#include "dbgutil.h"
18b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru#include "unicode/udat.h"
19b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru#include "unicode/ustring.h"
20b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru
21b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru#define mkcstr(U) u_austrcpy(calloc(8, u_strlen(U) + 1), U)
22b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
23b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// *****************************************************************************
24b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// class CalendarTest
25b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// *****************************************************************************
26b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
27b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruUnicodeString CalendarTest::calToStr(const Calendar & cal)
28b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
29b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  UnicodeString out;
30b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  UErrorCode status = U_ZERO_ERROR;
31b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  int i;
32b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  UDate d;
33b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  for(i = 0;i<UCAL_FIELD_COUNT;i++) {
34b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    out += (UnicodeString("") + fieldName((UCalendarDateFields)i) + "=" +  cal.get((UCalendarDateFields)i, status) + UnicodeString(" "));
35b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  }
36b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  out += "[" + UnicodeString(cal.getType()) + "]";
37b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
38b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  if(cal.inDaylightTime(status)) {
39b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    out += UnicodeString(" (in DST), zone=");
40b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  }
41b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  else {
42b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    out += UnicodeString(", zone=");
43b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  }
44b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
45b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  UnicodeString str2;
46b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  out += cal.getTimeZone().getDisplayName(str2);
47b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  d = cal.getTime(status);
48b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  out += UnicodeString(" :","") + d;
49b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
50b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  return out;
51b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
52b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
53b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid CalendarTest::runIndexedTest( int32_t index, UBool exec, const char* &name, char* /*par*/ )
54b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
55b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (exec) logln("TestSuite TestCalendar");
56b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    switch (index) {
57b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        case 0:
58b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            name = "TestDOW943";
59b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if (exec) {
60b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                logln("TestDOW943---"); logln("");
61b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                TestDOW943();
62b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            }
63b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            break;
64b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        case 1:
65b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            name = "TestClonesUnique908";
66b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if (exec) {
67b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                logln("TestClonesUnique908---"); logln("");
68b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                TestClonesUnique908();
69b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            }
70b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            break;
71b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        case 2:
72b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            name = "TestGregorianChange768";
73b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if (exec) {
74b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                logln("TestGregorianChange768---"); logln("");
75b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                TestGregorianChange768();
76b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            }
77b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            break;
78b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        case 3:
79b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            name = "TestDisambiguation765";
80b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if (exec) {
81b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                logln("TestDisambiguation765---"); logln("");
82b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                TestDisambiguation765();
83b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            }
84b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            break;
85b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        case 4:
86b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            name = "TestGMTvsLocal4064654";
87b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if (exec) {
88b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                logln("TestGMTvsLocal4064654---"); logln("");
89b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                TestGMTvsLocal4064654();
90b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            }
91b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            break;
92b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        case 5:
93b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            name = "TestAddSetOrder621";
94b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if (exec) {
95b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                logln("TestAddSetOrder621---"); logln("");
96b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                TestAddSetOrder621();
97b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            }
98b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            break;
99b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        case 6:
100b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            name = "TestAdd520";
101b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if (exec) {
102b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                logln("TestAdd520---"); logln("");
103b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                TestAdd520();
104b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            }
105b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            break;
106b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        case 7:
107b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            name = "TestFieldSet4781";
108b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if (exec) {
109b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                logln("TestFieldSet4781---"); logln("");
110b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                TestFieldSet4781();
111b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            }
112b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            break;
113b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        case 8:
114b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            name = "TestSerialize337";
115b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if (exec) {
116b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                logln("TestSerialize337---"); logln("");
117b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            //  TestSerialize337();
118b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            }
119b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            break;
120b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        case 9:
121b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            name = "TestSecondsZero121";
122b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if (exec) {
123b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                logln("TestSecondsZero121---"); logln("");
124b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                TestSecondsZero121();
125b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            }
126b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            break;
127b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        case 10:
128b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            name = "TestAddSetGet0610";
129b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if (exec) {
130b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                logln("TestAddSetGet0610---"); logln("");
131b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                TestAddSetGet0610();
132b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            }
133b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            break;
134b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        case 11:
135b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            name = "TestFields060";
136b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if (exec) {
137b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                logln("TestFields060---"); logln("");
138b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                TestFields060();
139b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            }
140b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            break;
141b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        case 12:
142b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            name = "TestEpochStartFields";
143b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if (exec) {
144b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                logln("TestEpochStartFields---"); logln("");
145b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                TestEpochStartFields();
146b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            }
147b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            break;
148b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        case 13:
149b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            name = "TestDOWProgression";
150b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if (exec) {
151b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                logln("TestDOWProgression---"); logln("");
152b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                TestDOWProgression();
153b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            }
154b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            break;
155b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        case 14:
156b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            name = "TestGenericAPI";
157b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if (exec) {
158b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                logln("TestGenericAPI---"); logln("");
159b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                TestGenericAPI();
160b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            }
161b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            break;
162b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        case 15:
163b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            name = "TestAddRollExtensive";
164b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if (exec) {
165b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                logln("TestAddRollExtensive---"); logln("");
166b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                TestAddRollExtensive();
167b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            }
168b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            break;
169b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        case 16:
170b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            name = "TestDOW_LOCALandYEAR_WOY";
171b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if (exec) {
172b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                logln("TestDOW_LOCALandYEAR_WOY---"); logln("");
173b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                TestDOW_LOCALandYEAR_WOY();
174b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            }
175b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            break;
176b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        case 17:
177b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            name = "TestWOY";
178b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if (exec) {
179b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                logln("TestWOY---"); logln("");
180b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                TestWOY();
181b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            }
182b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            break;
183b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        case 18:
184b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            name = "TestRog";
185b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if (exec) {
186b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                logln("TestRog---"); logln("");
187b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                TestRog();
188b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            }
189b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            break;
190b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        case 19:
191b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru           name = "TestYWOY";
192b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if (exec) {
193b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                logln("TestYWOY---"); logln("");
194b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                TestYWOY();
195b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            }
196b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            break;
197b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        case 20:
198b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru          name = "TestJD";
199b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru          if(exec) {
200b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            logln("TestJD---"); logln("");
201b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            TestJD();
202b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru          }
203b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru          break;
204b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        case 21:
205b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru          name = "TestDebug";
206b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru          if(exec) {
207b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            logln("TestDebug---"); logln("");
208b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            TestDebug();
209b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru          }
210b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru          break;
211b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        case 22:
212b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru          name = "Test6703";
213b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru          if(exec) {
214b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            logln("Test6703---"); logln("");
215b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            Test6703();
216b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru          }
217b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru          break;
218b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        case 23:
219b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru          name = "Test3785";
220b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru          if(exec) {
221b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            logln("Test3785---"); logln("");
222b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            Test3785();
223b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru          }
224b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru          break;
22550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        case 24:
22650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho          name = "Test1624";
22750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho          if(exec) {
22850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho            logln("Test1624---"); logln("");
22950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho            Test1624();
23050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho          }
23150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho          break;
232b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        default: name = ""; break;
233b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
234b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
235b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
236b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// ---------------------------------------------------------------------------------
237b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
238b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruUnicodeString CalendarTest::fieldName(UCalendarDateFields f) {
239b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    switch (f) {
240b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define FIELD_NAME_STR(x) case x: return (#x+5)
241b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      FIELD_NAME_STR( UCAL_ERA );
242b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      FIELD_NAME_STR( UCAL_YEAR );
243b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      FIELD_NAME_STR( UCAL_MONTH );
244b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      FIELD_NAME_STR( UCAL_WEEK_OF_YEAR );
245b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      FIELD_NAME_STR( UCAL_WEEK_OF_MONTH );
246b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      FIELD_NAME_STR( UCAL_DATE );
247b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      FIELD_NAME_STR( UCAL_DAY_OF_YEAR );
248b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      FIELD_NAME_STR( UCAL_DAY_OF_WEEK );
249b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      FIELD_NAME_STR( UCAL_DAY_OF_WEEK_IN_MONTH );
250b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      FIELD_NAME_STR( UCAL_AM_PM );
251b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      FIELD_NAME_STR( UCAL_HOUR );
252b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      FIELD_NAME_STR( UCAL_HOUR_OF_DAY );
253b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      FIELD_NAME_STR( UCAL_MINUTE );
254b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      FIELD_NAME_STR( UCAL_SECOND );
255b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      FIELD_NAME_STR( UCAL_MILLISECOND );
256b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      FIELD_NAME_STR( UCAL_ZONE_OFFSET );
257b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      FIELD_NAME_STR( UCAL_DST_OFFSET );
258b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      FIELD_NAME_STR( UCAL_YEAR_WOY );
259b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      FIELD_NAME_STR( UCAL_DOW_LOCAL );
260b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      FIELD_NAME_STR( UCAL_EXTENDED_YEAR );
261b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      FIELD_NAME_STR( UCAL_JULIAN_DAY );
262b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      FIELD_NAME_STR( UCAL_MILLISECONDS_IN_DAY );
263b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#undef FIELD_NAME_STR
264b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    default:
265b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        return UnicodeString("") + ((int32_t)f);
266b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
267b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
268b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
269b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
270b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Test various API methods for API completeness.
271b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
272b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid
273b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruCalendarTest::TestGenericAPI()
274b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
275b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
276b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UDate d;
277b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString str;
278b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UBool eq = FALSE,b4 = FALSE,af = FALSE;
279b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
280b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UDate when = date(90, UCAL_APRIL, 15);
281b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
282b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString tzid("TestZone");
283b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int32_t tzoffset = 123400;
284b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
285b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    SimpleTimeZone *zone = new SimpleTimeZone(tzoffset, tzid);
286b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    Calendar *cal = Calendar::createInstance(zone->clone(), status);
28750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    if (failure(status, "Calendar::createInstance", TRUE)) return;
288b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
289b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (*zone != cal->getTimeZone()) errln("FAIL: Calendar::getTimeZone failed");
290b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
291b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    Calendar *cal2 = Calendar::createInstance(cal->getTimeZone(), status);
292b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (failure(status, "Calendar::createInstance")) return;
293b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    cal->setTime(when, status);
294b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    cal2->setTime(when, status);
295b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (failure(status, "Calendar::setTime")) return;
296b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
297b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (!(*cal == *cal2)) errln("FAIL: Calendar::operator== failed");
298b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if ((*cal != *cal2))  errln("FAIL: Calendar::operator!= failed");
299b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (!cal->equals(*cal2, status) ||
300b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        cal->before(*cal2, status) ||
301b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        cal->after(*cal2, status) ||
302b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        U_FAILURE(status)) errln("FAIL: equals/before/after failed");
303b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
304b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    logln(UnicodeString("cal=")  +cal->getTime(status)  + UnicodeString(calToStr(*cal)));
305b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    logln(UnicodeString("cal2=")  +cal2->getTime(status)  + UnicodeString(calToStr(*cal2)));
306b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    logln("cal2->setTime(when+1000)");
307b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    cal2->setTime(when + 1000, status);
308b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    logln(UnicodeString("cal2=")  +cal2->getTime(status)  + UnicodeString(calToStr(*cal2)));
309b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
310b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (failure(status, "Calendar::setTime")) return;
311b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (cal->equals(*cal2, status) ||
312b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        cal2->before(*cal, status) ||
313b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        cal->after(*cal2, status) ||
314b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        U_FAILURE(status)) errln("FAIL: equals/before/after failed after setTime(+1000)");
315b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
31650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    logln("cal->roll(UCAL_SECOND)");
317b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    cal->roll(UCAL_SECOND, (UBool) TRUE, status);
318b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    logln(UnicodeString("cal=")  +cal->getTime(status)  + UnicodeString(calToStr(*cal)));
31950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    cal->roll(UCAL_SECOND, (int32_t)0, status);
32050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    logln(UnicodeString("cal=")  +cal->getTime(status)  + UnicodeString(calToStr(*cal)));
321b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (failure(status, "Calendar::roll")) return;
32250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
323b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (!(eq=cal->equals(*cal2, status)) ||
324b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        (b4=cal->before(*cal2, status)) ||
325b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        (af=cal->after(*cal2, status)) ||
326b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        U_FAILURE(status)) {
327b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      errln("FAIL: equals[%c]/before[%c]/after[%c] failed after roll 1 second [should be T/F/F]",
328b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            eq?'T':'F',
329b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            b4?'T':'F',
330b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            af?'T':'F');
331b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      logln(UnicodeString("cal=")  +cal->getTime(status)  + UnicodeString(calToStr(*cal)));
332b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      logln(UnicodeString("cal2=")  +cal2->getTime(status)  + UnicodeString(calToStr(*cal2)));
333b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
334b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
335b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // Roll back to January
336b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    cal->roll(UCAL_MONTH, (int32_t)(1 + UCAL_DECEMBER - cal->get(UCAL_MONTH, status)), status);
337b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (failure(status, "Calendar::roll")) return;
338b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (cal->equals(*cal2, status) ||
339b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        cal2->before(*cal, status) ||
340b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        cal->after(*cal2, status) ||
341b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        U_FAILURE(status)) errln("FAIL: equals/before/after failed after rollback to January");
342b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
343b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    TimeZone *z = cal->orphanTimeZone();
344b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (z->getID(str) != tzid ||
345b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        z->getRawOffset() != tzoffset)
346b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln("FAIL: orphanTimeZone failed");
347b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
348b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int32_t i;
349b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    for (i=0; i<2; ++i)
350b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    {
351b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UBool lenient = ( i > 0 );
352b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        cal->setLenient(lenient);
353b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (lenient != cal->isLenient()) errln("FAIL: setLenient/isLenient failed");
354b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // Later: Check for lenient behavior
355b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
356b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
357b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    for (i=UCAL_SUNDAY; i<=UCAL_SATURDAY; ++i)
358b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    {
359b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        cal->setFirstDayOfWeek((UCalendarDaysOfWeek)i);
360b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (cal->getFirstDayOfWeek() != i) errln("FAIL: set/getFirstDayOfWeek failed");
361b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UErrorCode aStatus = U_ZERO_ERROR;
362b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (cal->getFirstDayOfWeek(aStatus) != i || U_FAILURE(aStatus)) errln("FAIL: getFirstDayOfWeek(status) failed");
363b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
364b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
365b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    for (i=1; i<=7; ++i)
366b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    {
367b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        cal->setMinimalDaysInFirstWeek((uint8_t)i);
368b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (cal->getMinimalDaysInFirstWeek() != i) errln("FAIL: set/getFirstDayOfWeek failed");
369b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
370b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
371b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    for (i=0; i<UCAL_FIELD_COUNT; ++i)
372b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    {
373c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru        if (cal->getMinimum((UCalendarDateFields)i) > cal->getGreatestMinimum((UCalendarDateFields)i))
374c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru            errln("FAIL: getMinimum larger than getGreatestMinimum for field " + i);
375b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (cal->getLeastMaximum((UCalendarDateFields)i) > cal->getMaximum((UCalendarDateFields)i))
376b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            errln("FAIL: getLeastMaximum larger than getMaximum for field " + i);
377b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (cal->getMinimum((UCalendarDateFields)i) >= cal->getMaximum((UCalendarDateFields)i))
378b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            errln("FAIL: getMinimum not less than getMaximum for field " + i);
379b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
380b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
381b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    cal->adoptTimeZone(TimeZone::createDefault());
382b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    cal->clear();
383b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    cal->set(1984, 5, 24);
384b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (cal->getTime(status) != date(84, 5, 24) || U_FAILURE(status))
385b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln("FAIL: Calendar::set(3 args) failed");
386b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
387b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    cal->clear();
388b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    cal->set(1985, 3, 2, 11, 49);
389b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (cal->getTime(status) != date(85, 3, 2, 11, 49) || U_FAILURE(status))
390b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln("FAIL: Calendar::set(5 args) failed");
391b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
392b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    cal->clear();
393b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    cal->set(1995, 9, 12, 1, 39, 55);
394b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (cal->getTime(status) != date(95, 9, 12, 1, 39, 55) || U_FAILURE(status))
395b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln("FAIL: Calendar::set(6 args) failed");
396b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
397b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    cal->getTime(status);
398b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (failure(status, "Calendar::getTime")) return;
399b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    for (i=0; i<UCAL_FIELD_COUNT; ++i)
400b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    {
401b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        switch(i) {
402b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            case UCAL_YEAR: case UCAL_MONTH: case UCAL_DATE:
403b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            case UCAL_HOUR_OF_DAY: case UCAL_MINUTE: case UCAL_SECOND:
404b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            case UCAL_EXTENDED_YEAR:
405b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru              if (!cal->isSet((UCalendarDateFields)i)) errln("FAIL: Calendar::isSet F, should be T " + fieldName((UCalendarDateFields)i));
406b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                break;
407b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            default:
408b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru              if (cal->isSet((UCalendarDateFields)i)) errln("FAIL: Calendar::isSet = T, should be F  " + fieldName((UCalendarDateFields)i));
409b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
410b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        cal->clear((UCalendarDateFields)i);
411b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (cal->isSet((UCalendarDateFields)i)) errln("FAIL: Calendar::clear/isSet failed " + fieldName((UCalendarDateFields)i));
412b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
413b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
41450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    if(cal->getActualMinimum(Calendar::SECOND, status) != 0){
41550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        errln("Calendar is suppose to return 0 for getActualMinimum");
41650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    }
41750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
41850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    Calendar *cal3 = Calendar::createInstance(status);
41950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    cal3->roll(Calendar::SECOND, (int32_t)0, status);
42050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    if (failure(status, "Calendar::roll(EDateFields, int32_t, UErrorCode)")) return;
42150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
422b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete cal;
423b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete cal2;
42450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    delete cal3;
425b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
426b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int32_t count;
427b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const Locale* loc = Calendar::getAvailableLocales(count);
428b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (count < 1 || loc == 0)
429b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    {
4306d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru        dataerrln("FAIL: getAvailableLocales failed");
431b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
432b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    else
433b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    {
434b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        for (i=0; i<count; ++i)
435b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        {
436b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            cal = Calendar::createInstance(loc[i], status);
437b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if (failure(status, "Calendar::createInstance")) return;
438b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            delete cal;
439b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
440b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
441b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
442b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    cal = Calendar::createInstance(TimeZone::createDefault(), Locale::getEnglish(), status);
443b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (failure(status, "Calendar::createInstance")) return;
444b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete cal;
445b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
446b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    cal = Calendar::createInstance(*zone, Locale::getEnglish(), status);
447b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (failure(status, "Calendar::createInstance")) return;
448b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete cal;
449b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
450b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    GregorianCalendar *gc = new GregorianCalendar(*zone, status);
451b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (failure(status, "new GregorianCalendar")) return;
452b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete gc;
453b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
454b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    gc = new GregorianCalendar(Locale::getEnglish(), status);
455b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (failure(status, "new GregorianCalendar")) return;
456b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete gc;
457b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
458b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    gc = new GregorianCalendar(Locale::getEnglish(), status);
459b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete gc;
460b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
461b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    gc = new GregorianCalendar(*zone, Locale::getEnglish(), status);
462b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (failure(status, "new GregorianCalendar")) return;
463b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete gc;
464b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
465b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    gc = new GregorianCalendar(zone, status);
466b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (failure(status, "new GregorianCalendar")) return;
467b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete gc;
468b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
469b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    gc = new GregorianCalendar(1998, 10, 14, 21, 43, status);
470b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (gc->getTime(status) != (d =date(98, 10, 14, 21, 43) )|| U_FAILURE(status))
471b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      errln("FAIL: new GregorianCalendar(ymdhm) failed with " + UnicodeString(u_errorName(status)) + ",  cal="  + gc->getTime(status)  + UnicodeString(calToStr(*gc)) + ", d=" + d);
472b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    else
473b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      logln(UnicodeString("GOOD: cal=")  +gc->getTime(status)  + UnicodeString(calToStr(*gc)) + ", d=" + d);
474b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete gc;
475b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
476b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    gc = new GregorianCalendar(1998, 10, 14, 21, 43, 55, status);
477b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (gc->getTime(status) != (d=date(98, 10, 14, 21, 43, 55)) || U_FAILURE(status))
478b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      errln("FAIL: new GregorianCalendar(ymdhms) failed with " + UnicodeString(u_errorName(status)));
479b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
480b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    GregorianCalendar gc2(Locale::getEnglish(), status);
481b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (failure(status, "new GregorianCalendar")) return;
482b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    gc2 = *gc;
483b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (gc2 != *gc || !(gc2 == *gc)) errln("FAIL: GregorianCalendar assignment/operator==/operator!= failed");
484b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete gc;
485b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete z;
48650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
48750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    /* Code coverage for Calendar class. */
48850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    cal = Calendar::createInstance(status);
48950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    if (failure(status, "Calendar::createInstance")) {
49050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        return;
49150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    }else {
49250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        ((Calendar *)cal)->roll(UCAL_HOUR, (int32_t)100, status);
49350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        ((Calendar *)cal)->clear(UCAL_HOUR);
49450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#if !UCONFIG_NO_SERVICE
49550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        URegistryKey key = cal->registerFactory(NULL, status);
49650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        cal->unregister(key, status);
49750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#endif
49850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    }
49950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    delete cal;
50050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
50150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    status = U_ZERO_ERROR;
50250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    cal = Calendar::createInstance(Locale("he_IL@calendar=hebrew"), status);
50350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    if (failure(status, "Calendar::createInstance")) {
50450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        return;
50550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    } else {
50650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        cal->roll(Calendar::MONTH, (int32_t)100, status);
50750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    }
50850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
50950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    StringEnumeration *en = Calendar::getKeywordValuesForLocale(NULL, Locale::getDefault(),FALSE, status);
51050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    if (en == NULL || U_FAILURE(status)) {
51150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        dataerrln("FAIL: getKeywordValuesForLocale for Calendar. : %s", u_errorName(status));
51250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    }
51350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    delete en;
51450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    delete cal;
515b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
516b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
517b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// -------------------------------------
518b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
519b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
520b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * This test confirms the correct behavior of add when incrementing
521b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * through subsequent days.
522b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
523b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid
524b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruCalendarTest::TestRog()
525b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
526b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
527b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    GregorianCalendar* gc = new GregorianCalendar(status);
52850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    if (failure(status, "new GregorianCalendar", TRUE)) return;
529b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int32_t year = 1997, month = UCAL_APRIL, date = 1;
530b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    gc->set(year, month, date);
531b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    gc->set(UCAL_HOUR_OF_DAY, 23);
532b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    gc->set(UCAL_MINUTE, 0);
533b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    gc->set(UCAL_SECOND, 0);
534b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    gc->set(UCAL_MILLISECOND, 0);
535b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    for (int32_t i = 0; i < 9; i++, gc->add(UCAL_DATE, 1, status)) {
536b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (U_FAILURE(status)) { errln("Calendar::add failed"); return; }
537b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (gc->get(UCAL_YEAR, status) != year ||
538b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            gc->get(UCAL_MONTH, status) != month ||
539b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            gc->get(UCAL_DATE, status) != (date + i)) errln("FAIL: Date wrong");
540b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (U_FAILURE(status)) { errln("Calendar::get failed"); return; }
541b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
542b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete gc;
543b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
544b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
545b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// -------------------------------------
546b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
547b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
548b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Test the handling of the day of the week, checking for correctness and
549b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * for correct minimum and maximum values.
550b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
551b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid
552b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruCalendarTest::TestDOW943()
553b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
554b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    dowTest(FALSE);
555b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    dowTest(TRUE);
556b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
557b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
558b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid CalendarTest::dowTest(UBool lenient)
559b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
560b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
561b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    GregorianCalendar* cal = new GregorianCalendar(status);
56250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    if (failure(status, "new GregorianCalendar", TRUE)) return;
563b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    logln("cal - Aug 12, 1997\n");
564b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    cal->set(1997, UCAL_AUGUST, 12);
565b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    cal->getTime(status);
566b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (U_FAILURE(status)) { errln("Calendar::getTime failed"); return; }
567b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    logln((lenient?UnicodeString("LENIENT0: "):UnicodeString("nonlenient0: ")) + UnicodeString(calToStr(*cal)));
568b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    cal->setLenient(lenient);
569b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    logln("cal - Dec 1, 1996\n");
570b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    cal->set(1996, UCAL_DECEMBER, 1);
571b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    logln((lenient?UnicodeString("LENIENT: "):UnicodeString("nonlenient: ")) + UnicodeString(calToStr(*cal)));
572b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int32_t dow = cal->get(UCAL_DAY_OF_WEEK, status);
573b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (U_FAILURE(status)) { errln("Calendar::get failed [%s]", u_errorName(status)); return; }
574b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int32_t min = cal->getMinimum(UCAL_DAY_OF_WEEK);
575b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int32_t max = cal->getMaximum(UCAL_DAY_OF_WEEK);
576b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (dow < min ||
577b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        dow > max) errln(UnicodeString("FAIL: Day of week ") + (int32_t)dow + " out of range");
578b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (dow != UCAL_SUNDAY) errln("FAIL: Day of week should be SUNDAY[%d] not %d", UCAL_SUNDAY, dow);
579b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (min != UCAL_SUNDAY ||
580b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        max != UCAL_SATURDAY) errln("FAIL: Min/max bad");
581b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete cal;
582b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
583b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
584b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// -------------------------------------
585b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
586b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
587b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Confirm that cloned Calendar objects do not inadvertently share substructures.
588b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
589b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid
590b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruCalendarTest::TestClonesUnique908()
591b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
592b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
593b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    Calendar *c = Calendar::createInstance(status);
59450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    if (failure(status, "Calendar::createInstance", TRUE)) return;
595b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    Calendar *d = (Calendar*) c->clone();
596b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    c->set(UCAL_MILLISECOND, 123);
597b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    d->set(UCAL_MILLISECOND, 456);
598b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (c->get(UCAL_MILLISECOND, status) != 123 ||
599b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        d->get(UCAL_MILLISECOND, status) != 456) {
600b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln("FAIL: Clones share fields");
601b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
602b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (U_FAILURE(status)) { errln("Calendar::get failed"); return; }
603b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete c;
604b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete d;
605b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
606b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
607b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// -------------------------------------
608b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
609b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
610b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Confirm that the Gregorian cutoff value works as advertised.
611b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
612b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid
613b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruCalendarTest::TestGregorianChange768()
614b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
615b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UBool b;
616b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
617b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString str;
618b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    GregorianCalendar* c = new GregorianCalendar(status);
61950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    if (failure(status, "new GregorianCalendar", TRUE)) return;
620b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    logln(UnicodeString("With cutoff ") + dateToString(c->getGregorianChange(), str));
621b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    b = c->isLeapYear(1800);
622b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    logln(UnicodeString(" isLeapYear(1800) = ") + (b ? "true" : "false"));
623b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    logln(UnicodeString(" (should be FALSE)"));
624b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (b) errln("FAIL");
625b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    c->setGregorianChange(date(0, 0, 1), status);
626b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (U_FAILURE(status)) { errln("GregorianCalendar::setGregorianChange failed"); return; }
627b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    logln(UnicodeString("With cutoff ") + dateToString(c->getGregorianChange(), str));
628b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    b = c->isLeapYear(1800);
629b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    logln(UnicodeString(" isLeapYear(1800) = ") + (b ? "true" : "false"));
630b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    logln(UnicodeString(" (should be TRUE)"));
631b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (!b) errln("FAIL");
632b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete c;
633b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
634b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
635b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// -------------------------------------
636b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
637b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
638b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Confirm the functioning of the field disambiguation algorithm.
639b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
640b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid
641b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruCalendarTest::TestDisambiguation765()
642b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
643b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
644b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    Calendar *c = Calendar::createInstance("en_US", status);
64550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    if (failure(status, "Calendar::createInstance", TRUE)) return;
646b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    c->setLenient(FALSE);
647b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    c->clear();
648b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    c->set(UCAL_YEAR, 1997);
649b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    c->set(UCAL_MONTH, UCAL_JUNE);
650b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    c->set(UCAL_DATE, 3);
651b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    verify765("1997 third day of June = ", c, 1997, UCAL_JUNE, 3);
652b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    c->clear();
653b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    c->set(UCAL_YEAR, 1997);
654b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    c->set(UCAL_DAY_OF_WEEK, UCAL_TUESDAY);
655b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    c->set(UCAL_MONTH, UCAL_JUNE);
656b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    c->set(UCAL_DAY_OF_WEEK_IN_MONTH, 1);
657b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    verify765("1997 first Tuesday in June = ", c, 1997, UCAL_JUNE, 3);
658b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    c->clear();
659b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    c->set(UCAL_YEAR, 1997);
660b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    c->set(UCAL_DAY_OF_WEEK, UCAL_TUESDAY);
661b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    c->set(UCAL_MONTH, UCAL_JUNE);
662b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    c->set(UCAL_DAY_OF_WEEK_IN_MONTH, - 1);
663b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    verify765("1997 last Tuesday in June = ", c, 1997, UCAL_JUNE, 24);
664c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru
665b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    status = U_ZERO_ERROR;
666c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru    c->clear();
667c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru    c->set(UCAL_YEAR, 1997);
668c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru    c->set(UCAL_DAY_OF_WEEK, UCAL_TUESDAY);
669c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru    c->set(UCAL_MONTH, UCAL_JUNE);
670c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru    c->set(UCAL_DAY_OF_WEEK_IN_MONTH, 0);
671c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru    c->getTime(status);
672b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    verify765("1997 zero-th Tuesday in June = ", status);
673c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru
674b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    c->clear();
675b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    c->set(UCAL_YEAR, 1997);
676b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    c->set(UCAL_DAY_OF_WEEK, UCAL_TUESDAY);
677b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    c->set(UCAL_MONTH, UCAL_JUNE);
678b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    c->set(UCAL_WEEK_OF_MONTH, 1);
679b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    verify765("1997 Tuesday in week 1 of June = ", c, 1997, UCAL_JUNE, 3);
680b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    c->clear();
681b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    c->set(UCAL_YEAR, 1997);
682b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    c->set(UCAL_DAY_OF_WEEK, UCAL_TUESDAY);
683b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    c->set(UCAL_MONTH, UCAL_JUNE);
684b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    c->set(UCAL_WEEK_OF_MONTH, 5);
685b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    verify765("1997 Tuesday in week 5 of June = ", c, 1997, UCAL_JULY, 1);
686c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru
687b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    status = U_ZERO_ERROR;
688c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru    c->clear();
689c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru    c->set(UCAL_YEAR, 1997);
690c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru    c->set(UCAL_DAY_OF_WEEK, UCAL_TUESDAY);
691c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru    c->set(UCAL_MONTH, UCAL_JUNE);
692c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru    c->set(UCAL_WEEK_OF_MONTH, 0);
693b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    c->setMinimalDaysInFirstWeek(1);
694c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru    c->getTime(status);
695c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru    verify765("1997 Tuesday in week 0 of June = ", status);
696c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru
697b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /* Note: The following test used to expect YEAR 1997, WOY 1 to
698b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * resolve to a date in Dec 1996; that is, to behave as if
699b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * YEAR_WOY were 1997.  With the addition of a new explicit
700b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * YEAR_WOY field, YEAR_WOY must itself be set if that is what is
701b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * desired.  Using YEAR in combination with WOY is ambiguous, and
702b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * results in the first WOY/DOW day of the year satisfying the
703b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * given fields (there may be up to two such days). In this case,
704b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * it propertly resolves to Tue Dec 30 1997, which has a WOY value
705b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * of 1 (for YEAR_WOY 1998) and a DOW of Tuesday, and falls in the
706b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * _calendar_ year 1997, as specified. - aliu */
707b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    c->clear();
708b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    c->set(UCAL_YEAR_WOY, 1997); // aliu
709b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    c->set(UCAL_DAY_OF_WEEK, UCAL_TUESDAY);
710b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    c->set(UCAL_WEEK_OF_YEAR, 1);
711b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    verify765("1997 Tuesday in week 1 of yearWOY = ", c, 1996, UCAL_DECEMBER, 31);
712b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    c->clear(); // - add test for YEAR
713b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    c->setMinimalDaysInFirstWeek(1);
714b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    c->set(UCAL_YEAR, 1997);
715b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    c->set(UCAL_DAY_OF_WEEK, UCAL_TUESDAY);
716b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    c->set(UCAL_WEEK_OF_YEAR, 1);
717b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    verify765("1997 Tuesday in week 1 of year = ", c, 1997, UCAL_DECEMBER, 30);
718b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    c->clear();
719b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    c->set(UCAL_YEAR, 1997);
720b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    c->set(UCAL_DAY_OF_WEEK, UCAL_TUESDAY);
721b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    c->set(UCAL_WEEK_OF_YEAR, 10);
722b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    verify765("1997 Tuesday in week 10 of year = ", c, 1997, UCAL_MARCH, 4);
723b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //try {
724b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
725b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // {sfb} week 0 is no longer a valid week of year
726b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /*c->clear();
727b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    c->set(Calendar::YEAR, 1997);
728b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    c->set(Calendar::DAY_OF_WEEK, Calendar::TUESDAY);
729b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //c->set(Calendar::WEEK_OF_YEAR, 0);
730b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    c->set(Calendar::WEEK_OF_YEAR, 1);
731b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    verify765("1997 Tuesday in week 0 of year = ", c, 1996, Calendar::DECEMBER, 24);*/
732b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
733b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //}
734b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //catch(IllegalArgumentException ex) {
735b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //    errln("FAIL: Exception seen:");
736b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //    ex.printStackTrace(log);
737b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //}
738b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete c;
739b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
740b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
741b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// -------------------------------------
742b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
743b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid
744b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruCalendarTest::verify765(const UnicodeString& msg, Calendar* c, int32_t year, int32_t month, int32_t day)
745b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
746b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString str;
747b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
748b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int32_t y = c->get(UCAL_YEAR, status);
749b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int32_t m = c->get(UCAL_MONTH, status);
750b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int32_t d = c->get(UCAL_DATE, status);
751b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if ( y == year &&
752b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru         m == month &&
753b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru         d == day) {
754b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (U_FAILURE(status)) { errln("FAIL: Calendar::get failed"); return; }
755b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        logln("PASS: " + msg + dateToString(c->getTime(status), str));
756b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (U_FAILURE(status)) { errln("Calendar::getTime failed"); return; }
757b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
758b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    else {
759b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln("FAIL: " + msg + dateToString(c->getTime(status), str) + "; expected " + (int32_t)year + "/" + (int32_t)(month + 1) + "/" + (int32_t)day +
760b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "; got " + (int32_t)y + "/" + (int32_t)(m + 1) + "/" + (int32_t)d + " for Locale: " + c->getLocaleID(ULOC_ACTUAL_LOCALE,status));
761b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (U_FAILURE(status)) { errln("Calendar::getTime failed"); return; }
762b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
763b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
764b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
765b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// -------------------------------------
766b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
767b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid
768b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruCalendarTest::verify765(const UnicodeString& msg/*, IllegalArgumentException e*/, UErrorCode status)
769b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
770b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (status != U_ILLEGAL_ARGUMENT_ERROR) errln("FAIL: No IllegalArgumentException for " + msg);
771b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    else logln("PASS: " + msg + "IllegalArgument as expected");
772b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
773b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
774b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// -------------------------------------
775b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
776b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
777b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Confirm that the offset between local time and GMT behaves as expected.
778b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
779b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid
780b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruCalendarTest::TestGMTvsLocal4064654()
781b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
782b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    test4064654(1997, 1, 1, 12, 0, 0);
783b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    test4064654(1997, 4, 16, 18, 30, 0);
784b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
785b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
786b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// -------------------------------------
787b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
788b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid
789b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruCalendarTest::test4064654(int32_t yr, int32_t mo, int32_t dt, int32_t hr, int32_t mn, int32_t sc)
790b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
791b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UDate date;
792b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
793b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString str;
794b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    Calendar *gmtcal = Calendar::createInstance(status);
79550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    if (failure(status, "Calendar::createInstance", TRUE)) return;
796b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    gmtcal->adoptTimeZone(TimeZone::createTimeZone("Africa/Casablanca"));
797b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    gmtcal->set(yr, mo - 1, dt, hr, mn, sc);
798b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    gmtcal->set(UCAL_MILLISECOND, 0);
799b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    date = gmtcal->getTime(status);
800b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (U_FAILURE(status)) { errln("Calendar::getTime failed"); return; }
801b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    logln("date = " + dateToString(date, str));
802b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    Calendar *cal = Calendar::createInstance(status);
803b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (U_FAILURE(status)) { errln("Calendar::createInstance failed"); return; }
804b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    cal->setTime(date, status);
805b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (U_FAILURE(status)) { errln("Calendar::setTime failed"); return; }
806b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int32_t offset = cal->getTimeZone().getOffset((uint8_t)cal->get(UCAL_ERA, status),
807b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                                                  cal->get(UCAL_YEAR, status),
808b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                                                  cal->get(UCAL_MONTH, status),
809b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                                                  cal->get(UCAL_DATE, status),
810b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                                                  (uint8_t)cal->get(UCAL_DAY_OF_WEEK, status),
811b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                                                  cal->get(UCAL_MILLISECOND, status), status);
812b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (U_FAILURE(status)) { errln("Calendar::get failed"); return; }
813b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    logln("offset for " + dateToString(date, str) + "= " + (offset / 1000 / 60 / 60.0) + "hr");
814b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int32_t utc = ((cal->get(UCAL_HOUR_OF_DAY, status) * 60 +
815b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    cal->get(UCAL_MINUTE, status)) * 60 +
816b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                   cal->get(UCAL_SECOND, status)) * 1000 +
817b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        cal->get(UCAL_MILLISECOND, status) - offset;
818b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (U_FAILURE(status)) { errln("Calendar::get failed"); return; }
819b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int32_t expected = ((hr * 60 + mn) * 60 + sc) * 1000;
820b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (utc != expected) errln(UnicodeString("FAIL: Discrepancy of ") + (utc - expected) +
821b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                               " millis = " + ((utc - expected) / 1000 / 60 / 60.0) + " hr");
822b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete gmtcal;
823b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete cal;
824b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
825b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
826b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// -------------------------------------
827b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
828b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
829b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * The operations of adding and setting should not exhibit pathological
830b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * dependence on the order of operations.  This test checks for this.
831b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
832b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid
833b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruCalendarTest::TestAddSetOrder621()
834b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
835b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UDate d = date(97, 4, 14, 13, 23, 45);
836b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
837b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    Calendar *cal = Calendar::createInstance(status);
83850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    if (failure(status, "Calendar::createInstance", TRUE)) return;
83950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
840b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    cal->setTime(d, status);
841b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (U_FAILURE(status)) {
842b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln("Calendar::setTime failed");
843b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        delete cal;
844b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        return;
845b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
846b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    cal->add(UCAL_DATE, - 5, status);
847b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (U_FAILURE(status)) {
848b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln("Calendar::add failed");
849b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        delete cal;
850b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        return;
851b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
852b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    cal->set(UCAL_HOUR_OF_DAY, 0);
853b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    cal->set(UCAL_MINUTE, 0);
854b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    cal->set(UCAL_SECOND, 0);
855b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString s;
856b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    dateToString(cal->getTime(status), s);
857b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (U_FAILURE(status)) {
858b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln("Calendar::getTime failed");
859b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        delete cal;
860b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        return;
861b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
862b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete cal;
863b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
864b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    cal = Calendar::createInstance(status);
865b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (U_FAILURE(status)) {
866b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln("Calendar::createInstance failed");
867b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        delete cal;
868b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        return;
869b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
870b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    cal->setTime(d, status);
871b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (U_FAILURE(status)) {
872b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln("Calendar::setTime failed");
873b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        delete cal;
874b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        return;
875b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
876b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    cal->set(UCAL_HOUR_OF_DAY, 0);
877b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    cal->set(UCAL_MINUTE, 0);
878b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    cal->set(UCAL_SECOND, 0);
879b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    cal->add(UCAL_DATE, - 5, status);
880b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (U_FAILURE(status)) {
881b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln("Calendar::add failed");
882b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        delete cal;
883b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        return;
884b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
885b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString s2;
886b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    dateToString(cal->getTime(status), s2);
887b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (U_FAILURE(status)) {
888b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln("Calendar::getTime failed");
889b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        delete cal;
890b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        return;
891b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
892b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (s == s2)
893b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        logln("Pass: " + s + " == " + s2);
894b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    else
895b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln("FAIL: " + s + " != " + s2);
896b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete cal;
897b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
898b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
899b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// -------------------------------------
900b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
901b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
902b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Confirm that adding to various fields works.
903b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
904b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid
905b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruCalendarTest::TestAdd520()
906b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
907b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int32_t y = 1997, m = UCAL_FEBRUARY, d = 1;
908b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
909b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    GregorianCalendar *temp = new GregorianCalendar(y, m, d, status);
91050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    if (failure(status, "new GregorianCalendar", TRUE)) return;
911b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    check520(temp, y, m, d);
912b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    temp->add(UCAL_YEAR, 1, status);
913b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (U_FAILURE(status)) { errln("Calendar::add failed"); return; }
914b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    y++;
915b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    check520(temp, y, m, d);
916b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    temp->add(UCAL_MONTH, 1, status);
917b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (U_FAILURE(status)) { errln("Calendar::add failed"); return; }
918b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    m++;
919b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    check520(temp, y, m, d);
920b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    temp->add(UCAL_DATE, 1, status);
921b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (U_FAILURE(status)) { errln("Calendar::add failed"); return; }
922b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    d++;
923b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    check520(temp, y, m, d);
924b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    temp->add(UCAL_DATE, 2, status);
925b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (U_FAILURE(status)) { errln("Calendar::add failed"); return; }
926b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    d += 2;
927b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    check520(temp, y, m, d);
928b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    temp->add(UCAL_DATE, 28, status);
929b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (U_FAILURE(status)) { errln("Calendar::add failed"); return; }
930b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    d = 1;++m;
931b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    check520(temp, y, m, d);
932b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete temp;
933b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
934b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
935b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// -------------------------------------
936b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
937b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
938b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Execute adding and rolling in GregorianCalendar extensively,
939b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
940b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid
941b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruCalendarTest::TestAddRollExtensive()
942b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
943b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int32_t maxlimit = 40;
944b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int32_t y = 1997, m = UCAL_FEBRUARY, d = 1, hr = 1, min = 1, sec = 0, ms = 0;
945b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
946b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    GregorianCalendar *temp = new GregorianCalendar(y, m, d, status);
94750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    if (failure(status, "new GregorianCalendar", TRUE)) return;
948b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
949b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    temp->set(UCAL_HOUR, hr);
950b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    temp->set(UCAL_MINUTE, min);
951b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    temp->set(UCAL_SECOND, sec);
952b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    temp->set(UCAL_MILLISECOND, ms);
953b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    temp->setMinimalDaysInFirstWeek(1);
954b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
955b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UCalendarDateFields e;
956b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
957b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    logln("Testing GregorianCalendar add...");
958b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    e = UCAL_YEAR;
959b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    while (e < UCAL_FIELD_COUNT) {
960b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        int32_t i;
961b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        int32_t limit = maxlimit;
962b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        status = U_ZERO_ERROR;
963b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        for (i = 0; i < limit; i++) {
964b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            temp->add(e, 1, status);
965b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if (U_FAILURE(status)) { limit = i; status = U_ZERO_ERROR; }
966b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
967b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        for (i = 0; i < limit; i++) {
968b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            temp->add(e, -1, status);
969b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if (U_FAILURE(status)) { errln("GregorianCalendar::add -1 failed"); return; }
970b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
971b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        check520(temp, y, m, d, hr, min, sec, ms, e);
972b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
973b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        e = (UCalendarDateFields) ((int32_t) e + 1);
974b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
975b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
976b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    logln("Testing GregorianCalendar roll...");
977b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    e = UCAL_YEAR;
978b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    while (e < UCAL_FIELD_COUNT) {
979b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        int32_t i;
980b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        int32_t limit = maxlimit;
981b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        status = U_ZERO_ERROR;
982b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        for (i = 0; i < limit; i++) {
983b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            logln(calToStr(*temp) + UnicodeString("  " ) + fieldName(e) + UnicodeString("++") );
984b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            temp->roll(e, 1, status);
985b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if (U_FAILURE(status)) {
986b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru              logln("caltest.cpp:%d e=%d, i=%d - roll(+) err %s\n",  __LINE__, (int) e, (int) i, u_errorName(status));
987b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru              logln(calToStr(*temp));
988b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru              limit = i; status = U_ZERO_ERROR;
989b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            }
990b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
991b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        for (i = 0; i < limit; i++) {
992b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            logln("caltest.cpp:%d e=%d, i=%d\n",  __LINE__, (int) e, (int) i);
993b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            logln(calToStr(*temp) + UnicodeString("  " ) + fieldName(e) + UnicodeString("--") );
994b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            temp->roll(e, -1, status);
995b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if (U_FAILURE(status)) { errln(UnicodeString("GregorianCalendar::roll ") + CalendarTest::fieldName(e) + " count=" + UnicodeString('@'+i) + " by -1 failed with " + u_errorName(status) ); return; }
996b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
997b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        check520(temp, y, m, d, hr, min, sec, ms, e);
998b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
999b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        e = (UCalendarDateFields) ((int32_t) e + 1);
1000b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1001b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1002b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete temp;
1003b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
1004b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1005b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// -------------------------------------
1006b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid
1007b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruCalendarTest::check520(Calendar* c,
1008b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                        int32_t y, int32_t m, int32_t d,
1009b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                        int32_t hr, int32_t min, int32_t sec,
1010b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                        int32_t ms, UCalendarDateFields field)
1011b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1012b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
1013b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
1014b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (c->get(UCAL_YEAR, status) != y ||
1015b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        c->get(UCAL_MONTH, status) != m ||
1016b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        c->get(UCAL_DATE, status) != d ||
1017b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        c->get(UCAL_HOUR, status) != hr ||
1018b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        c->get(UCAL_MINUTE, status) != min ||
1019b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        c->get(UCAL_SECOND, status) != sec ||
1020b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        c->get(UCAL_MILLISECOND, status) != ms) {
1021b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln(UnicodeString("U_FAILURE for field ") + (int32_t)field +
1022b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                ": Expected y/m/d h:m:s:ms of " +
1023b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                y + "/" + (m + 1) + "/" + d + " " +
1024b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru              hr + ":" + min + ":" + sec + ":" + ms +
1025b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru              "; got " + c->get(UCAL_YEAR, status) +
1026b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru              "/" + (c->get(UCAL_MONTH, status) + 1) +
1027b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru              "/" + c->get(UCAL_DATE, status) +
1028b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru              " " + c->get(UCAL_HOUR, status) + ":" +
1029b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru              c->get(UCAL_MINUTE, status) + ":" +
1030b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru              c->get(UCAL_SECOND, status) + ":" +
1031b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru              c->get(UCAL_MILLISECOND, status)
1032b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru              );
1033b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1034b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (U_FAILURE(status)) { errln("Calendar::get failed"); return; }
1035b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1036b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    else
1037b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        logln(UnicodeString("Confirmed: ") + y + "/" +
1038b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                (m + 1) + "/" + d + " " +
1039b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                hr + ":" + min + ":" + sec + ":" + ms);
1040b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
1041b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1042b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// -------------------------------------
1043b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid
1044b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruCalendarTest::check520(Calendar* c,
1045b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                        int32_t y, int32_t m, int32_t d)
1046b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1047b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
1048b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
1049b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (c->get(UCAL_YEAR, status) != y ||
1050b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        c->get(UCAL_MONTH, status) != m ||
1051b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        c->get(UCAL_DATE, status) != d) {
1052b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln(UnicodeString("FAILURE: Expected y/m/d of ") +
1053b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru              y + "/" + (m + 1) + "/" + d + " " +
1054b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru              "; got " + c->get(UCAL_YEAR, status) +
1055b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru              "/" + (c->get(UCAL_MONTH, status) + 1) +
1056b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru              "/" + c->get(UCAL_DATE, status)
1057b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru              );
1058b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1059b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (U_FAILURE(status)) { errln("Calendar::get failed"); return; }
1060b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1061b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    else
1062b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        logln(UnicodeString("Confirmed: ") + y + "/" +
1063b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                (m + 1) + "/" + d);
1064b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
1065b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1066b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// -------------------------------------
1067b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1068b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
1069b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Test that setting of fields works.  In particular, make sure that all instances
1070b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * of GregorianCalendar don't share a static instance of the fields array.
1071b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
1072b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid
1073b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruCalendarTest::TestFieldSet4781()
1074b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
1075b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // try {
1076b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UErrorCode status = U_ZERO_ERROR;
1077b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        GregorianCalendar *g = new GregorianCalendar(status);
107850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        if (failure(status, "new GregorianCalendar", TRUE)) return;
1079b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        GregorianCalendar *g2 = new GregorianCalendar(status);
1080b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (U_FAILURE(status)) { errln("Couldn't create GregorianCalendar"); return; }
1081b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        g2->set(UCAL_HOUR, 12, status);
1082b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        g2->set(UCAL_MINUTE, 0, status);
1083b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        g2->set(UCAL_SECOND, 0, status);
1084b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (U_FAILURE(status)) { errln("Calendar::set failed"); return; }
1085b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (*g == *g2) logln("Same");
1086b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        else logln("Different");
1087b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //}
1088b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        //catch(IllegalArgumentException e) {
1089b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        //errln("Unexpected exception seen: " + e);
1090b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //}
1091b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        delete g;
1092b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        delete g2;
1093b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
1094b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1095b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// -------------------------------------
1096b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1097b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* We don't support serialization on C++
1098b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid
1099b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruCalendarTest::TestSerialize337()
1100b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
1101b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    Calendar cal = Calendar::getInstance();
1102b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UBool ok = FALSE;
1103b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    try {
1104b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        FileOutputStream f = new FileOutputStream(FILENAME);
1105b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        ObjectOutput s = new ObjectOutputStream(f);
1106b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        s.writeObject(PREFIX);
1107b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        s.writeObject(cal);
1108b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        s.writeObject(POSTFIX);
1109b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        f.close();
1110b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        FileInputStream in = new FileInputStream(FILENAME);
1111b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        ObjectInputStream t = new ObjectInputStream(in);
1112b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UnicodeString& pre = (UnicodeString&) t.readObject();
1113b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        Calendar c = (Calendar) t.readObject();
1114b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UnicodeString& post = (UnicodeString&) t.readObject();
1115b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        in.close();
1116b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        ok = pre.equals(PREFIX) &&
1117b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            post.equals(POSTFIX) &&
1118b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            cal->equals(c);
1119b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        File fl = new File(FILENAME);
1120b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        fl.delete();
1121b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1122b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    catch(IOException e) {
1123b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln("FAIL: Exception received:");
1124b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        e.printStackTrace(log);
1125b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1126b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    catch(ClassNotFoundException e) {
1127b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln("FAIL: Exception received:");
1128b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        e.printStackTrace(log);
1129b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1130b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (!ok) errln("Serialization of Calendar object failed.");
1131b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
1132b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1133b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruUnicodeString& CalendarTest::PREFIX = "abc";
1134b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1135b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruUnicodeString& CalendarTest::POSTFIX = "def";
1136b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1137b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruUnicodeString& CalendarTest::FILENAME = "tmp337.bin";
1138b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
1139b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1140b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// -------------------------------------
1141b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1142b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
1143b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Verify that the seconds of a Calendar can be zeroed out through the
1144b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * expected sequence of operations.
1145b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
1146b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid
1147b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruCalendarTest::TestSecondsZero121()
1148b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
1149b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
1150b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    Calendar *cal = new GregorianCalendar(status);
115150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    if (failure(status, "new GregorianCalendar", TRUE)) return;
1152b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    cal->setTime(Calendar::getNow(), status);
1153b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (U_FAILURE(status)) { errln("Calendar::setTime failed"); return; }
1154b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    cal->set(UCAL_SECOND, 0);
1155b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (U_FAILURE(status)) { errln("Calendar::set failed"); return; }
1156b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UDate d = cal->getTime(status);
1157b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (U_FAILURE(status)) { errln("Calendar::getTime failed"); return; }
1158b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString s;
1159b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    dateToString(d, s);
11606d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru    if (s.indexOf("DATE_FORMAT_FAILURE") >= 0) {
11616d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru        dataerrln("Got: \"DATE_FORMAT_FAILURE\".");
11626d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru    } else if (s.indexOf(":00 ") < 0) {
11636d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru        errln("Expected to see :00 in " + s);
11646d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru    }
1165b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete cal;
1166b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
1167b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1168b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// -------------------------------------
1169b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1170b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
1171b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Verify that a specific sequence of adding and setting works as expected;
1172b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * it should not vary depending on when and whether the get method is
1173b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * called.
1174b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
1175b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid
1176b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruCalendarTest::TestAddSetGet0610()
1177b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
1178b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString EXPECTED_0610("1993/0/5", "");
1179b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
1180b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    {
1181b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        Calendar *calendar = new GregorianCalendar(status);
118250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        if (failure(status, "new GregorianCalendar", TRUE)) return;
1183b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        calendar->set(1993, UCAL_JANUARY, 4);
1184b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        logln("1A) " + value(calendar));
1185b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        calendar->add(UCAL_DATE, 1, status);
1186b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (U_FAILURE(status)) { errln("Calendar::add failed"); return; }
1187b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UnicodeString v = value(calendar);
1188b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        logln("1B) " + v);
1189b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        logln("--) 1993/0/5");
1190b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (!(v == EXPECTED_0610)) errln("Expected " + EXPECTED_0610 + "; saw " + v);
1191b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        delete calendar;
1192b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1193b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    {
1194b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        Calendar *calendar = new GregorianCalendar(1993, UCAL_JANUARY, 4, status);
1195b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (U_FAILURE(status)) { errln("Couldn't create GregorianCalendar"); return; }
1196b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        logln("2A) " + value(calendar));
1197b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        calendar->add(UCAL_DATE, 1, status);
1198b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (U_FAILURE(status)) { errln("Calendar::add failed"); return; }
1199b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UnicodeString v = value(calendar);
1200b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        logln("2B) " + v);
1201b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        logln("--) 1993/0/5");
1202b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (!(v == EXPECTED_0610)) errln("Expected " + EXPECTED_0610 + "; saw " + v);
1203b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        delete calendar;
1204b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1205b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    {
1206b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        Calendar *calendar = new GregorianCalendar(1993, UCAL_JANUARY, 4, status);
1207b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (U_FAILURE(status)) { errln("Couldn't create GregorianCalendar"); return; }
1208b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        logln("3A) " + value(calendar));
1209b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        calendar->getTime(status);
1210b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (U_FAILURE(status)) { errln("Calendar::getTime failed"); return; }
1211b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        calendar->add(UCAL_DATE, 1, status);
1212b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (U_FAILURE(status)) { errln("Calendar::add failed"); return; }
1213b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UnicodeString v = value(calendar);
1214b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        logln("3B) " + v);
1215b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        logln("--) 1993/0/5");
1216b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (!(v == EXPECTED_0610)) errln("Expected " + EXPECTED_0610 + "; saw " + v);
1217b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        delete calendar;
1218b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1219b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
1220b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1221b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// -------------------------------------
1222b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1223b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruUnicodeString
1224b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruCalendarTest::value(Calendar* calendar)
1225b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
1226b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
1227b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    return UnicodeString("") + (int32_t)calendar->get(UCAL_YEAR, status) +
1228b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "/" + (int32_t)calendar->get(UCAL_MONTH, status) +
1229b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "/" + (int32_t)calendar->get(UCAL_DATE, status) +
1230b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        (U_FAILURE(status) ? " FAIL: Calendar::get failed" : "");
1231b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
1232b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1233b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1234b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// -------------------------------------
1235b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1236b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
1237b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Verify that various fields on a known date are set correctly.
1238b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
1239b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid
1240b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruCalendarTest::TestFields060()
1241b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
1242b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
1243b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int32_t year = 1997;
1244b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int32_t month = UCAL_OCTOBER;
1245b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int32_t dDate = 22;
1246b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    GregorianCalendar *calendar = 0;
1247b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    calendar = new GregorianCalendar(year, month, dDate, status);
124850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    if (failure(status, "new GregorianCalendar", TRUE)) return;
1249b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    for (int32_t i = 0; i < EXPECTED_FIELDS_length;) {
1250b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UCalendarDateFields field = (UCalendarDateFields)EXPECTED_FIELDS[i++];
1251b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        int32_t expected = EXPECTED_FIELDS[i++];
1252b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (calendar->get(field, status) != expected) {
1253b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            errln(UnicodeString("Expected field ") + (int32_t)field + " to have value " + (int32_t)expected +
1254b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                  "; received " + (int32_t)calendar->get(field, status) + " instead");
1255b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if (U_FAILURE(status)) { errln("Calendar::get failed"); return; }
1256b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
1257b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1258b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete calendar;
1259b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
1260b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1261b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruint32_t CalendarTest::EXPECTED_FIELDS[] = {
1262b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UCAL_YEAR, 1997,
1263b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UCAL_MONTH, UCAL_OCTOBER,
1264b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UCAL_DATE, 22,
1265b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UCAL_DAY_OF_WEEK, UCAL_WEDNESDAY,
1266b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UCAL_DAY_OF_WEEK_IN_MONTH, 4,
1267b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UCAL_DAY_OF_YEAR, 295
1268b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru};
1269b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1270b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruconst int32_t CalendarTest::EXPECTED_FIELDS_length = (int32_t)(sizeof(CalendarTest::EXPECTED_FIELDS) /
1271b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    sizeof(CalendarTest::EXPECTED_FIELDS[0]));
1272b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1273b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// -------------------------------------
1274b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1275b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
1276b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Verify that various fields on a known date are set correctly.  In this
1277b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * case, the start of the epoch (January 1 1970).
1278b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
1279b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid
1280b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruCalendarTest::TestEpochStartFields()
1281b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
1282b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
1283b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    TimeZone *z = TimeZone::createDefault();
1284b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    Calendar *c = Calendar::createInstance(status);
128550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    if (failure(status, "Calendar::createInstance", TRUE)) return;
1286b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UDate d = - z->getRawOffset();
1287b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    GregorianCalendar *gc = new GregorianCalendar(status);
1288b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (U_FAILURE(status)) { errln("Couldn't create GregorianCalendar"); return; }
1289b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    gc->setTimeZone(*z);
1290b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    gc->setTime(d, status);
1291b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (U_FAILURE(status)) { errln("Calendar::setTime failed"); return; }
1292b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UBool idt = gc->inDaylightTime(status);
1293b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (U_FAILURE(status)) { errln("GregorianCalendar::inDaylightTime failed"); return; }
1294b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (idt) {
1295b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UnicodeString str;
1296b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        logln("Warning: Skipping test because " + dateToString(d, str) + " is in DST.");
1297b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1298b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    else {
1299b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        c->setTime(d, status);
1300b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (U_FAILURE(status)) { errln("Calendar::setTime failed"); return; }
1301b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        for (int32_t i = 0; i < UCAL_ZONE_OFFSET;++i) {
1302b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if (c->get((UCalendarDateFields)i, status) != EPOCH_FIELDS[i])
1303b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                errln(UnicodeString("Expected field ") + i + " to have value " + EPOCH_FIELDS[i] +
1304b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                      "; saw " + c->get((UCalendarDateFields)i, status) + " instead");
1305b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if (U_FAILURE(status)) { errln("Calendar::get failed"); return; }
1306b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
1307b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (c->get(UCAL_ZONE_OFFSET, status) != z->getRawOffset())
1308b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        {
1309b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            errln(UnicodeString("Expected field ZONE_OFFSET to have value ") + z->getRawOffset() +
1310b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                  "; saw " + c->get(UCAL_ZONE_OFFSET, status) + " instead");
1311b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if (U_FAILURE(status)) { errln("Calendar::get failed"); return; }
1312b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
1313b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (c->get(UCAL_DST_OFFSET, status) != 0)
1314b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        {
1315b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            errln(UnicodeString("Expected field DST_OFFSET to have value 0") +
1316b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                  "; saw " + c->get(UCAL_DST_OFFSET, status) + " instead");
1317b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if (U_FAILURE(status)) { errln("Calendar::get failed"); return; }
1318b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
1319b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1320b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete c;
1321b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete z;
1322b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete gc;
1323b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
1324b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1325b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruint32_t CalendarTest::EPOCH_FIELDS[] = {
132627f654740f2a26ad62a5c155af9199af9e69b889claireho    1, 1970, 0, 53, 0, 1, 1, 5, 1, 0, 0, 0, 0, 0, 0, - 28800000, 0
1327b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru};
1328b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1329b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// -------------------------------------
1330b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1331b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
1332b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Test that the days of the week progress properly when add is called repeatedly
1333b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * for increments of 24 days.
1334b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
1335b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid
1336b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruCalendarTest::TestDOWProgression()
1337b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
1338b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
1339b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    Calendar *cal = new GregorianCalendar(1972, UCAL_OCTOBER, 26, status);
134050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    if (failure(status, "new GregorianCalendar", TRUE)) return;
1341b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    marchByDelta(cal, 24);
1342b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete cal;
1343b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
1344b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1345b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// -------------------------------------
1346b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1347b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid
1348b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruCalendarTest::TestDOW_LOCALandYEAR_WOY()
1349b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
1350b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /* Note: I've commented out the loop_addroll tests for YEAR and
1351b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * YEAR_WOY below because these two fields should NOT behave
1352b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * identically when adding.  YEAR should keep the month/dom
1353b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * invariant.  YEAR_WOY should keep the woy/dow invariant.  I've
1354b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * added a new test that checks for this in place of the old call
1355b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * to loop_addroll. - aliu */
1356b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
1357b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int32_t times = 20;
1358b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    Calendar *cal=Calendar::createInstance(Locale::getGermany(), status);
135950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    if (failure(status, "Calendar::createInstance", TRUE)) return;
1360b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    SimpleDateFormat *sdf=new SimpleDateFormat(UnicodeString("YYYY'-W'ww-ee"), Locale::getGermany(), status);
13616d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru    if (U_FAILURE(status)) { errcheckln(status, "Couldn't create SimpleDateFormat - %s", u_errorName(status)); return; }
1362b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1363b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // ICU no longer use localized date-time pattern characters by default.
1364b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // So we set pattern chars using 'J' instead of 'Y'.
1365b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    DateFormatSymbols *dfs = new DateFormatSymbols(Locale::getGermany(), status);
1366b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    dfs->setLocalPatternChars(UnicodeString("GyMdkHmsSEDFwWahKzJeugAZvcLQq"));
1367b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    sdf->adoptDateFormatSymbols(dfs);
1368b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    sdf->applyLocalizedPattern(UnicodeString("JJJJ'-W'ww-ee"), status);
1369b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (U_FAILURE(status)) { errln("Couldn't apply localized pattern"); return; }
1370b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1371b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru	cal->clear();
1372b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    cal->set(1997, UCAL_DECEMBER, 25);
1373b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    doYEAR_WOYLoop(cal, sdf, times, status);
1374b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //loop_addroll(cal, /*sdf,*/ times, UCAL_YEAR_WOY, UCAL_YEAR,  status);
1375b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    yearAddTest(*cal, status); // aliu
1376b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    loop_addroll(cal, /*sdf,*/ times, UCAL_DOW_LOCAL, UCAL_DAY_OF_WEEK, status);
1377b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (U_FAILURE(status)) { errln("Error in parse/calculate test for 1997"); return; }
1378b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1379b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    cal->clear();
1380b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    cal->set(1998, UCAL_DECEMBER, 25);
1381b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    doYEAR_WOYLoop(cal, sdf, times, status);
1382b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //loop_addroll(cal, /*sdf,*/ times, UCAL_YEAR_WOY, UCAL_YEAR,  status);
1383b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    yearAddTest(*cal, status); // aliu
1384b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    loop_addroll(cal, /*sdf,*/ times, UCAL_DOW_LOCAL, UCAL_DAY_OF_WEEK, status);
1385b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (U_FAILURE(status)) { errln("Error in parse/calculate test for 1998"); return; }
1386b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1387b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    cal->clear();
1388b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    cal->set(1582, UCAL_OCTOBER, 1);
1389b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    doYEAR_WOYLoop(cal, sdf, times, status);
1390b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //loop_addroll(cal, /*sdf,*/ times, Calendar::YEAR_WOY, Calendar::YEAR,  status);
1391b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    yearAddTest(*cal, status); // aliu
1392b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    loop_addroll(cal, /*sdf,*/ times, UCAL_DOW_LOCAL, UCAL_DAY_OF_WEEK, status);
1393b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (U_FAILURE(status)) { errln("Error in parse/calculate test for 1582"); return; }
1394b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete sdf;
1395b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete cal;
1396b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1397b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    return;
1398b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
1399b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1400b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
1401b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Confirm that adding a YEAR and adding a YEAR_WOY work properly for
1402b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * the given Calendar at its current setting.
1403b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
1404b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid CalendarTest::yearAddTest(Calendar& cal, UErrorCode& status) {
1405b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /**
1406b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * When adding the YEAR, the month and day should remain constant.
1407b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * When adding the YEAR_WOY, the WOY and DOW should remain constant. - aliu
1408b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * Examples:
1409b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     *  Wed Jan 14 1998 / 1998-W03-03 Add(YEAR_WOY, 1) -> Wed Jan 20 1999 / 1999-W03-03
1410b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     *                                Add(YEAR, 1)     -> Thu Jan 14 1999 / 1999-W02-04
1411b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     *  Thu Jan 14 1999 / 1999-W02-04 Add(YEAR_WOY, 1) -> Thu Jan 13 2000 / 2000-W02-04
1412b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     *                                Add(YEAR, 1)     -> Fri Jan 14 2000 / 2000-W02-05
1413b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     *  Sun Oct 31 1582 / 1582-W42-07 Add(YEAR_WOY, 1) -> Sun Oct 23 1583 / 1583-W42-07
1414b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     *                                Add(YEAR, 1)     -> Mon Oct 31 1583 / 1583-W44-01
1415b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     */
1416b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int32_t y   = cal.get(UCAL_YEAR, status);
1417b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int32_t mon = cal.get(UCAL_MONTH, status);
1418b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int32_t day = cal.get(UCAL_DATE, status);
1419b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int32_t ywy = cal.get(UCAL_YEAR_WOY, status);
1420b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int32_t woy = cal.get(UCAL_WEEK_OF_YEAR, status);
1421b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int32_t dow = cal.get(UCAL_DOW_LOCAL, status);
1422b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UDate t = cal.getTime(status);
1423b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1424b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(U_FAILURE(status)){
1425b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln(UnicodeString("Failed to create Calendar for locale. Error: ") + UnicodeString(u_errorName(status)));
1426b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        return;
1427b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1428b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString str, str2;
1429b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    SimpleDateFormat fmt(UnicodeString("EEE MMM dd yyyy / YYYY'-W'ww-ee"), status);
1430b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    fmt.setCalendar(cal);
1431b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1432b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    fmt.format(t, str.remove());
1433b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    str += ".add(YEAR, 1)    =>";
1434b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    cal.add(UCAL_YEAR, 1, status);
1435b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int32_t y2   = cal.get(UCAL_YEAR, status);
1436b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int32_t mon2 = cal.get(UCAL_MONTH, status);
1437b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int32_t day2 = cal.get(UCAL_DATE, status);
1438b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    fmt.format(cal.getTime(status), str);
1439b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (y2 != (y+1) || mon2 != mon || day2 != day) {
1440b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        str += (UnicodeString)", expected year " +
1441b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            (y+1) + ", month " + (mon+1) + ", day " + day;
1442b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln((UnicodeString)"FAIL: " + str);
1443b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        logln( UnicodeString(" -> ") + CalendarTest::calToStr(cal) );
1444b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    } else {
1445b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        logln(str);
1446b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1447b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1448b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    fmt.format(t, str.remove());
1449b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    str += ".add(YEAR_WOY, 1)=>";
1450b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    cal.setTime(t, status);
1451b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    logln( UnicodeString(" <- ") + CalendarTest::calToStr(cal) );
1452b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    cal.add(UCAL_YEAR_WOY, 1, status);
1453b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int32_t ywy2 = cal.get(UCAL_YEAR_WOY, status);
1454b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int32_t woy2 = cal.get(UCAL_WEEK_OF_YEAR, status);
1455b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int32_t dow2 = cal.get(UCAL_DOW_LOCAL, status);
1456b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    fmt.format(cal.getTime(status), str);
1457b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (ywy2 != (ywy+1) || woy2 != woy || dow2 != dow) {
1458b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        str += (UnicodeString)", expected yearWOY " +
1459b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            (ywy+1) + ", woy " + woy + ", dowLocal " + dow;
1460b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln((UnicodeString)"FAIL: " + str);
1461b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        logln( UnicodeString(" -> ") + CalendarTest::calToStr(cal) );
1462b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    } else {
1463b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        logln(str);
1464b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1465b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
1466b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1467b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// -------------------------------------
1468b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1469b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid CalendarTest::loop_addroll(Calendar *cal, /*SimpleDateFormat *sdf,*/ int times, UCalendarDateFields field, UCalendarDateFields field2, UErrorCode& errorCode) {
1470b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    Calendar *calclone;
1471b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    SimpleDateFormat fmt(UnicodeString("EEE MMM dd yyyy / YYYY'-W'ww-ee"), errorCode);
1472b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    fmt.setCalendar(*cal);
1473b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int i;
1474b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1475b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    for(i = 0; i<times; i++) {
1476b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        calclone = cal->clone();
1477b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UDate start = cal->getTime(errorCode);
1478b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        cal->add(field,1,errorCode);
1479b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (U_FAILURE(errorCode)) { errln("Error in add"); delete calclone; return; }
1480b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        calclone->add(field2,1,errorCode);
1481b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (U_FAILURE(errorCode)) { errln("Error in add"); delete calclone; return; }
1482b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if(cal->getTime(errorCode) != calclone->getTime(errorCode)) {
1483b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            UnicodeString str("FAIL: Results of add differ. "), str2;
1484b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            str += fmt.format(start, str2) + " ";
1485b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            str += UnicodeString("Add(") + fieldName(field) + ", 1) -> " +
1486b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                fmt.format(cal->getTime(errorCode), str2.remove()) + "; ";
1487b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            str += UnicodeString("Add(") + fieldName(field2) + ", 1) -> " +
1488b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                fmt.format(calclone->getTime(errorCode), str2.remove());
1489b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            errln(str);
1490b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            delete calclone;
1491b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            return;
1492b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
1493b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        delete calclone;
1494b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1495b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1496b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    for(i = 0; i<times; i++) {
1497b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        calclone = cal->clone();
1498b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        cal->roll(field,(int32_t)1,errorCode);
1499b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (U_FAILURE(errorCode)) { errln("Error in roll"); delete calclone; return; }
1500b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        calclone->roll(field2,(int32_t)1,errorCode);
1501b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (U_FAILURE(errorCode)) { errln("Error in roll"); delete calclone; return; }
1502b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if(cal->getTime(errorCode) != calclone->getTime(errorCode)) {
1503b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            delete calclone;
1504b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            errln("Results of roll differ!");
1505b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            return;
1506b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
1507b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        delete calclone;
1508b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1509b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
1510b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1511b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// -------------------------------------
1512b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1513b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid
1514b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruCalendarTest::doYEAR_WOYLoop(Calendar *cal, SimpleDateFormat *sdf,
1515b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                                    int32_t times, UErrorCode& errorCode) {
1516b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1517b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString us;
1518b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UDate tst, original;
1519b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    Calendar *tstres = new GregorianCalendar(Locale::getGermany(), errorCode);
1520b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    for(int i=0; i<times; ++i) {
1521b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        sdf->format(Formattable(cal->getTime(errorCode),Formattable::kIsDate), us, errorCode);
1522b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        //logln("expected: "+us);
1523b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (U_FAILURE(errorCode)) { errln("Format error"); return; }
1524b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        tst=sdf->parse(us,errorCode);
1525b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (U_FAILURE(errorCode)) { errln("Parse error"); return; }
1526b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        tstres->clear();
1527b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        tstres->setTime(tst, errorCode);
1528b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        //logln((UnicodeString)"Parsed week of year is "+tstres->get(UCAL_WEEK_OF_YEAR, errorCode));
1529b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (U_FAILURE(errorCode)) { errln("Set time error"); return; }
1530b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        original = cal->getTime(errorCode);
1531b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        us.remove();
1532b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        sdf->format(Formattable(tst,Formattable::kIsDate), us, errorCode);
1533b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        //logln("got: "+us);
1534b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (U_FAILURE(errorCode)) { errln("Get time error"); return; }
1535b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if(original!=tst) {
1536b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            us.remove();
1537b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            sdf->format(Formattable(original, Formattable::kIsDate), us, errorCode);
1538b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            errln("FAIL: Parsed time doesn't match with regular");
1539b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            logln("expected "+us + " " + calToStr(*cal));
1540b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            us.remove();
1541b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            sdf->format(Formattable(tst, Formattable::kIsDate), us, errorCode);
1542b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            logln("got "+us + " " + calToStr(*tstres));
1543b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
1544b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        tstres->clear();
1545b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        tstres->set(UCAL_YEAR_WOY, cal->get(UCAL_YEAR_WOY, errorCode));
1546b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        tstres->set(UCAL_WEEK_OF_YEAR, cal->get(UCAL_WEEK_OF_YEAR, errorCode));
1547b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        tstres->set(UCAL_DOW_LOCAL, cal->get(UCAL_DOW_LOCAL, errorCode));
1548b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if(cal->get(UCAL_YEAR, errorCode) != tstres->get(UCAL_YEAR, errorCode)) {
1549b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            errln("FAIL: Different Year!");
1550b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            logln((UnicodeString)"Expected "+cal->get(UCAL_YEAR, errorCode));
1551b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            logln((UnicodeString)"Got "+tstres->get(UCAL_YEAR, errorCode));
1552b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            return;
1553b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
1554b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if(cal->get(UCAL_DAY_OF_YEAR, errorCode) != tstres->get(UCAL_DAY_OF_YEAR, errorCode)) {
1555b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            errln("FAIL: Different Day Of Year!");
1556b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            logln((UnicodeString)"Expected "+cal->get(UCAL_DAY_OF_YEAR, errorCode));
1557b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            logln((UnicodeString)"Got "+tstres->get(UCAL_DAY_OF_YEAR, errorCode));
1558b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            return;
1559b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
1560b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        //logln(calToStr(*cal));
1561b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        cal->add(UCAL_DATE, 1, errorCode);
1562b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (U_FAILURE(errorCode)) { errln("Add error"); return; }
1563b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        us.remove();
1564b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1565b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete (tstres);
1566b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
1567b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// -------------------------------------
1568b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1569b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid
1570b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruCalendarTest::marchByDelta(Calendar* cal, int32_t delta)
1571b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
1572b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
1573b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    Calendar *cur = (Calendar*) cal->clone();
1574b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int32_t initialDOW = cur->get(UCAL_DAY_OF_WEEK, status);
1575b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (U_FAILURE(status)) { errln("Calendar::get failed"); return; }
1576b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int32_t DOW, newDOW = initialDOW;
1577b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    do {
1578b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UnicodeString str;
1579b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        DOW = newDOW;
1580b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        logln(UnicodeString("DOW = ") + DOW + "  " + dateToString(cur->getTime(status), str));
1581b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (U_FAILURE(status)) { errln("Calendar::getTime failed"); return; }
1582b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        cur->add(UCAL_DAY_OF_WEEK, delta, status);
1583b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (U_FAILURE(status)) { errln("Calendar::add failed"); return; }
1584b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        newDOW = cur->get(UCAL_DAY_OF_WEEK, status);
1585b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (U_FAILURE(status)) { errln("Calendar::get failed"); return; }
1586b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        int32_t expectedDOW = 1 + (DOW + delta - 1) % 7;
1587b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (newDOW != expectedDOW) {
1588b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            errln(UnicodeString("Day of week should be ") + expectedDOW + " instead of " + newDOW +
1589b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                  " on " + dateToString(cur->getTime(status), str));
1590b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if (U_FAILURE(status)) { errln("Calendar::getTime failed"); return; }
1591b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            return;
1592b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
1593b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1594b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    while (newDOW != initialDOW);
1595b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete cur;
1596b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
1597b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1598b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define CHECK(status, msg) \
1599b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (U_FAILURE(status)) { \
16006d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru        errcheckln(status, msg); \
1601b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        return; \
1602b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1603b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1604b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid CalendarTest::TestWOY(void) {
1605b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /*
1606b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      FDW = Mon, MDFW = 4:
1607b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru         Sun Dec 26 1999, WOY 51
1608b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru         Mon Dec 27 1999, WOY 52
1609b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru         Tue Dec 28 1999, WOY 52
1610b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru         Wed Dec 29 1999, WOY 52
1611b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru         Thu Dec 30 1999, WOY 52
1612b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru         Fri Dec 31 1999, WOY 52
1613b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru         Sat Jan 01 2000, WOY 52 ***
1614b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru         Sun Jan 02 2000, WOY 52 ***
1615b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru         Mon Jan 03 2000, WOY 1
1616b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru         Tue Jan 04 2000, WOY 1
1617b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru         Wed Jan 05 2000, WOY 1
1618b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru         Thu Jan 06 2000, WOY 1
1619b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru         Fri Jan 07 2000, WOY 1
1620b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru         Sat Jan 08 2000, WOY 1
1621b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru         Sun Jan 09 2000, WOY 1
1622b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru         Mon Jan 10 2000, WOY 2
1623b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1624b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      FDW = Mon, MDFW = 2:
1625b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru         Sun Dec 26 1999, WOY 52
1626b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru         Mon Dec 27 1999, WOY 1  ***
1627b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru         Tue Dec 28 1999, WOY 1  ***
1628b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru         Wed Dec 29 1999, WOY 1  ***
1629b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru         Thu Dec 30 1999, WOY 1  ***
1630b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru         Fri Dec 31 1999, WOY 1  ***
1631b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru         Sat Jan 01 2000, WOY 1
1632b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru         Sun Jan 02 2000, WOY 1
1633b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru         Mon Jan 03 2000, WOY 2
1634b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru         Tue Jan 04 2000, WOY 2
1635b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru         Wed Jan 05 2000, WOY 2
1636b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru         Thu Jan 06 2000, WOY 2
1637b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru         Fri Jan 07 2000, WOY 2
1638b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru         Sat Jan 08 2000, WOY 2
1639b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru         Sun Jan 09 2000, WOY 2
1640b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru         Mon Jan 10 2000, WOY 3
1641b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    */
1642b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1643b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString str;
1644b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
1645b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int32_t i;
1646b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1647b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    GregorianCalendar cal(status);
1648b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    SimpleDateFormat fmt(UnicodeString("EEE MMM dd yyyy', WOY' w"), status);
164950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    if (failure(status, "Cannot construct calendar/format", TRUE)) return;
1650b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1651b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UCalendarDaysOfWeek fdw = (UCalendarDaysOfWeek) 0;
1652b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1653b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //for (int8_t pass=2; pass<=2; ++pass) {
1654b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    for (int8_t pass=1; pass<=2; ++pass) {
1655b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        switch (pass) {
1656b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        case 1:
1657b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            fdw = UCAL_MONDAY;
1658b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            cal.setFirstDayOfWeek(fdw);
1659b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            cal.setMinimalDaysInFirstWeek(4);
1660b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            fmt.adoptCalendar(cal.clone());
1661b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            break;
1662b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        case 2:
1663b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            fdw = UCAL_MONDAY;
1664b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            cal.setFirstDayOfWeek(fdw);
1665b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            cal.setMinimalDaysInFirstWeek(2);
1666b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            fmt.adoptCalendar(cal.clone());
1667b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            break;
1668b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
1669b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1670b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        //for (i=2; i<=6; ++i) {
1671b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        for (i=0; i<16; ++i) {
1672b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UDate t, t2;
1673b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        int32_t t_y, t_woy, t_dow;
1674b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        cal.clear();
1675b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        cal.set(1999, UCAL_DECEMBER, 26 + i);
1676b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        fmt.format(t = cal.getTime(status), str.remove());
1677b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        CHECK(status, "Fail: getTime failed");
1678b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        logln(UnicodeString("* ") + str);
1679b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        int32_t dow = cal.get(UCAL_DAY_OF_WEEK, status);
1680b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        int32_t woy = cal.get(UCAL_WEEK_OF_YEAR, status);
1681b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        int32_t year = cal.get(UCAL_YEAR, status);
1682b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        int32_t mon = cal.get(UCAL_MONTH, status);
1683b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        logln(calToStr(cal));
1684b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        CHECK(status, "Fail: get failed");
1685b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        int32_t dowLocal = dow - fdw;
1686b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (dowLocal < 0) dowLocal += 7;
1687b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        dowLocal++;
1688b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        int32_t yearWoy = year;
1689b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (mon == UCAL_JANUARY) {
1690b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if (woy >= 52) --yearWoy;
1691b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        } else {
1692b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if (woy == 1) ++yearWoy;
1693b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
1694b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1695b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // Basic fields->time check y/woy/dow
1696b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // Since Y/WOY is ambiguous, we do a check of the fields,
1697b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // not of the specific time.
1698b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        cal.clear();
1699b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        cal.set(UCAL_YEAR, year);
1700b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        cal.set(UCAL_WEEK_OF_YEAR, woy);
1701b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        cal.set(UCAL_DAY_OF_WEEK, dow);
1702b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        t_y = cal.get(UCAL_YEAR, status);
1703b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        t_woy = cal.get(UCAL_WEEK_OF_YEAR, status);
1704b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        t_dow = cal.get(UCAL_DAY_OF_WEEK, status);
1705b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        CHECK(status, "Fail: get failed");
1706b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (t_y != year || t_woy != woy || t_dow != dow) {
1707b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            str = "Fail: y/woy/dow fields->time => ";
1708b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            fmt.format(cal.getTime(status), str);
1709b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            errln(str);
1710b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            logln(calToStr(cal));
1711b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            logln("[get!=set] Y%d!=%d || woy%d!=%d || dow%d!=%d\n",
1712b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                  t_y, year, t_woy, woy, t_dow, dow);
1713b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        } else {
1714b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru          logln("y/woy/dow fields->time OK");
1715b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
1716b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1717b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // Basic fields->time check y/woy/dow_local
1718b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // Since Y/WOY is ambiguous, we do a check of the fields,
1719b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // not of the specific time.
1720b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        cal.clear();
1721b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        cal.set(UCAL_YEAR, year);
1722b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        cal.set(UCAL_WEEK_OF_YEAR, woy);
1723b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        cal.set(UCAL_DOW_LOCAL, dowLocal);
1724b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        t_y = cal.get(UCAL_YEAR, status);
1725b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        t_woy = cal.get(UCAL_WEEK_OF_YEAR, status);
1726b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        t_dow = cal.get(UCAL_DOW_LOCAL, status);
1727b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        CHECK(status, "Fail: get failed");
1728b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (t_y != year || t_woy != woy || t_dow != dowLocal) {
1729b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            str = "Fail: y/woy/dow_local fields->time => ";
1730b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            fmt.format(cal.getTime(status), str);
1731b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            errln(str);
1732b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
1733b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1734b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // Basic fields->time check y_woy/woy/dow
1735b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        cal.clear();
1736b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        cal.set(UCAL_YEAR_WOY, yearWoy);
1737b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        cal.set(UCAL_WEEK_OF_YEAR, woy);
1738b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        cal.set(UCAL_DAY_OF_WEEK, dow);
1739b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        t2 = cal.getTime(status);
1740b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        CHECK(status, "Fail: getTime failed");
1741b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (t != t2) {
1742b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            str = "Fail: y_woy/woy/dow fields->time => ";
1743b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            fmt.format(t2, str);
1744b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            errln(str);
1745b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            logln(calToStr(cal));
1746b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            logln("%.f != %.f\n", t, t2);
1747b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        } else {
1748b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru          logln("y_woy/woy/dow OK");
1749b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
1750b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1751b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // Basic fields->time check y_woy/woy/dow_local
1752b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        cal.clear();
1753b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        cal.set(UCAL_YEAR_WOY, yearWoy);
1754b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        cal.set(UCAL_WEEK_OF_YEAR, woy);
1755b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        cal.set(UCAL_DOW_LOCAL, dowLocal);
1756b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        t2 = cal.getTime(status);
1757b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        CHECK(status, "Fail: getTime failed");
1758b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (t != t2) {
1759b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            str = "Fail: y_woy/woy/dow_local fields->time => ";
1760b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            fmt.format(t2, str);
1761b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            errln(str);
1762b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
1763b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1764b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        logln("Testing DOW_LOCAL.. dow%d\n", dow);
1765b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // Make sure DOW_LOCAL disambiguates over DOW
1766b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        int32_t wrongDow = dow - 3;
1767b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (wrongDow < 1) wrongDow += 7;
1768b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        cal.setTime(t, status);
1769b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        cal.set(UCAL_DAY_OF_WEEK, wrongDow);
1770b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        cal.set(UCAL_DOW_LOCAL, dowLocal);
1771b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        t2 = cal.getTime(status);
1772b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        CHECK(status, "Fail: set/getTime failed");
1773b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (t != t2) {
1774b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            str = "Fail: DOW_LOCAL fields->time => ";
1775b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            fmt.format(t2, str);
1776b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            errln(str);
1777b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            logln(calToStr(cal));
1778b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            logln("%.f :   DOW%d, DOW_LOCAL%d -> %.f\n",
1779b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                  t, wrongDow, dowLocal, t2);
1780b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
1781b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1782b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // Make sure DOW disambiguates over DOW_LOCAL
1783b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        int32_t wrongDowLocal = dowLocal - 3;
1784b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (wrongDowLocal < 1) wrongDowLocal += 7;
1785b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        cal.setTime(t, status);
1786b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        cal.set(UCAL_DOW_LOCAL, wrongDowLocal);
1787b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        cal.set(UCAL_DAY_OF_WEEK, dow);
1788b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        t2 = cal.getTime(status);
1789b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        CHECK(status, "Fail: set/getTime failed");
1790b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (t != t2) {
1791b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            str = "Fail: DOW       fields->time => ";
1792b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            fmt.format(t2, str);
1793b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            errln(str);
1794b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
1795b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1796b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // Make sure YEAR_WOY disambiguates over YEAR
1797b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        cal.setTime(t, status);
1798b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        cal.set(UCAL_YEAR, year - 2);
1799b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        cal.set(UCAL_YEAR_WOY, yearWoy);
1800b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        t2 = cal.getTime(status);
1801b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        CHECK(status, "Fail: set/getTime failed");
1802b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (t != t2) {
1803b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            str = "Fail: YEAR_WOY  fields->time => ";
1804b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            fmt.format(t2, str);
1805b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            errln(str);
1806b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
1807b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1808b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // Make sure YEAR disambiguates over YEAR_WOY
1809b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        cal.setTime(t, status);
1810b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        cal.set(UCAL_YEAR_WOY, yearWoy - 2);
1811b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        cal.set(UCAL_YEAR, year);
1812b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        t2 = cal.getTime(status);
1813b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        CHECK(status, "Fail: set/getTime failed");
1814b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (t != t2) {
1815b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            str = "Fail: YEAR      fields->time => ";
1816b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            fmt.format(t2, str);
1817b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            errln(str);
1818b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
1819b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1820b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1821b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1822b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /*
1823b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      FDW = Mon, MDFW = 4:
1824b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru         Sun Dec 26 1999, WOY 51
1825b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru         Mon Dec 27 1999, WOY 52
1826b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru         Tue Dec 28 1999, WOY 52
1827b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru         Wed Dec 29 1999, WOY 52
1828b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru         Thu Dec 30 1999, WOY 52
1829b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru         Fri Dec 31 1999, WOY 52
1830b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru         Sat Jan 01 2000, WOY 52
1831b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru         Sun Jan 02 2000, WOY 52
1832b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    */
1833b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1834b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // Roll the DOW_LOCAL within week 52
1835b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    for (i=27; i<=33; ++i) {
1836b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        int32_t amount;
1837b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        for (amount=-7; amount<=7; ++amount) {
1838b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            str = "roll(";
1839b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            cal.set(1999, UCAL_DECEMBER, i);
1840b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            UDate t, t2;
1841b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            fmt.format(cal.getTime(status), str);
1842b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            CHECK(status, "Fail: getTime failed");
1843b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            str += UnicodeString(", ") + amount + ") = ";
1844b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1845b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            cal.roll(UCAL_DOW_LOCAL, amount, status);
1846b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            CHECK(status, "Fail: roll failed");
1847b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1848b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            t = cal.getTime(status);
1849b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            int32_t newDom = i + amount;
1850b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            while (newDom < 27) newDom += 7;
1851b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            while (newDom > 33) newDom -= 7;
1852b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            cal.set(1999, UCAL_DECEMBER, newDom);
1853b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            t2 = cal.getTime(status);
1854b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            CHECK(status, "Fail: getTime failed");
1855b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            fmt.format(t, str);
1856b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1857b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if (t != t2) {
1858b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                str.append(", exp ");
1859b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                fmt.format(t2, str);
1860b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                errln(str);
1861b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            } else {
1862b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                logln(str);
1863b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            }
1864b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
1865b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1866b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
1867b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1868b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid CalendarTest::TestYWOY()
1869b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
1870b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru   UnicodeString str;
1871b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru   UErrorCode status = U_ZERO_ERROR;
1872b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1873b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru   GregorianCalendar cal(status);
187450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho   if (failure(status, "construct GregorianCalendar", TRUE)) return;
1875b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1876b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru   cal.setFirstDayOfWeek(UCAL_SUNDAY);
1877b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru   cal.setMinimalDaysInFirstWeek(1);
1878b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1879b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru   logln("Setting:  ywoy=2004, woy=1, dow=MONDAY");
1880b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru   cal.clear();
1881b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru   cal.set(UCAL_YEAR_WOY,2004);
1882b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru   cal.set(UCAL_WEEK_OF_YEAR,1);
1883b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru   cal.set(UCAL_DAY_OF_WEEK, UCAL_MONDAY);
1884b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1885b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru   logln(calToStr(cal));
1886b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru   if(cal.get(UCAL_YEAR, status) != 2003) {
1887b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     errln("year not 2003");
1888b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru   }
1889b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1890b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru   logln("+ setting DOW to THURSDAY");
1891b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru   cal.clear();
1892b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru   cal.set(UCAL_YEAR_WOY,2004);
1893b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru   cal.set(UCAL_WEEK_OF_YEAR,1);
1894b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru   cal.set(UCAL_DAY_OF_WEEK, UCAL_THURSDAY);
1895b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1896b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru   logln(calToStr(cal));
1897b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru   if(cal.get(UCAL_YEAR, status) != 2004) {
1898b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     errln("year not 2004");
1899b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru   }
1900b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1901b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru   logln("+ setting DOW_LOCAL to 1");
1902b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru   cal.clear();
1903b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru   cal.set(UCAL_YEAR_WOY,2004);
1904b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru   cal.set(UCAL_WEEK_OF_YEAR,1);
1905b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru   cal.set(UCAL_DAY_OF_WEEK, UCAL_THURSDAY);
1906b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru   cal.set(UCAL_DOW_LOCAL, 1);
1907b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1908b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru   logln(calToStr(cal));
1909b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru   if(cal.get(UCAL_YEAR, status) != 2003) {
1910b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     errln("year not 2003");
1911b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru   }
1912b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1913b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru   cal.setFirstDayOfWeek(UCAL_MONDAY);
1914b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru   cal.setMinimalDaysInFirstWeek(4);
1915b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru   UDate t = 946713600000.;
1916b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru   cal.setTime(t, status);
1917b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru   cal.set(UCAL_DAY_OF_WEEK, 4);
1918b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru   cal.set(UCAL_DOW_LOCAL, 6);
1919b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru   if(cal.getTime(status) != t) {
1920b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     logln(calToStr(cal));
1921b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     errln("FAIL:  DOW_LOCAL did not take precedence");
1922b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru   }
1923b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1924b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
1925b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1926b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid CalendarTest::TestJD()
1927b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
1928b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  int32_t jd;
1929b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  static const int32_t kEpochStartAsJulianDay = 2440588;
1930b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  UErrorCode status = U_ZERO_ERROR;
1931b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  GregorianCalendar cal(status);
193250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  if (failure(status, "construct GregorianCalendar", TRUE)) return;
1933b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  cal.setTimeZone(*TimeZone::getGMT());
1934b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  cal.clear();
1935b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  jd = cal.get(UCAL_JULIAN_DAY, status);
1936b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  if(jd != kEpochStartAsJulianDay) {
1937b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    errln("Wanted JD of %d at time=0, [epoch 1970] but got %d\n", kEpochStartAsJulianDay, jd);
1938b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  } else {
1939b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    logln("Wanted JD of %d at time=0, [epoch 1970], got %d\n", kEpochStartAsJulianDay, jd);
1940b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  }
1941b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1942b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  cal.setTime(Calendar::getNow(), status);
1943b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  cal.clear();
1944b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  cal.set(UCAL_JULIAN_DAY, kEpochStartAsJulianDay);
1945b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  UDate epochTime = cal.getTime(status);
1946b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  if(epochTime != 0) {
1947b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    errln("Wanted time of 0 at jd=%d, got %.1lf\n", kEpochStartAsJulianDay, epochTime);
1948b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  } else {
1949b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    logln("Wanted time of 0 at jd=%d, got %.1lf\n", kEpochStartAsJulianDay, epochTime);
1950b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  }
1951b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1952b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
1953b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1954b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// make sure the ctestfw utilities are in sync with the Calendar
1955b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid CalendarTest::TestDebug()
1956b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
1957b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru	for(int32_t  t=0;t<=UDBG_ENUM_COUNT;t++) {
1958b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru		int32_t count = udbg_enumCount((UDebugEnumType)t);
1959b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru		if(count == -1) {
1960b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru			logln("enumCount(%d) returned -1", count);
1961b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru			continue;
1962b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru		}
1963b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru	    for(int32_t i=0;i<=count;i++) {
1964b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru	  	  if(t<=UDBG_HIGHEST_CONTIGUOUS_ENUM && i<count) {
1965b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru	  		  if( i!=udbg_enumArrayValue((UDebugEnumType)t, i)) {
1966b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru	  			  errln("FAIL: udbg_enumArrayValue(%d,%d) returned %d, expected %d", t, i, udbg_enumArrayValue((UDebugEnumType)t,i), i);
1967b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru	  		  }
1968b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru	  	  } else {
1969b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru	  		  logln("Testing count+1:");
1970b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru	  	  }
1971b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                  const char *name = udbg_enumName((UDebugEnumType)t,i);
1972b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                  if(name==NULL) {
1973b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru                          if(i==count || t>UDBG_HIGHEST_CONTIGUOUS_ENUM  ) {
1974b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                                logln(" null name - expected.\n");
1975b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                          } else {
1976b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                                errln("FAIL: udbg_enumName(%d,%d) returned NULL", t, i);
1977b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                          }
1978b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                          name = "(null)";
1979b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                  }
1980b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru		  logln("udbg_enumArrayValue(%d,%d) = %s, returned %d", t, i,
1981b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru				  	name, udbg_enumArrayValue((UDebugEnumType)t,i));
1982b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru	  	  logln("udbg_enumString = " + udbg_enumString((UDebugEnumType)t,i));
1983b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru	    }
1984b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru	    if(udbg_enumExpectedCount((UDebugEnumType)t) != count && t<=UDBG_HIGHEST_CONTIGUOUS_ENUM) {
1985b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru	  	  errln("FAIL: udbg_enumExpectedCount(%d): %d, != UCAL_FIELD_COUNT=%d ", t, udbg_enumExpectedCount((UDebugEnumType)t), count);
1986b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru	    } else {
1987b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru	  	  logln("udbg_ucal_fieldCount: %d, UCAL_FIELD_COUNT=udbg_enumCount %d ", udbg_enumExpectedCount((UDebugEnumType)t), count);
1988b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru	    }
1989b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru	}
1990b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
1991b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1992b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1993b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#undef CHECK
1994b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1995b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// List of interesting locales
1996b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruconst char *CalendarTest::testLocaleID(int32_t i)
1997b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
1998b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  switch(i) {
1999b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  case 0: return "he_IL@calendar=hebrew";
2000b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  case 1: return "en_US@calendar=hebrew";
2001b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  case 2: return "fr_FR@calendar=hebrew";
2002b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  case 3: return "fi_FI@calendar=hebrew";
2003b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  case 4: return "nl_NL@calendar=hebrew";
2004b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  case 5: return "hu_HU@calendar=hebrew";
2005b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  case 6: return "nl_BE@currency=MTL;calendar=islamic";
2006b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  case 7: return "th_TH_TRADITIONAL@calendar=gregorian";
2007b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  case 8: return "ar_JO@calendar=islamic-civil";
2008b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  case 9: return "fi_FI@calendar=islamic";
2009b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  case 10: return "fr_CH@calendar=islamic-civil";
2010b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  case 11: return "he_IL@calendar=islamic-civil";
2011b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  case 12: return "hu_HU@calendar=buddhist";
2012b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  case 13: return "hu_HU@calendar=islamic";
2013b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  case 14: return "en_US@calendar=japanese";
2014b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  default: return NULL;
2015b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  }
2016b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
2017b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2018b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruint32_t CalendarTest::testLocaleCount()
2019b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
2020b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  static int32_t gLocaleCount = -1;
2021b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  if(gLocaleCount < 0) {
2022b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int32_t i;
2023b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    for(i=0;testLocaleID(i) != NULL;i++) {
2024b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      ;
2025b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2026b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    gLocaleCount = i;
2027b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  }
2028b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  return gLocaleCount;
2029b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
2030b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2031b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic UDate doMinDateOfCalendar(Calendar* adopt, UBool &isGregorian, UErrorCode& status) {
2032b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  if(U_FAILURE(status)) return 0.0;
2033b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2034b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  adopt->clear();
2035b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  adopt->set(UCAL_EXTENDED_YEAR, adopt->getActualMinimum(UCAL_EXTENDED_YEAR, status));
2036b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  UDate ret = adopt->getTime(status);
203727f654740f2a26ad62a5c155af9199af9e69b889claireho  isGregorian = dynamic_cast<GregorianCalendar*>(adopt) != NULL;
2038b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  delete adopt;
2039b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  return ret;
2040b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
2041b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2042b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruUDate CalendarTest::minDateOfCalendar(const Locale& locale, UBool &isGregorian, UErrorCode& status) {
2043b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  if(U_FAILURE(status)) return 0.0;
2044b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  return doMinDateOfCalendar(Calendar::createInstance(locale, status), isGregorian, status);
2045b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
2046b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2047b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruUDate CalendarTest::minDateOfCalendar(const Calendar& cal, UBool &isGregorian, UErrorCode& status) {
2048b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  if(U_FAILURE(status)) return 0.0;
2049b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  return doMinDateOfCalendar(cal.clone(), isGregorian, status);
2050b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
2051b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2052b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queruvoid CalendarTest::Test6703()
2053b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru{
2054b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
2055b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    Calendar *cal;
2056b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru
2057b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    Locale loc1("en@calendar=fubar");
2058b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    cal = Calendar::createInstance(loc1, status);
205950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    if (failure(status, "Calendar::createInstance", TRUE)) return;
2060b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    delete cal;
2061b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru
2062b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    status = U_ZERO_ERROR;
2063b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    Locale loc2("en");
2064b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    cal = Calendar::createInstance(loc2, status);
2065b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    if (failure(status, "Calendar::createInstance")) return;
2066b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    delete cal;
2067b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru
2068b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    status = U_ZERO_ERROR;
2069b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    Locale loc3("en@calendar=roc");
2070b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    cal = Calendar::createInstance(loc3, status);
2071b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    if (failure(status, "Calendar::createInstance")) return;
2072b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    delete cal;
2073b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru
2074b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    return;
2075b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru}
2076b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru
2077b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queruvoid CalendarTest::Test3785()
2078b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru{
2079b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
208050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    UnicodeString uzone = UNICODE_STRING_SIMPLE("Europe/Paris");
208150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    UnicodeString exp1 = UNICODE_STRING_SIMPLE("Mon 30 Jumada II 1433 AH, 01:47:03");
208250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    UnicodeString exp2 = UNICODE_STRING_SIMPLE("Mon 1 Rajab 1433 AH, 01:47:04");
2083b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru
208450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    LocalUDateFormatPointer df(udat_open(UDAT_NONE, UDAT_NONE, "en@calendar=islamic", uzone.getTerminatedBuffer(),
208550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                                         uzone.length(), NULL, 0, &status));
208650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    if (df.isNull() || U_FAILURE(status)) return;
2087b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru
2088b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    UChar upattern[64];
2089b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    u_uastrcpy(upattern, "EEE d MMMM y G, HH:mm:ss");
209050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    udat_applyPattern(df.getAlias(), FALSE, upattern, u_strlen(upattern));
2091b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru
2092b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    UChar ubuffer[1024];
2093b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    UDate ud0 = 1337557623000.0;
2094b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru
2095b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    status = U_ZERO_ERROR;
209650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    udat_format(df.getAlias(), ud0, ubuffer, 1024, NULL, &status);
209750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    if (U_FAILURE(status)) {
209850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        errln("Error formatting date 1\n");
209950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        return;
210050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    }
2101b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    //printf("formatted: '%s'\n", mkcstr(ubuffer));
2102b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru
210350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    UnicodeString act1(ubuffer);
210450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    if ( act1 != exp1 ) {
210550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        errln("Unexpected result from date 1 format\n");
210650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    }
2107b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    ud0 += 1000.0; // add one second
2108b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru
2109b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    status = U_ZERO_ERROR;
211050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    udat_format(df.getAlias(), ud0, ubuffer, 1024, NULL, &status);
211150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    if (U_FAILURE(status)) {
211250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        errln("Error formatting date 2\n");
211350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        return;
211450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    }
2115b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    //printf("formatted: '%s'\n", mkcstr(ubuffer));
211650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    UnicodeString act2(ubuffer);
211750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    if ( act2 != exp2 ) {
211850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        errln("Unexpected result from date 2 format\n");
211950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    }
2120b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru
2121b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    return;
2122b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru}
2123b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
212450294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehovoid CalendarTest::Test1624() {
212550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    UErrorCode status = U_ZERO_ERROR;
212650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    Locale loc("he_IL@calendar=hebrew");
212750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    HebrewCalendar hc(loc,status);
212850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
212950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    for (int32_t year = 5600; year < 5800; year++ ) {
213050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
213150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        for (int32_t month = HebrewCalendar::TISHRI; month <= HebrewCalendar::ELUL; month++) {
213250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho            // skip the adar 1 month if year is not a leap year
213350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho            if (HebrewCalendar::isLeapYear(year) == FALSE && month == HebrewCalendar::ADAR_1) {
213450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                continue;
213550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho            }
213650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho            int32_t day = 15;
213750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho            hc.set(year,month,day);
213850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho            int32_t dayHC = hc.get(UCAL_DATE,status);
213950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho            int32_t monthHC = hc.get(UCAL_MONTH,status);
214050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho            int32_t yearHC = hc.get(UCAL_YEAR,status);
214150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
214250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho            if (failure(status, "HebrewCalendar.get()", TRUE)) continue;
2143b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
214450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho            if (dayHC != day) {
214550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                errln(" ==> day %d incorrect, should be: %d\n",dayHC,day);
214650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                break;
214750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho            }
214850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho            if (monthHC != month) {
214950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                errln(" ==> month %d incorrect, should be: %d\n",monthHC,month);
215050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                break;
215150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho            }
215250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho            if (yearHC != year) {
215350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                errln(" ==> day %d incorrect, should be: %d\n",yearHC,year);
215450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                break;
215550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho            }
215650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        }
215750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    }
215850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    return;
215950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho}
2160b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2161b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif /* #if !UCONFIG_NO_FORMATTING */
2162b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2163b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru//eof
2164