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