16f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/************************************************************************
26f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * COPYRIGHT:
36f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Copyright (c) 1997-2013, International Business Machines Corporation
46f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * and others. All Rights Reserved.
56f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ************************************************************************/
66f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/utypes.h"
76f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
86f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#if !UCONFIG_NO_FORMATTING
96f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "caltest.h"
116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/dtfmtsym.h"
126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/gregocal.h"
136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/localpointer.h"
146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "hebrwcal.h"
156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/smpdtfmt.h"
166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/simpletz.h"
176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "dbgutil.h"
186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/udat.h"
196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/ustring.h"
206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "cstring.h"
216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/localpointer.h"
226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "islamcal.h"
236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define mkcstr(U) u_austrcpy(calloc(8, u_strlen(U) + 1), U)
256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define TEST_CHECK_STATUS { \
276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if (U_FAILURE(status)) { \
286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        if (status == U_MISSING_RESOURCE_ERROR) { \
296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            dataerrln("%s:%d: Test failure.  status=%s", __FILE__, __LINE__, u_errorName(status)); \
306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        } else { \
316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            errln("%s:%d: Test failure.  status=%s", __FILE__, __LINE__, u_errorName(status)); \
326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        } return;}}
336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define TEST_ASSERT(expr) {if ((expr)==FALSE) {errln("%s:%d: Test failure \n", __FILE__, __LINE__);};}
356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// *****************************************************************************
376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// class CalendarTest
386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// *****************************************************************************
396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUnicodeString CalendarTest::calToStr(const Calendar & cal)
416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{
426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  UnicodeString out;
436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  UErrorCode status = U_ZERO_ERROR;
446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  int i;
456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  UDate d;
466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  for(i = 0;i<UCAL_FIELD_COUNT;i++) {
476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    out += (UnicodeString("") + fieldName((UCalendarDateFields)i) + "=" +  cal.get((UCalendarDateFields)i, status) + UnicodeString(" "));
486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  }
496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  out += "[" + UnicodeString(cal.getType()) + "]";
506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  if(cal.inDaylightTime(status)) {
526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    out += UnicodeString(" (in DST), zone=");
536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  }
546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  else {
556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    out += UnicodeString(", zone=");
566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  }
576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  UnicodeString str2;
596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  out += cal.getTimeZone().getDisplayName(str2);
606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  d = cal.getTime(status);
616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  out += UnicodeString(" :","") + d;
626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  return out;
646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}
656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid CalendarTest::runIndexedTest( int32_t index, UBool exec, const char* &name, char* /*par*/ )
676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{
686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if (exec) logln("TestSuite TestCalendar");
696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    switch (index) {
706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        case 0:
716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            name = "TestDOW943";
726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            if (exec) {
736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                logln("TestDOW943---"); logln("");
746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                TestDOW943();
756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            }
766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            break;
776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        case 1:
786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            name = "TestClonesUnique908";
796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            if (exec) {
806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                logln("TestClonesUnique908---"); logln("");
816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                TestClonesUnique908();
826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            }
836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            break;
846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        case 2:
856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            name = "TestGregorianChange768";
866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            if (exec) {
876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                logln("TestGregorianChange768---"); logln("");
886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                TestGregorianChange768();
896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            }
906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            break;
916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        case 3:
926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            name = "TestDisambiguation765";
936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            if (exec) {
946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                logln("TestDisambiguation765---"); logln("");
956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                TestDisambiguation765();
966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            }
976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            break;
986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        case 4:
996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            name = "TestGMTvsLocal4064654";
1006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            if (exec) {
1016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                logln("TestGMTvsLocal4064654---"); logln("");
1026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                TestGMTvsLocal4064654();
1036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            }
1046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            break;
1056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        case 5:
1066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            name = "TestAddSetOrder621";
1076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            if (exec) {
1086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                logln("TestAddSetOrder621---"); logln("");
1096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                TestAddSetOrder621();
1106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            }
1116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            break;
1126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        case 6:
1136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            name = "TestAdd520";
1146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            if (exec) {
1156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                logln("TestAdd520---"); logln("");
1166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                TestAdd520();
1176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            }
1186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            break;
1196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        case 7:
1206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            name = "TestFieldSet4781";
1216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            if (exec) {
1226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                logln("TestFieldSet4781---"); logln("");
1236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                TestFieldSet4781();
1246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            }
1256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            break;
1266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        case 8:
1276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            name = "TestSerialize337";
1286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            if (exec) {
1296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                logln("TestSerialize337---"); logln("");
1306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            //  TestSerialize337();
1316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            }
1326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            break;
1336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        case 9:
1346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            name = "TestSecondsZero121";
1356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            if (exec) {
1366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                logln("TestSecondsZero121---"); logln("");
1376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                TestSecondsZero121();
1386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            }
1396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            break;
1406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        case 10:
1416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            name = "TestAddSetGet0610";
1426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            if (exec) {
1436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                logln("TestAddSetGet0610---"); logln("");
1446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                TestAddSetGet0610();
1456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            }
1466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            break;
1476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        case 11:
1486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            name = "TestFields060";
1496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            if (exec) {
1506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                logln("TestFields060---"); logln("");
1516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                TestFields060();
1526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            }
1536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            break;
1546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        case 12:
1556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            name = "TestEpochStartFields";
1566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            if (exec) {
1576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                logln("TestEpochStartFields---"); logln("");
1586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                TestEpochStartFields();
1596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            }
1606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            break;
1616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        case 13:
1626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            name = "TestDOWProgression";
1636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            if (exec) {
1646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                logln("TestDOWProgression---"); logln("");
1656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                TestDOWProgression();
1666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            }
1676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            break;
1686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        case 14:
1696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            name = "TestGenericAPI";
1706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            if (exec) {
1716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                logln("TestGenericAPI---"); logln("");
1726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                TestGenericAPI();
1736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            }
1746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            break;
1756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        case 15:
1766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            name = "TestAddRollExtensive";
1776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            if (exec) {
1786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                logln("TestAddRollExtensive---"); logln("");
1796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                TestAddRollExtensive();
1806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            }
1816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            break;
1826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        case 16:
1836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            name = "TestDOW_LOCALandYEAR_WOY";
1846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            if (exec) {
1856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                logln("TestDOW_LOCALandYEAR_WOY---"); logln("");
1866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                TestDOW_LOCALandYEAR_WOY();
1876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            }
1886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            break;
1896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        case 17:
1906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            name = "TestWOY";
1916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            if (exec) {
1926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                logln("TestWOY---"); logln("");
1936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                TestWOY();
1946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            }
1956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            break;
1966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        case 18:
1976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            name = "TestRog";
1986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            if (exec) {
1996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                logln("TestRog---"); logln("");
2006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                TestRog();
2016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            }
2026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            break;
2036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        case 19:
2046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org           name = "TestYWOY";
2056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            if (exec) {
2066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                logln("TestYWOY---"); logln("");
2076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                TestYWOY();
2086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            }
2096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            break;
2106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        case 20:
2116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org          name = "TestJD";
2126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org          if(exec) {
2136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            logln("TestJD---"); logln("");
2146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            TestJD();
2156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org          }
2166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org          break;
2176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        case 21:
2186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org          name = "TestDebug";
2196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org          if(exec) {
2206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            logln("TestDebug---"); logln("");
2216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            TestDebug();
2226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org          }
2236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org          break;
2246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        case 22:
2256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org          name = "Test6703";
2266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org          if(exec) {
2276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            logln("Test6703---"); logln("");
2286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            Test6703();
2296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org          }
2306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org          break;
2316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        case 23:
2326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org          name = "Test3785";
2336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org          if(exec) {
2346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            logln("Test3785---"); logln("");
2356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            Test3785();
2366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org          }
2376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org          break;
2386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        case 24:
2396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org          name = "Test1624";
2406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org          if(exec) {
2416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            logln("Test1624---"); logln("");
2426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            Test1624();
2436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org          }
2446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org          break;
2456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        case 25:
2466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org          name = "TestTimeStamp";
2476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org          if(exec) {
2486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            logln("TestTimeStamp---"); logln("");
2496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            TestTimeStamp();
2506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org          }
2516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org          break;
2526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        case 26:
2536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org          name = "TestISO8601";
2546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org          if(exec) {
2556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            logln("TestISO8601---"); logln("");
2566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            TestISO8601();
2576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org          }
2586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org          break;
2596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        case 27:
2606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org          name = "TestAmbiguousWallTimeAPIs";
2616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org          if(exec) {
2626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            logln("TestAmbiguousWallTimeAPIs---"); logln("");
2636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            TestAmbiguousWallTimeAPIs();
2646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org          }
2656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org          break;
2666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        case 28:
2676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org          name = "TestRepeatedWallTime";
2686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org          if(exec) {
2696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            logln("TestRepeatedWallTime---"); logln("");
2706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            TestRepeatedWallTime();
2716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org          }
2726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org          break;
2736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        case 29:
2746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org          name = "TestSkippedWallTime";
2756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org          if(exec) {
2766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            logln("TestSkippedWallTime---"); logln("");
2776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            TestSkippedWallTime();
2786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org          }
2796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org          break;
2806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        case 30:
2816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org          name = "TestCloneLocale";
2826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org          if(exec) {
2836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            logln("TestCloneLocale---"); logln("");
2846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            TestCloneLocale();
2856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org          }
2866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org          break;
2876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        case 31:
2886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org          name = "TestIslamicUmAlQura";
2896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org          if(exec) {
2906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            logln("TestIslamicUmAlQura---"); logln("");
2916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            TestIslamicUmAlQura();
2926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org          }
2936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org          break;
2946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        case 32:
2956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org          name = "TestIslamicTabularDates";
2966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org          if(exec) {
2976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            logln("TestIslamicTabularDates---"); logln("");
2986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            TestIslamicTabularDates();
2996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org          }
3006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org          break;
3016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        default: name = ""; break;
3026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
3036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}
3046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
3056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// ---------------------------------------------------------------------------------
3066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
3076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUnicodeString CalendarTest::fieldName(UCalendarDateFields f) {
3086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    switch (f) {
3096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define FIELD_NAME_STR(x) case x: return (#x+5)
3106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org      FIELD_NAME_STR( UCAL_ERA );
3116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org      FIELD_NAME_STR( UCAL_YEAR );
3126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org      FIELD_NAME_STR( UCAL_MONTH );
3136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org      FIELD_NAME_STR( UCAL_WEEK_OF_YEAR );
3146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org      FIELD_NAME_STR( UCAL_WEEK_OF_MONTH );
3156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org      FIELD_NAME_STR( UCAL_DATE );
3166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org      FIELD_NAME_STR( UCAL_DAY_OF_YEAR );
3176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org      FIELD_NAME_STR( UCAL_DAY_OF_WEEK );
3186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org      FIELD_NAME_STR( UCAL_DAY_OF_WEEK_IN_MONTH );
3196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org      FIELD_NAME_STR( UCAL_AM_PM );
3206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org      FIELD_NAME_STR( UCAL_HOUR );
3216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org      FIELD_NAME_STR( UCAL_HOUR_OF_DAY );
3226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org      FIELD_NAME_STR( UCAL_MINUTE );
3236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org      FIELD_NAME_STR( UCAL_SECOND );
3246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org      FIELD_NAME_STR( UCAL_MILLISECOND );
3256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org      FIELD_NAME_STR( UCAL_ZONE_OFFSET );
3266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org      FIELD_NAME_STR( UCAL_DST_OFFSET );
3276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org      FIELD_NAME_STR( UCAL_YEAR_WOY );
3286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org      FIELD_NAME_STR( UCAL_DOW_LOCAL );
3296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org      FIELD_NAME_STR( UCAL_EXTENDED_YEAR );
3306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org      FIELD_NAME_STR( UCAL_JULIAN_DAY );
3316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org      FIELD_NAME_STR( UCAL_MILLISECONDS_IN_DAY );
3326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#undef FIELD_NAME_STR
3336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    default:
3346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        return UnicodeString("") + ((int32_t)f);
3356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
3366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}
3376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
3386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/**
3396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Test various API methods for API completeness.
3406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */
3416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid
3426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgCalendarTest::TestGenericAPI()
3436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{
3446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UErrorCode status = U_ZERO_ERROR;
3456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UDate d;
3466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UnicodeString str;
3476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UBool eq = FALSE,b4 = FALSE,af = FALSE;
3486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
3496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UDate when = date(90, UCAL_APRIL, 15);
3506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
3516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UnicodeString tzid("TestZone");
3526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    int32_t tzoffset = 123400;
3536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
3546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    SimpleTimeZone *zone = new SimpleTimeZone(tzoffset, tzid);
3556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    Calendar *cal = Calendar::createInstance(zone->clone(), status);
3566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if (failure(status, "Calendar::createInstance", TRUE)) return;
3576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
3586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if (*zone != cal->getTimeZone()) errln("FAIL: Calendar::getTimeZone failed");
3596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
3606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    Calendar *cal2 = Calendar::createInstance(cal->getTimeZone(), status);
3616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if (failure(status, "Calendar::createInstance")) return;
3626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    cal->setTime(when, status);
3636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    cal2->setTime(when, status);
3646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if (failure(status, "Calendar::setTime")) return;
3656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
3666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if (!(*cal == *cal2)) errln("FAIL: Calendar::operator== failed");
3676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if ((*cal != *cal2))  errln("FAIL: Calendar::operator!= failed");
3686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if (!cal->equals(*cal2, status) ||
3696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        cal->before(*cal2, status) ||
3706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        cal->after(*cal2, status) ||
3716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        U_FAILURE(status)) errln("FAIL: equals/before/after failed");
3726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
3736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    logln(UnicodeString("cal=")  +cal->getTime(status)  + UnicodeString(calToStr(*cal)));
3746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    logln(UnicodeString("cal2=")  +cal2->getTime(status)  + UnicodeString(calToStr(*cal2)));
3756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    logln("cal2->setTime(when+1000)");
3766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    cal2->setTime(when + 1000, status);
3776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    logln(UnicodeString("cal2=")  +cal2->getTime(status)  + UnicodeString(calToStr(*cal2)));
3786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
3796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if (failure(status, "Calendar::setTime")) return;
3806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if (cal->equals(*cal2, status) ||
3816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        cal2->before(*cal, status) ||
3826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        cal->after(*cal2, status) ||
3836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        U_FAILURE(status)) errln("FAIL: equals/before/after failed after setTime(+1000)");
3846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
3856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    logln("cal->roll(UCAL_SECOND)");
3866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    cal->roll(UCAL_SECOND, (UBool) TRUE, status);
3876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    logln(UnicodeString("cal=")  +cal->getTime(status)  + UnicodeString(calToStr(*cal)));
3886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    cal->roll(UCAL_SECOND, (int32_t)0, status);
3896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    logln(UnicodeString("cal=")  +cal->getTime(status)  + UnicodeString(calToStr(*cal)));
3906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if (failure(status, "Calendar::roll")) return;
3916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
3926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if (!(eq=cal->equals(*cal2, status)) ||
3936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        (b4=cal->before(*cal2, status)) ||
3946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        (af=cal->after(*cal2, status)) ||
3956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        U_FAILURE(status)) {
3966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org      errln("FAIL: equals[%c]/before[%c]/after[%c] failed after roll 1 second [should be T/F/F]",
3976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            eq?'T':'F',
3986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            b4?'T':'F',
3996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            af?'T':'F');
4006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org      logln(UnicodeString("cal=")  +cal->getTime(status)  + UnicodeString(calToStr(*cal)));
4016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org      logln(UnicodeString("cal2=")  +cal2->getTime(status)  + UnicodeString(calToStr(*cal2)));
4026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
4036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
4046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    // Roll back to January
4056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    cal->roll(UCAL_MONTH, (int32_t)(1 + UCAL_DECEMBER - cal->get(UCAL_MONTH, status)), status);
4066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if (failure(status, "Calendar::roll")) return;
4076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if (cal->equals(*cal2, status) ||
4086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        cal2->before(*cal, status) ||
4096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        cal->after(*cal2, status) ||
4106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        U_FAILURE(status)) errln("FAIL: equals/before/after failed after rollback to January");
4116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
4126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    TimeZone *z = cal->orphanTimeZone();
4136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if (z->getID(str) != tzid ||
4146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        z->getRawOffset() != tzoffset)
4156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        errln("FAIL: orphanTimeZone failed");
4166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
4176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    int32_t i;
4186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    for (i=0; i<2; ++i)
4196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    {
4206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        UBool lenient = ( i > 0 );
4216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        cal->setLenient(lenient);
4226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        if (lenient != cal->isLenient()) errln("FAIL: setLenient/isLenient failed");
4236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        // Later: Check for lenient behavior
4246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
4256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
4266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    for (i=UCAL_SUNDAY; i<=UCAL_SATURDAY; ++i)
4276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    {
4286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        cal->setFirstDayOfWeek((UCalendarDaysOfWeek)i);
4296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        if (cal->getFirstDayOfWeek() != i) errln("FAIL: set/getFirstDayOfWeek failed");
4306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        UErrorCode aStatus = U_ZERO_ERROR;
4316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        if (cal->getFirstDayOfWeek(aStatus) != i || U_FAILURE(aStatus)) errln("FAIL: getFirstDayOfWeek(status) failed");
4326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
4336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
4346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    for (i=1; i<=7; ++i)
4356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    {
4366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        cal->setMinimalDaysInFirstWeek((uint8_t)i);
4376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        if (cal->getMinimalDaysInFirstWeek() != i) errln("FAIL: set/getFirstDayOfWeek failed");
4386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
4396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
4406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    for (i=0; i<UCAL_FIELD_COUNT; ++i)
4416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    {
4426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        if (cal->getMinimum((UCalendarDateFields)i) > cal->getGreatestMinimum((UCalendarDateFields)i))
4436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            errln(UnicodeString("FAIL: getMinimum larger than getGreatestMinimum for field ") + i);
4446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        if (cal->getLeastMaximum((UCalendarDateFields)i) > cal->getMaximum((UCalendarDateFields)i))
4456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            errln(UnicodeString("FAIL: getLeastMaximum larger than getMaximum for field ") + i);
4466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        if (cal->getMinimum((UCalendarDateFields)i) >= cal->getMaximum((UCalendarDateFields)i))
4476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            errln(UnicodeString("FAIL: getMinimum not less than getMaximum for field ") + i);
4486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
4496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
4506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    cal->adoptTimeZone(TimeZone::createDefault());
4516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    cal->clear();
4526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    cal->set(1984, 5, 24);
4536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if (cal->getTime(status) != date(84, 5, 24) || U_FAILURE(status))
4546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        errln("FAIL: Calendar::set(3 args) failed");
4556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
4566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    cal->clear();
4576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    cal->set(1985, 3, 2, 11, 49);
4586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if (cal->getTime(status) != date(85, 3, 2, 11, 49) || U_FAILURE(status))
4596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        errln("FAIL: Calendar::set(5 args) failed");
4606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
4616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    cal->clear();
4626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    cal->set(1995, 9, 12, 1, 39, 55);
4636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if (cal->getTime(status) != date(95, 9, 12, 1, 39, 55) || U_FAILURE(status))
4646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        errln("FAIL: Calendar::set(6 args) failed");
4656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
4666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    cal->getTime(status);
4676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if (failure(status, "Calendar::getTime")) return;
4686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    for (i=0; i<UCAL_FIELD_COUNT; ++i)
4696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    {
4706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        switch(i) {
4716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            case UCAL_YEAR: case UCAL_MONTH: case UCAL_DATE:
4726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            case UCAL_HOUR_OF_DAY: case UCAL_MINUTE: case UCAL_SECOND:
4736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            case UCAL_EXTENDED_YEAR:
4746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org              if (!cal->isSet((UCalendarDateFields)i)) errln("FAIL: Calendar::isSet F, should be T " + fieldName((UCalendarDateFields)i));
4756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                break;
4766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            default:
4776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org              if (cal->isSet((UCalendarDateFields)i)) errln("FAIL: Calendar::isSet = T, should be F  " + fieldName((UCalendarDateFields)i));
4786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        }
4796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        cal->clear((UCalendarDateFields)i);
4806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        if (cal->isSet((UCalendarDateFields)i)) errln("FAIL: Calendar::clear/isSet failed " + fieldName((UCalendarDateFields)i));
4816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
4826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
4836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if(cal->getActualMinimum(Calendar::SECOND, status) != 0){
4846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        errln("Calendar is suppose to return 0 for getActualMinimum");
4856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
4866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
4876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    Calendar *cal3 = Calendar::createInstance(status);
4886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    cal3->roll(Calendar::SECOND, (int32_t)0, status);
4896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if (failure(status, "Calendar::roll(EDateFields, int32_t, UErrorCode)")) return;
4906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
4916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    delete cal;
4926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    delete cal2;
4936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    delete cal3;
4946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
4956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    int32_t count;
4966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    const Locale* loc = Calendar::getAvailableLocales(count);
4976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if (count < 1 || loc == 0)
4986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    {
4996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        dataerrln("FAIL: getAvailableLocales failed");
5006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
5016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    else
5026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    {
5036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        for (i=0; i<count; ++i)
5046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        {
5056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            cal = Calendar::createInstance(loc[i], status);
5066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            if (failure(status, "Calendar::createInstance")) return;
5076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            delete cal;
5086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        }
5096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
5106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
5116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    cal = Calendar::createInstance(TimeZone::createDefault(), Locale::getEnglish(), status);
5126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if (failure(status, "Calendar::createInstance")) return;
5136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    delete cal;
5146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
5156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    cal = Calendar::createInstance(*zone, Locale::getEnglish(), status);
5166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if (failure(status, "Calendar::createInstance")) return;
5176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    delete cal;
5186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
5196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    GregorianCalendar *gc = new GregorianCalendar(*zone, status);
5206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if (failure(status, "new GregorianCalendar")) return;
5216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    delete gc;
5226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
5236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    gc = new GregorianCalendar(Locale::getEnglish(), status);
5246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if (failure(status, "new GregorianCalendar")) return;
5256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    delete gc;
5266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
5276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    gc = new GregorianCalendar(Locale::getEnglish(), status);
5286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    delete gc;
5296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
5306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    gc = new GregorianCalendar(*zone, Locale::getEnglish(), status);
5316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if (failure(status, "new GregorianCalendar")) return;
5326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    delete gc;
5336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
5346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    gc = new GregorianCalendar(zone, status);
5356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if (failure(status, "new GregorianCalendar")) return;
5366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    delete gc;
5376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
5386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    gc = new GregorianCalendar(1998, 10, 14, 21, 43, status);
5396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if (gc->getTime(status) != (d =date(98, 10, 14, 21, 43) )|| U_FAILURE(status))
5406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org      errln("FAIL: new GregorianCalendar(ymdhm) failed with " + UnicodeString(u_errorName(status)) + ",  cal="  + gc->getTime(status)  + UnicodeString(calToStr(*gc)) + ", d=" + d);
5416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    else
5426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org      logln(UnicodeString("GOOD: cal=")  +gc->getTime(status)  + UnicodeString(calToStr(*gc)) + ", d=" + d);
5436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    delete gc;
5446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
5456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    gc = new GregorianCalendar(1998, 10, 14, 21, 43, 55, status);
5466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if (gc->getTime(status) != (d=date(98, 10, 14, 21, 43, 55)) || U_FAILURE(status))
5476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org      errln("FAIL: new GregorianCalendar(ymdhms) failed with " + UnicodeString(u_errorName(status)));
5486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
5496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    GregorianCalendar gc2(Locale::getEnglish(), status);
5506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if (failure(status, "new GregorianCalendar")) return;
5516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    gc2 = *gc;
5526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if (gc2 != *gc || !(gc2 == *gc)) errln("FAIL: GregorianCalendar assignment/operator==/operator!= failed");
5536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    delete gc;
5546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    delete z;
5556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
5566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /* Code coverage for Calendar class. */
5576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    cal = Calendar::createInstance(status);
5586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if (failure(status, "Calendar::createInstance")) {
5596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        return;
5606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }else {
5616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        ((Calendar *)cal)->roll(UCAL_HOUR, (int32_t)100, status);
5626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        ((Calendar *)cal)->clear(UCAL_HOUR);
5636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#if !UCONFIG_NO_SERVICE
5646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        URegistryKey key = cal->registerFactory(NULL, status);
5656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        cal->unregister(key, status);
5666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif
5676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
5686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    delete cal;
5696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
5706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    status = U_ZERO_ERROR;
5716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    cal = Calendar::createInstance(Locale("he_IL@calendar=hebrew"), status);
5726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if (failure(status, "Calendar::createInstance")) {
5736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        return;
5746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    } else {
5756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        cal->roll(Calendar::MONTH, (int32_t)100, status);
5766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
5776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
5786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    LocalPointer<StringEnumeration> values(
5796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        Calendar::getKeywordValuesForLocale("calendar", Locale("he"), FALSE, status));
5806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if (values.isNull() || U_FAILURE(status)) {
5816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        dataerrln("FAIL: Calendar::getKeywordValuesForLocale(he): %s", u_errorName(status));
5826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    } else {
5836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        UBool containsHebrew = FALSE;
5846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        const char *charValue;
5856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        int32_t valueLength;
5866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        while ((charValue = values->next(&valueLength, status)) != NULL) {
5876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            if (valueLength == 6 && strcmp(charValue, "hebrew") == 0) {
5886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                containsHebrew = TRUE;
5896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            }
5906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        }
5916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        if (!containsHebrew) {
5926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            errln("Calendar::getKeywordValuesForLocale(he)->next() does not contain \"hebrew\"");
5936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        }
5946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
5956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        values->reset(status);
5966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        containsHebrew = FALSE;
5976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        UnicodeString hebrew = UNICODE_STRING_SIMPLE("hebrew");
5986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        const UChar *ucharValue;
5996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        while ((ucharValue = values->unext(&valueLength, status)) != NULL) {
6006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            UnicodeString value(FALSE, ucharValue, valueLength);
6016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            if (value == hebrew) {
6026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                containsHebrew = TRUE;
6036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            }
6046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        }
6056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        if (!containsHebrew) {
6066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            errln("Calendar::getKeywordValuesForLocale(he)->unext() does not contain \"hebrew\"");
6076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        }
6086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
6096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        values->reset(status);
6106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        containsHebrew = FALSE;
6116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        const UnicodeString *stringValue;
6126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        while ((stringValue = values->snext(status)) != NULL) {
6136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            if (*stringValue == hebrew) {
6146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                containsHebrew = TRUE;
6156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            }
6166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        }
6176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        if (!containsHebrew) {
6186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            errln("Calendar::getKeywordValuesForLocale(he)->snext() does not contain \"hebrew\"");
6196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        }
6206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
6216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    delete cal;
6226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}
6236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
6246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// -------------------------------------
6256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
6266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/**
6276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * This test confirms the correct behavior of add when incrementing
6286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * through subsequent days.
6296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */
6306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid
6316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgCalendarTest::TestRog()
6326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{
6336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UErrorCode status = U_ZERO_ERROR;
6346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    GregorianCalendar* gc = new GregorianCalendar(status);
6356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if (failure(status, "new GregorianCalendar", TRUE)) return;
6366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    int32_t year = 1997, month = UCAL_APRIL, date = 1;
6376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    gc->set(year, month, date);
6386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    gc->set(UCAL_HOUR_OF_DAY, 23);
6396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    gc->set(UCAL_MINUTE, 0);
6406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    gc->set(UCAL_SECOND, 0);
6416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    gc->set(UCAL_MILLISECOND, 0);
6426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    for (int32_t i = 0; i < 9; i++, gc->add(UCAL_DATE, 1, status)) {
6436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        if (U_FAILURE(status)) { errln("Calendar::add failed"); return; }
6446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        if (gc->get(UCAL_YEAR, status) != year ||
6456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            gc->get(UCAL_MONTH, status) != month ||
6466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            gc->get(UCAL_DATE, status) != (date + i)) errln("FAIL: Date wrong");
6476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        if (U_FAILURE(status)) { errln("Calendar::get failed"); return; }
6486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
6496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    delete gc;
6506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}
6516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
6526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// -------------------------------------
6536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
6546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/**
6556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Test the handling of the day of the week, checking for correctness and
6566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * for correct minimum and maximum values.
6576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */
6586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid
6596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgCalendarTest::TestDOW943()
6606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{
6616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    dowTest(FALSE);
6626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    dowTest(TRUE);
6636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}
6646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
6656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid CalendarTest::dowTest(UBool lenient)
6666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{
6676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UErrorCode status = U_ZERO_ERROR;
6686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    GregorianCalendar* cal = new GregorianCalendar(status);
6696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if (failure(status, "new GregorianCalendar", TRUE)) return;
6706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    logln("cal - Aug 12, 1997\n");
6716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    cal->set(1997, UCAL_AUGUST, 12);
6726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    cal->getTime(status);
6736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if (U_FAILURE(status)) { errln("Calendar::getTime failed"); return; }
6746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    logln((lenient?UnicodeString("LENIENT0: "):UnicodeString("nonlenient0: ")) + UnicodeString(calToStr(*cal)));
6756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    cal->setLenient(lenient);
6766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    logln("cal - Dec 1, 1996\n");
6776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    cal->set(1996, UCAL_DECEMBER, 1);
6786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    logln((lenient?UnicodeString("LENIENT: "):UnicodeString("nonlenient: ")) + UnicodeString(calToStr(*cal)));
6796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    int32_t dow = cal->get(UCAL_DAY_OF_WEEK, status);
6806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if (U_FAILURE(status)) { errln("Calendar::get failed [%s]", u_errorName(status)); return; }
6816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    int32_t min = cal->getMinimum(UCAL_DAY_OF_WEEK);
6826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    int32_t max = cal->getMaximum(UCAL_DAY_OF_WEEK);
6836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if (dow < min ||
6846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        dow > max) errln(UnicodeString("FAIL: Day of week ") + (int32_t)dow + " out of range");
6856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if (dow != UCAL_SUNDAY) errln("FAIL: Day of week should be SUNDAY[%d] not %d", UCAL_SUNDAY, dow);
6866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if (min != UCAL_SUNDAY ||
6876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        max != UCAL_SATURDAY) errln("FAIL: Min/max bad");
6886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    delete cal;
6896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}
6906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
6916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// -------------------------------------
6926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
6936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/**
6946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Confirm that cloned Calendar objects do not inadvertently share substructures.
6956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */
6966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid
6976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgCalendarTest::TestClonesUnique908()
6986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{
6996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UErrorCode status = U_ZERO_ERROR;
7006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    Calendar *c = Calendar::createInstance(status);
7016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if (failure(status, "Calendar::createInstance", TRUE)) return;
7026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    Calendar *d = (Calendar*) c->clone();
7036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    c->set(UCAL_MILLISECOND, 123);
7046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    d->set(UCAL_MILLISECOND, 456);
7056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if (c->get(UCAL_MILLISECOND, status) != 123 ||
7066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        d->get(UCAL_MILLISECOND, status) != 456) {
7076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        errln("FAIL: Clones share fields");
7086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
7096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if (U_FAILURE(status)) { errln("Calendar::get failed"); return; }
7106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    delete c;
7116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    delete d;
7126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}
7136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
7146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// -------------------------------------
7156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
7166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/**
7176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Confirm that the Gregorian cutoff value works as advertised.
7186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */
7196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid
7206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgCalendarTest::TestGregorianChange768()
7216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{
7226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UBool b;
7236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UErrorCode status = U_ZERO_ERROR;
7246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UnicodeString str;
7256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    GregorianCalendar* c = new GregorianCalendar(status);
7266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if (failure(status, "new GregorianCalendar", TRUE)) return;
7276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    logln(UnicodeString("With cutoff ") + dateToString(c->getGregorianChange(), str));
7286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    b = c->isLeapYear(1800);
7296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    logln(UnicodeString(" isLeapYear(1800) = ") + (b ? "true" : "false"));
7306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    logln(UnicodeString(" (should be FALSE)"));
7316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if (b) errln("FAIL");
7326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    c->setGregorianChange(date(0, 0, 1), status);
7336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if (U_FAILURE(status)) { errln("GregorianCalendar::setGregorianChange failed"); return; }
7346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    logln(UnicodeString("With cutoff ") + dateToString(c->getGregorianChange(), str));
7356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    b = c->isLeapYear(1800);
7366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    logln(UnicodeString(" isLeapYear(1800) = ") + (b ? "true" : "false"));
7376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    logln(UnicodeString(" (should be TRUE)"));
7386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if (!b) errln("FAIL");
7396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    delete c;
7406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}
7416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
7426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// -------------------------------------
7436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
7446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/**
7456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Confirm the functioning of the field disambiguation algorithm.
7466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */
7476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid
7486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgCalendarTest::TestDisambiguation765()
7496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{
7506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UErrorCode status = U_ZERO_ERROR;
7516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    Calendar *c = Calendar::createInstance("en_US", status);
7526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if (failure(status, "Calendar::createInstance", TRUE)) return;
7536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    c->setLenient(FALSE);
7546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    c->clear();
7556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    c->set(UCAL_YEAR, 1997);
7566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    c->set(UCAL_MONTH, UCAL_JUNE);
7576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    c->set(UCAL_DATE, 3);
7586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    verify765("1997 third day of June = ", c, 1997, UCAL_JUNE, 3);
7596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    c->clear();
7606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    c->set(UCAL_YEAR, 1997);
7616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    c->set(UCAL_DAY_OF_WEEK, UCAL_TUESDAY);
7626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    c->set(UCAL_MONTH, UCAL_JUNE);
7636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    c->set(UCAL_DAY_OF_WEEK_IN_MONTH, 1);
7646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    verify765("1997 first Tuesday in June = ", c, 1997, UCAL_JUNE, 3);
7656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    c->clear();
7666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    c->set(UCAL_YEAR, 1997);
7676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    c->set(UCAL_DAY_OF_WEEK, UCAL_TUESDAY);
7686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    c->set(UCAL_MONTH, UCAL_JUNE);
7696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    c->set(UCAL_DAY_OF_WEEK_IN_MONTH, - 1);
7706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    verify765("1997 last Tuesday in June = ", c, 1997, UCAL_JUNE, 24);
7716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
7726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    status = U_ZERO_ERROR;
7736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    c->clear();
7746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    c->set(UCAL_YEAR, 1997);
7756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    c->set(UCAL_DAY_OF_WEEK, UCAL_TUESDAY);
7766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    c->set(UCAL_MONTH, UCAL_JUNE);
7776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    c->set(UCAL_DAY_OF_WEEK_IN_MONTH, 0);
7786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    c->getTime(status);
7796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    verify765("1997 zero-th Tuesday in June = ", status);
7806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
7816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    c->clear();
7826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    c->set(UCAL_YEAR, 1997);
7836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    c->set(UCAL_DAY_OF_WEEK, UCAL_TUESDAY);
7846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    c->set(UCAL_MONTH, UCAL_JUNE);
7856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    c->set(UCAL_WEEK_OF_MONTH, 1);
7866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    verify765("1997 Tuesday in week 1 of June = ", c, 1997, UCAL_JUNE, 3);
7876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    c->clear();
7886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    c->set(UCAL_YEAR, 1997);
7896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    c->set(UCAL_DAY_OF_WEEK, UCAL_TUESDAY);
7906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    c->set(UCAL_MONTH, UCAL_JUNE);
7916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    c->set(UCAL_WEEK_OF_MONTH, 5);
7926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    verify765("1997 Tuesday in week 5 of June = ", c, 1997, UCAL_JULY, 1);
7936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
7946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    status = U_ZERO_ERROR;
7956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    c->clear();
7966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    c->set(UCAL_YEAR, 1997);
7976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    c->set(UCAL_DAY_OF_WEEK, UCAL_TUESDAY);
7986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    c->set(UCAL_MONTH, UCAL_JUNE);
7996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    c->set(UCAL_WEEK_OF_MONTH, 0);
8006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    c->setMinimalDaysInFirstWeek(1);
8016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    c->getTime(status);
8026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    verify765("1997 Tuesday in week 0 of June = ", status);
8036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
8046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /* Note: The following test used to expect YEAR 1997, WOY 1 to
8056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * resolve to a date in Dec 1996; that is, to behave as if
8066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * YEAR_WOY were 1997.  With the addition of a new explicit
8076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * YEAR_WOY field, YEAR_WOY must itself be set if that is what is
8086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * desired.  Using YEAR in combination with WOY is ambiguous, and
8096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * results in the first WOY/DOW day of the year satisfying the
8106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * given fields (there may be up to two such days). In this case,
8116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * it propertly resolves to Tue Dec 30 1997, which has a WOY value
8126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * of 1 (for YEAR_WOY 1998) and a DOW of Tuesday, and falls in the
8136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * _calendar_ year 1997, as specified. - aliu */
8146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    c->clear();
8156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    c->set(UCAL_YEAR_WOY, 1997); // aliu
8166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    c->set(UCAL_DAY_OF_WEEK, UCAL_TUESDAY);
8176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    c->set(UCAL_WEEK_OF_YEAR, 1);
8186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    verify765("1997 Tuesday in week 1 of yearWOY = ", c, 1996, UCAL_DECEMBER, 31);
8196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    c->clear(); // - add test for YEAR
8206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    c->setMinimalDaysInFirstWeek(1);
8216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    c->set(UCAL_YEAR, 1997);
8226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    c->set(UCAL_DAY_OF_WEEK, UCAL_TUESDAY);
8236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    c->set(UCAL_WEEK_OF_YEAR, 1);
8246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    verify765("1997 Tuesday in week 1 of year = ", c, 1997, UCAL_DECEMBER, 30);
8256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    c->clear();
8266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    c->set(UCAL_YEAR, 1997);
8276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    c->set(UCAL_DAY_OF_WEEK, UCAL_TUESDAY);
8286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    c->set(UCAL_WEEK_OF_YEAR, 10);
8296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    verify765("1997 Tuesday in week 10 of year = ", c, 1997, UCAL_MARCH, 4);
8306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    //try {
8316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
8326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    // {sfb} week 0 is no longer a valid week of year
8336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /*c->clear();
8346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    c->set(Calendar::YEAR, 1997);
8356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    c->set(Calendar::DAY_OF_WEEK, Calendar::TUESDAY);
8366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    //c->set(Calendar::WEEK_OF_YEAR, 0);
8376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    c->set(Calendar::WEEK_OF_YEAR, 1);
8386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    verify765("1997 Tuesday in week 0 of year = ", c, 1996, Calendar::DECEMBER, 24);*/
8396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
8406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    //}
8416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    //catch(IllegalArgumentException ex) {
8426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    //    errln("FAIL: Exception seen:");
8436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    //    ex.printStackTrace(log);
8446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    //}
8456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    delete c;
8466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}
8476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
8486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// -------------------------------------
8496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
8506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid
8516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgCalendarTest::verify765(const UnicodeString& msg, Calendar* c, int32_t year, int32_t month, int32_t day)
8526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{
8536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UnicodeString str;
8546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UErrorCode status = U_ZERO_ERROR;
8556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    int32_t y = c->get(UCAL_YEAR, status);
8566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    int32_t m = c->get(UCAL_MONTH, status);
8576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    int32_t d = c->get(UCAL_DATE, status);
8586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if ( y == year &&
8596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org         m == month &&
8606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org         d == day) {
8616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        if (U_FAILURE(status)) { errln("FAIL: Calendar::get failed"); return; }
8626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        logln("PASS: " + msg + dateToString(c->getTime(status), str));
8636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        if (U_FAILURE(status)) { errln("Calendar::getTime failed"); return; }
8646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
8656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    else {
8666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        errln("FAIL: " + msg + dateToString(c->getTime(status), str) + "; expected " + (int32_t)year + "/" + (int32_t)(month + 1) + "/" + (int32_t)day +
8676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            "; got " + (int32_t)y + "/" + (int32_t)(m + 1) + "/" + (int32_t)d + " for Locale: " + c->getLocaleID(ULOC_ACTUAL_LOCALE,status));
8686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        if (U_FAILURE(status)) { errln("Calendar::getTime failed"); return; }
8696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
8706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}
8716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
8726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// -------------------------------------
8736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
8746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid
8756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgCalendarTest::verify765(const UnicodeString& msg/*, IllegalArgumentException e*/, UErrorCode status)
8766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{
8776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if (status != U_ILLEGAL_ARGUMENT_ERROR) errln("FAIL: No IllegalArgumentException for " + msg);
8786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    else logln("PASS: " + msg + "IllegalArgument as expected");
8796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}
8806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
8816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// -------------------------------------
8826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
8836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/**
8846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Confirm that the offset between local time and GMT behaves as expected.
8856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */
8866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid
8876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgCalendarTest::TestGMTvsLocal4064654()
8886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{
8896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    test4064654(1997, 1, 1, 12, 0, 0);
8906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    test4064654(1997, 4, 16, 18, 30, 0);
8916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}
8926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
8936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// -------------------------------------
8946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
8956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid
8966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgCalendarTest::test4064654(int32_t yr, int32_t mo, int32_t dt, int32_t hr, int32_t mn, int32_t sc)
8976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{
8986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UDate date;
8996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UErrorCode status = U_ZERO_ERROR;
9006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UnicodeString str;
9016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    Calendar *gmtcal = Calendar::createInstance(status);
9026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if (failure(status, "Calendar::createInstance", TRUE)) return;
9036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    gmtcal->adoptTimeZone(TimeZone::createTimeZone("Africa/Casablanca"));
9046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    gmtcal->set(yr, mo - 1, dt, hr, mn, sc);
9056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    gmtcal->set(UCAL_MILLISECOND, 0);
9066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    date = gmtcal->getTime(status);
9076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if (U_FAILURE(status)) { errln("Calendar::getTime failed"); return; }
9086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    logln("date = " + dateToString(date, str));
9096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    Calendar *cal = Calendar::createInstance(status);
9106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if (U_FAILURE(status)) { errln("Calendar::createInstance failed"); return; }
9116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    cal->setTime(date, status);
9126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if (U_FAILURE(status)) { errln("Calendar::setTime failed"); return; }
9136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    int32_t offset = cal->getTimeZone().getOffset((uint8_t)cal->get(UCAL_ERA, status),
9146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                                                  cal->get(UCAL_YEAR, status),
9156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                                                  cal->get(UCAL_MONTH, status),
9166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                                                  cal->get(UCAL_DATE, status),
9176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                                                  (uint8_t)cal->get(UCAL_DAY_OF_WEEK, status),
9186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                                                  cal->get(UCAL_MILLISECOND, status), status);
9196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if (U_FAILURE(status)) { errln("Calendar::get failed"); return; }
9206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    logln("offset for " + dateToString(date, str) + "= " + (offset / 1000 / 60 / 60.0) + "hr");
9216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    int32_t utc = ((cal->get(UCAL_HOUR_OF_DAY, status) * 60 +
9226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                    cal->get(UCAL_MINUTE, status)) * 60 +
9236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                   cal->get(UCAL_SECOND, status)) * 1000 +
9246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        cal->get(UCAL_MILLISECOND, status) - offset;
9256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if (U_FAILURE(status)) { errln("Calendar::get failed"); return; }
9266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    int32_t expected = ((hr * 60 + mn) * 60 + sc) * 1000;
9276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if (utc != expected) errln(UnicodeString("FAIL: Discrepancy of ") + (utc - expected) +
9286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                               " millis = " + ((utc - expected) / 1000 / 60 / 60.0) + " hr");
9296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    delete gmtcal;
9306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    delete cal;
9316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}
9326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
9336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// -------------------------------------
9346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
9356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/**
9366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * The operations of adding and setting should not exhibit pathological
9376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * dependence on the order of operations.  This test checks for this.
9386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */
9396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid
9406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgCalendarTest::TestAddSetOrder621()
9416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{
9426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UDate d = date(97, 4, 14, 13, 23, 45);
9436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UErrorCode status = U_ZERO_ERROR;
9446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    Calendar *cal = Calendar::createInstance(status);
9456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if (failure(status, "Calendar::createInstance", TRUE)) return;
9466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
9476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    cal->setTime(d, status);
9486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if (U_FAILURE(status)) {
9496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        errln("Calendar::setTime failed");
9506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        delete cal;
9516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        return;
9526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
9536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    cal->add(UCAL_DATE, - 5, status);
9546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if (U_FAILURE(status)) {
9556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        errln("Calendar::add failed");
9566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        delete cal;
9576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        return;
9586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
9596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    cal->set(UCAL_HOUR_OF_DAY, 0);
9606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    cal->set(UCAL_MINUTE, 0);
9616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    cal->set(UCAL_SECOND, 0);
9626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UnicodeString s;
9636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    dateToString(cal->getTime(status), s);
9646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if (U_FAILURE(status)) {
9656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        errln("Calendar::getTime failed");
9666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        delete cal;
9676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        return;
9686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
9696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    delete cal;
9706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
9716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    cal = Calendar::createInstance(status);
9726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if (U_FAILURE(status)) {
9736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        errln("Calendar::createInstance failed");
9746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        delete cal;
9756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        return;
9766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
9776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    cal->setTime(d, status);
9786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if (U_FAILURE(status)) {
9796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        errln("Calendar::setTime failed");
9806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        delete cal;
9816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        return;
9826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
9836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    cal->set(UCAL_HOUR_OF_DAY, 0);
9846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    cal->set(UCAL_MINUTE, 0);
9856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    cal->set(UCAL_SECOND, 0);
9866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    cal->add(UCAL_DATE, - 5, status);
9876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if (U_FAILURE(status)) {
9886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        errln("Calendar::add failed");
9896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        delete cal;
9906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        return;
9916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
9926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UnicodeString s2;
9936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    dateToString(cal->getTime(status), s2);
9946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if (U_FAILURE(status)) {
9956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        errln("Calendar::getTime failed");
9966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        delete cal;
9976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        return;
9986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
9996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if (s == s2)
10006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        logln("Pass: " + s + " == " + s2);
10016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    else
10026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        errln("FAIL: " + s + " != " + s2);
10036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    delete cal;
10046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}
10056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
10066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// -------------------------------------
10076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
10086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/**
10096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Confirm that adding to various fields works.
10106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */
10116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid
10126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgCalendarTest::TestAdd520()
10136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{
10146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    int32_t y = 1997, m = UCAL_FEBRUARY, d = 1;
10156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UErrorCode status = U_ZERO_ERROR;
10166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    GregorianCalendar *temp = new GregorianCalendar(y, m, d, status);
10176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if (failure(status, "new GregorianCalendar", TRUE)) return;
10186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    check520(temp, y, m, d);
10196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    temp->add(UCAL_YEAR, 1, status);
10206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if (U_FAILURE(status)) { errln("Calendar::add failed"); return; }
10216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    y++;
10226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    check520(temp, y, m, d);
10236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    temp->add(UCAL_MONTH, 1, status);
10246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if (U_FAILURE(status)) { errln("Calendar::add failed"); return; }
10256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    m++;
10266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    check520(temp, y, m, d);
10276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    temp->add(UCAL_DATE, 1, status);
10286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if (U_FAILURE(status)) { errln("Calendar::add failed"); return; }
10296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    d++;
10306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    check520(temp, y, m, d);
10316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    temp->add(UCAL_DATE, 2, status);
10326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if (U_FAILURE(status)) { errln("Calendar::add failed"); return; }
10336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    d += 2;
10346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    check520(temp, y, m, d);
10356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    temp->add(UCAL_DATE, 28, status);
10366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if (U_FAILURE(status)) { errln("Calendar::add failed"); return; }
10376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    d = 1;++m;
10386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    check520(temp, y, m, d);
10396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    delete temp;
10406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}
10416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
10426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// -------------------------------------
10436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
10446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/**
10456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Execute adding and rolling in GregorianCalendar extensively,
10466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */
10476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid
10486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgCalendarTest::TestAddRollExtensive()
10496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{
10506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    int32_t maxlimit = 40;
10516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    int32_t y = 1997, m = UCAL_FEBRUARY, d = 1, hr = 1, min = 1, sec = 0, ms = 0;
10526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UErrorCode status = U_ZERO_ERROR;
10536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    GregorianCalendar *temp = new GregorianCalendar(y, m, d, status);
10546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if (failure(status, "new GregorianCalendar", TRUE)) return;
10556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
10566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    temp->set(UCAL_HOUR, hr);
10576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    temp->set(UCAL_MINUTE, min);
10586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    temp->set(UCAL_SECOND, sec);
10596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    temp->set(UCAL_MILLISECOND, ms);
10606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    temp->setMinimalDaysInFirstWeek(1);
10616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
10626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UCalendarDateFields e;
10636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
10646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    logln("Testing GregorianCalendar add...");
10656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    e = UCAL_YEAR;
10666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    while (e < UCAL_FIELD_COUNT) {
10676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        int32_t i;
10686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        int32_t limit = maxlimit;
10696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        status = U_ZERO_ERROR;
10706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        for (i = 0; i < limit; i++) {
10716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            temp->add(e, 1, status);
10726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            if (U_FAILURE(status)) { limit = i; status = U_ZERO_ERROR; }
10736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        }
10746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        for (i = 0; i < limit; i++) {
10756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            temp->add(e, -1, status);
10766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            if (U_FAILURE(status)) { errln("GregorianCalendar::add -1 failed"); return; }
10776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        }
10786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        check520(temp, y, m, d, hr, min, sec, ms, e);
10796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
10806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        e = (UCalendarDateFields) ((int32_t) e + 1);
10816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
10826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
10836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    logln("Testing GregorianCalendar roll...");
10846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    e = UCAL_YEAR;
10856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    while (e < UCAL_FIELD_COUNT) {
10866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        int32_t i;
10876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        int32_t limit = maxlimit;
10886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        status = U_ZERO_ERROR;
10896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        for (i = 0; i < limit; i++) {
10906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            logln(calToStr(*temp) + UnicodeString("  " ) + fieldName(e) + UnicodeString("++") );
10916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            temp->roll(e, 1, status);
10926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            if (U_FAILURE(status)) {
10936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org              logln("caltest.cpp:%d e=%d, i=%d - roll(+) err %s\n",  __LINE__, (int) e, (int) i, u_errorName(status));
10946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org              logln(calToStr(*temp));
10956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org              limit = i; status = U_ZERO_ERROR;
10966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            }
10976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        }
10986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        for (i = 0; i < limit; i++) {
10996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            logln("caltest.cpp:%d e=%d, i=%d\n",  __LINE__, (int) e, (int) i);
11006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            logln(calToStr(*temp) + UnicodeString("  " ) + fieldName(e) + UnicodeString("--") );
11016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            temp->roll(e, -1, status);
11026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            if (U_FAILURE(status)) { errln(UnicodeString("GregorianCalendar::roll ") + CalendarTest::fieldName(e) + " count=" + UnicodeString('@'+i) + " by -1 failed with " + u_errorName(status) ); return; }
11036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        }
11046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        check520(temp, y, m, d, hr, min, sec, ms, e);
11056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
11066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        e = (UCalendarDateFields) ((int32_t) e + 1);
11076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
11086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
11096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    delete temp;
11106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}
11116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
11126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// -------------------------------------
11136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid
11146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgCalendarTest::check520(Calendar* c,
11156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                        int32_t y, int32_t m, int32_t d,
11166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                        int32_t hr, int32_t min, int32_t sec,
11176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                        int32_t ms, UCalendarDateFields field)
11186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
11196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{
11206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UErrorCode status = U_ZERO_ERROR;
11216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if (c->get(UCAL_YEAR, status) != y ||
11226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        c->get(UCAL_MONTH, status) != m ||
11236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        c->get(UCAL_DATE, status) != d ||
11246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        c->get(UCAL_HOUR, status) != hr ||
11256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        c->get(UCAL_MINUTE, status) != min ||
11266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        c->get(UCAL_SECOND, status) != sec ||
11276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        c->get(UCAL_MILLISECOND, status) != ms) {
11286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        errln(UnicodeString("U_FAILURE for field ") + (int32_t)field +
11296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                ": Expected y/m/d h:m:s:ms of " +
11306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                y + "/" + (m + 1) + "/" + d + " " +
11316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org              hr + ":" + min + ":" + sec + ":" + ms +
11326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org              "; got " + c->get(UCAL_YEAR, status) +
11336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org              "/" + (c->get(UCAL_MONTH, status) + 1) +
11346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org              "/" + c->get(UCAL_DATE, status) +
11356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org              " " + c->get(UCAL_HOUR, status) + ":" +
11366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org              c->get(UCAL_MINUTE, status) + ":" +
11376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org              c->get(UCAL_SECOND, status) + ":" +
11386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org              c->get(UCAL_MILLISECOND, status)
11396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org              );
11406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
11416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        if (U_FAILURE(status)) { errln("Calendar::get failed"); return; }
11426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
11436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    else
11446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        logln(UnicodeString("Confirmed: ") + y + "/" +
11456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                (m + 1) + "/" + d + " " +
11466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                hr + ":" + min + ":" + sec + ":" + ms);
11476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}
11486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
11496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// -------------------------------------
11506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid
11516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgCalendarTest::check520(Calendar* c,
11526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                        int32_t y, int32_t m, int32_t d)
11536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
11546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{
11556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UErrorCode status = U_ZERO_ERROR;
11566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if (c->get(UCAL_YEAR, status) != y ||
11576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        c->get(UCAL_MONTH, status) != m ||
11586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        c->get(UCAL_DATE, status) != d) {
11596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        errln(UnicodeString("FAILURE: Expected y/m/d of ") +
11606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org              y + "/" + (m + 1) + "/" + d + " " +
11616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org              "; got " + c->get(UCAL_YEAR, status) +
11626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org              "/" + (c->get(UCAL_MONTH, status) + 1) +
11636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org              "/" + c->get(UCAL_DATE, status)
11646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org              );
11656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
11666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        if (U_FAILURE(status)) { errln("Calendar::get failed"); return; }
11676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
11686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    else
11696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        logln(UnicodeString("Confirmed: ") + y + "/" +
11706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                (m + 1) + "/" + d);
11716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}
11726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
11736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// -------------------------------------
11746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
11756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/**
11766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Test that setting of fields works.  In particular, make sure that all instances
11776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * of GregorianCalendar don't share a static instance of the fields array.
11786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */
11796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid
11806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgCalendarTest::TestFieldSet4781()
11816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{
11826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    // try {
11836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        UErrorCode status = U_ZERO_ERROR;
11846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        GregorianCalendar *g = new GregorianCalendar(status);
11856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        if (failure(status, "new GregorianCalendar", TRUE)) return;
11866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        GregorianCalendar *g2 = new GregorianCalendar(status);
11876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        if (U_FAILURE(status)) { errln("Couldn't create GregorianCalendar"); return; }
11886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        g2->set(UCAL_HOUR, 12, status);
11896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        g2->set(UCAL_MINUTE, 0, status);
11906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        g2->set(UCAL_SECOND, 0, status);
11916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        if (U_FAILURE(status)) { errln("Calendar::set failed"); return; }
11926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        if (*g == *g2) logln("Same");
11936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        else logln("Different");
11946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    //}
11956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        //catch(IllegalArgumentException e) {
11966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        //errln("Unexpected exception seen: " + e);
11976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    //}
11986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        delete g;
11996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        delete g2;
12006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}
12016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
12026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// -------------------------------------
12036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
12046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/* We don't support serialization on C++
12056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid
12066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgCalendarTest::TestSerialize337()
12076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{
12086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    Calendar cal = Calendar::getInstance();
12096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UBool ok = FALSE;
12106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    try {
12116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        FileOutputStream f = new FileOutputStream(FILENAME);
12126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        ObjectOutput s = new ObjectOutputStream(f);
12136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        s.writeObject(PREFIX);
12146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        s.writeObject(cal);
12156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        s.writeObject(POSTFIX);
12166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        f.close();
12176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        FileInputStream in = new FileInputStream(FILENAME);
12186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        ObjectInputStream t = new ObjectInputStream(in);
12196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        UnicodeString& pre = (UnicodeString&) t.readObject();
12206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        Calendar c = (Calendar) t.readObject();
12216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        UnicodeString& post = (UnicodeString&) t.readObject();
12226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        in.close();
12236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        ok = pre.equals(PREFIX) &&
12246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            post.equals(POSTFIX) &&
12256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            cal->equals(c);
12266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        File fl = new File(FILENAME);
12276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        fl.delete();
12286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
12296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    catch(IOException e) {
12306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        errln("FAIL: Exception received:");
12316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        e.printStackTrace(log);
12326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
12336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    catch(ClassNotFoundException e) {
12346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        errln("FAIL: Exception received:");
12356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        e.printStackTrace(log);
12366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
12376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if (!ok) errln("Serialization of Calendar object failed.");
12386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}
12396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
12406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUnicodeString& CalendarTest::PREFIX = "abc";
12416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
12426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUnicodeString& CalendarTest::POSTFIX = "def";
12436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
12446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUnicodeString& CalendarTest::FILENAME = "tmp337.bin";
12456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */
12466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
12476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// -------------------------------------
12486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
12496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/**
12506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Verify that the seconds of a Calendar can be zeroed out through the
12516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * expected sequence of operations.
12526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */
12536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid
12546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgCalendarTest::TestSecondsZero121()
12556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{
12566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UErrorCode status = U_ZERO_ERROR;
12576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    Calendar *cal = new GregorianCalendar(status);
12586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if (failure(status, "new GregorianCalendar", TRUE)) return;
12596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    cal->setTime(Calendar::getNow(), status);
12606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if (U_FAILURE(status)) { errln("Calendar::setTime failed"); return; }
12616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    cal->set(UCAL_SECOND, 0);
12626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if (U_FAILURE(status)) { errln("Calendar::set failed"); return; }
12636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UDate d = cal->getTime(status);
12646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if (U_FAILURE(status)) { errln("Calendar::getTime failed"); return; }
12656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UnicodeString s;
12666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    dateToString(d, s);
12676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if (s.indexOf("DATE_FORMAT_FAILURE") >= 0) {
12686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        dataerrln("Got: \"DATE_FORMAT_FAILURE\".");
12696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    } else if (s.indexOf(":00 ") < 0) {
12706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        errln("Expected to see :00 in " + s);
12716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
12726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    delete cal;
12736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}
12746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
12756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// -------------------------------------
12766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
12776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/**
12786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Verify that a specific sequence of adding and setting works as expected;
12796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * it should not vary depending on when and whether the get method is
12806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * called.
12816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */
12826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid
12836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgCalendarTest::TestAddSetGet0610()
12846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{
12856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UnicodeString EXPECTED_0610("1993/0/5", "");
12866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UErrorCode status = U_ZERO_ERROR;
12876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    {
12886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        Calendar *calendar = new GregorianCalendar(status);
12896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        if (failure(status, "new GregorianCalendar", TRUE)) return;
12906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        calendar->set(1993, UCAL_JANUARY, 4);
12916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        logln("1A) " + value(calendar));
12926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        calendar->add(UCAL_DATE, 1, status);
12936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        if (U_FAILURE(status)) { errln("Calendar::add failed"); return; }
12946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        UnicodeString v = value(calendar);
12956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        logln("1B) " + v);
12966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        logln("--) 1993/0/5");
12976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        if (!(v == EXPECTED_0610)) errln("Expected " + EXPECTED_0610 + "; saw " + v);
12986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        delete calendar;
12996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
13006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    {
13016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        Calendar *calendar = new GregorianCalendar(1993, UCAL_JANUARY, 4, status);
13026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        if (U_FAILURE(status)) { errln("Couldn't create GregorianCalendar"); return; }
13036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        logln("2A) " + value(calendar));
13046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        calendar->add(UCAL_DATE, 1, status);
13056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        if (U_FAILURE(status)) { errln("Calendar::add failed"); return; }
13066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        UnicodeString v = value(calendar);
13076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        logln("2B) " + v);
13086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        logln("--) 1993/0/5");
13096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        if (!(v == EXPECTED_0610)) errln("Expected " + EXPECTED_0610 + "; saw " + v);
13106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        delete calendar;
13116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
13126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    {
13136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        Calendar *calendar = new GregorianCalendar(1993, UCAL_JANUARY, 4, status);
13146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        if (U_FAILURE(status)) { errln("Couldn't create GregorianCalendar"); return; }
13156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        logln("3A) " + value(calendar));
13166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        calendar->getTime(status);
13176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        if (U_FAILURE(status)) { errln("Calendar::getTime failed"); return; }
13186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        calendar->add(UCAL_DATE, 1, status);
13196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        if (U_FAILURE(status)) { errln("Calendar::add failed"); return; }
13206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        UnicodeString v = value(calendar);
13216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        logln("3B) " + v);
13226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        logln("--) 1993/0/5");
13236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        if (!(v == EXPECTED_0610)) errln("Expected " + EXPECTED_0610 + "; saw " + v);
13246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        delete calendar;
13256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
13266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}
13276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
13286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// -------------------------------------
13296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
13306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUnicodeString
13316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgCalendarTest::value(Calendar* calendar)
13326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{
13336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UErrorCode status = U_ZERO_ERROR;
13346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    return UnicodeString("") + (int32_t)calendar->get(UCAL_YEAR, status) +
13356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        "/" + (int32_t)calendar->get(UCAL_MONTH, status) +
13366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        "/" + (int32_t)calendar->get(UCAL_DATE, status) +
13376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        (U_FAILURE(status) ? " FAIL: Calendar::get failed" : "");
13386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}
13396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
13406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
13416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// -------------------------------------
13426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
13436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/**
13446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Verify that various fields on a known date are set correctly.
13456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */
13466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid
13476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgCalendarTest::TestFields060()
13486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{
13496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UErrorCode status = U_ZERO_ERROR;
13506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    int32_t year = 1997;
13516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    int32_t month = UCAL_OCTOBER;
13526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    int32_t dDate = 22;
13536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    GregorianCalendar *calendar = 0;
13546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    calendar = new GregorianCalendar(year, month, dDate, status);
13556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if (failure(status, "new GregorianCalendar", TRUE)) return;
13566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    for (int32_t i = 0; i < EXPECTED_FIELDS_length;) {
13576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        UCalendarDateFields field = (UCalendarDateFields)EXPECTED_FIELDS[i++];
13586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        int32_t expected = EXPECTED_FIELDS[i++];
13596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        if (calendar->get(field, status) != expected) {
13606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            errln(UnicodeString("Expected field ") + (int32_t)field + " to have value " + (int32_t)expected +
13616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                  "; received " + (int32_t)calendar->get(field, status) + " instead");
13626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            if (U_FAILURE(status)) { errln("Calendar::get failed"); return; }
13636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        }
13646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
13656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    delete calendar;
13666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}
13676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
13686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgint32_t CalendarTest::EXPECTED_FIELDS[] = {
13696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UCAL_YEAR, 1997,
13706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UCAL_MONTH, UCAL_OCTOBER,
13716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UCAL_DATE, 22,
13726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UCAL_DAY_OF_WEEK, UCAL_WEDNESDAY,
13736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UCAL_DAY_OF_WEEK_IN_MONTH, 4,
13746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UCAL_DAY_OF_YEAR, 295
13756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org};
13766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
13776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgconst int32_t CalendarTest::EXPECTED_FIELDS_length = (int32_t)(sizeof(CalendarTest::EXPECTED_FIELDS) /
13786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    sizeof(CalendarTest::EXPECTED_FIELDS[0]));
13796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
13806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// -------------------------------------
13816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
13826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/**
13836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Verify that various fields on a known date are set correctly.  In this
13846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * case, the start of the epoch (January 1 1970).
13856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */
13866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid
13876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgCalendarTest::TestEpochStartFields()
13886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{
13896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UErrorCode status = U_ZERO_ERROR;
13906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    TimeZone *z = TimeZone::createDefault();
13916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    Calendar *c = Calendar::createInstance(status);
13926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if (failure(status, "Calendar::createInstance", TRUE)) return;
13936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UDate d = - z->getRawOffset();
13946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    GregorianCalendar *gc = new GregorianCalendar(status);
13956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if (U_FAILURE(status)) { errln("Couldn't create GregorianCalendar"); return; }
13966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    gc->setTimeZone(*z);
13976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    gc->setTime(d, status);
13986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if (U_FAILURE(status)) { errln("Calendar::setTime failed"); return; }
13996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UBool idt = gc->inDaylightTime(status);
14006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if (U_FAILURE(status)) { errln("GregorianCalendar::inDaylightTime failed"); return; }
14016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if (idt) {
14026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        UnicodeString str;
14036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        logln("Warning: Skipping test because " + dateToString(d, str) + " is in DST.");
14046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
14056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    else {
14066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        c->setTime(d, status);
14076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        if (U_FAILURE(status)) { errln("Calendar::setTime failed"); return; }
14086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        for (int32_t i = 0; i < UCAL_ZONE_OFFSET;++i) {
14096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            if (c->get((UCalendarDateFields)i, status) != EPOCH_FIELDS[i])
14106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                dataerrln(UnicodeString("Expected field ") + i + " to have value " + EPOCH_FIELDS[i] +
14116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                      "; saw " + c->get((UCalendarDateFields)i, status) + " instead");
14126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            if (U_FAILURE(status)) { errln("Calendar::get failed"); return; }
14136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        }
14146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        if (c->get(UCAL_ZONE_OFFSET, status) != z->getRawOffset())
14156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        {
14166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            errln(UnicodeString("Expected field ZONE_OFFSET to have value ") + z->getRawOffset() +
14176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                  "; saw " + c->get(UCAL_ZONE_OFFSET, status) + " instead");
14186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            if (U_FAILURE(status)) { errln("Calendar::get failed"); return; }
14196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        }
14206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        if (c->get(UCAL_DST_OFFSET, status) != 0)
14216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        {
14226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            errln(UnicodeString("Expected field DST_OFFSET to have value 0") +
14236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                  "; saw " + c->get(UCAL_DST_OFFSET, status) + " instead");
14246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            if (U_FAILURE(status)) { errln("Calendar::get failed"); return; }
14256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        }
14266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
14276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    delete c;
14286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    delete z;
14296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    delete gc;
14306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}
14316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
14326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgint32_t CalendarTest::EPOCH_FIELDS[] = {
14336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    1, 1970, 0, 1, 1, 1, 1, 5, 1, 0, 0, 0, 0, 0, 0, - 28800000, 0
14346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org};
14356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
14366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// -------------------------------------
14376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
14386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/**
14396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Test that the days of the week progress properly when add is called repeatedly
14406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * for increments of 24 days.
14416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */
14426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid
14436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgCalendarTest::TestDOWProgression()
14446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{
14456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UErrorCode status = U_ZERO_ERROR;
14466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    Calendar *cal = new GregorianCalendar(1972, UCAL_OCTOBER, 26, status);
14476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if (failure(status, "new GregorianCalendar", TRUE)) return;
14486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    marchByDelta(cal, 24);
14496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    delete cal;
14506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}
14516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
14526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// -------------------------------------
14536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
14546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid
14556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgCalendarTest::TestDOW_LOCALandYEAR_WOY()
14566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{
14576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /* Note: I've commented out the loop_addroll tests for YEAR and
14586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * YEAR_WOY below because these two fields should NOT behave
14596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * identically when adding.  YEAR should keep the month/dom
14606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * invariant.  YEAR_WOY should keep the woy/dow invariant.  I've
14616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * added a new test that checks for this in place of the old call
14626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * to loop_addroll. - aliu */
14636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UErrorCode status = U_ZERO_ERROR;
14646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    int32_t times = 20;
14656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    Calendar *cal=Calendar::createInstance(Locale::getGermany(), status);
14666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if (failure(status, "Calendar::createInstance", TRUE)) return;
14676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    SimpleDateFormat *sdf=new SimpleDateFormat(UnicodeString("YYYY'-W'ww-ee"), Locale::getGermany(), status);
14686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if (U_FAILURE(status)) { dataerrln("Couldn't create SimpleDateFormat - %s", u_errorName(status)); return; }
14696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
14706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    // ICU no longer use localized date-time pattern characters by default.
14716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    // So we set pattern chars using 'J' instead of 'Y'.
14726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    DateFormatSymbols *dfs = new DateFormatSymbols(Locale::getGermany(), status);
14736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    dfs->setLocalPatternChars(UnicodeString("GyMdkHmsSEDFwWahKzJeugAZvcLQq"));
14746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    sdf->adoptDateFormatSymbols(dfs);
14756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    sdf->applyLocalizedPattern(UnicodeString("JJJJ'-W'ww-ee"), status);
14766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if (U_FAILURE(status)) { errln("Couldn't apply localized pattern"); return; }
14776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
14786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    cal->clear();
14796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    cal->set(1997, UCAL_DECEMBER, 25);
14806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    doYEAR_WOYLoop(cal, sdf, times, status);
14816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    //loop_addroll(cal, /*sdf,*/ times, UCAL_YEAR_WOY, UCAL_YEAR,  status);
14826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    yearAddTest(*cal, status); // aliu
14836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    loop_addroll(cal, /*sdf,*/ times, UCAL_DOW_LOCAL, UCAL_DAY_OF_WEEK, status);
14846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if (U_FAILURE(status)) { errln("Error in parse/calculate test for 1997"); return; }
14856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
14866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    cal->clear();
14876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    cal->set(1998, UCAL_DECEMBER, 25);
14886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    doYEAR_WOYLoop(cal, sdf, times, status);
14896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    //loop_addroll(cal, /*sdf,*/ times, UCAL_YEAR_WOY, UCAL_YEAR,  status);
14906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    yearAddTest(*cal, status); // aliu
14916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    loop_addroll(cal, /*sdf,*/ times, UCAL_DOW_LOCAL, UCAL_DAY_OF_WEEK, status);
14926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if (U_FAILURE(status)) { errln("Error in parse/calculate test for 1998"); return; }
14936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
14946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    cal->clear();
14956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    cal->set(1582, UCAL_OCTOBER, 1);
14966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    doYEAR_WOYLoop(cal, sdf, times, status);
14976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    //loop_addroll(cal, /*sdf,*/ times, Calendar::YEAR_WOY, Calendar::YEAR,  status);
14986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    yearAddTest(*cal, status); // aliu
14996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    loop_addroll(cal, /*sdf,*/ times, UCAL_DOW_LOCAL, UCAL_DAY_OF_WEEK, status);
15006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if (U_FAILURE(status)) { errln("Error in parse/calculate test for 1582"); return; }
15016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    delete sdf;
15026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    delete cal;
15036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
15046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    return;
15056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}
15066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
15076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/**
15086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Confirm that adding a YEAR and adding a YEAR_WOY work properly for
15096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * the given Calendar at its current setting.
15106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */
15116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid CalendarTest::yearAddTest(Calendar& cal, UErrorCode& status) {
15126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
15136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * When adding the YEAR, the month and day should remain constant.
15146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * When adding the YEAR_WOY, the WOY and DOW should remain constant. - aliu
15156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Examples:
15166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     *  Wed Jan 14 1998 / 1998-W03-03 Add(YEAR_WOY, 1) -> Wed Jan 20 1999 / 1999-W03-03
15176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     *                                Add(YEAR, 1)     -> Thu Jan 14 1999 / 1999-W02-04
15186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     *  Thu Jan 14 1999 / 1999-W02-04 Add(YEAR_WOY, 1) -> Thu Jan 13 2000 / 2000-W02-04
15196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     *                                Add(YEAR, 1)     -> Fri Jan 14 2000 / 2000-W02-05
15206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     *  Sun Oct 31 1582 / 1582-W42-07 Add(YEAR_WOY, 1) -> Sun Oct 23 1583 / 1583-W42-07
15216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     *                                Add(YEAR, 1)     -> Mon Oct 31 1583 / 1583-W44-01
15226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
15236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    int32_t y   = cal.get(UCAL_YEAR, status);
15246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    int32_t mon = cal.get(UCAL_MONTH, status);
15256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    int32_t day = cal.get(UCAL_DATE, status);
15266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    int32_t ywy = cal.get(UCAL_YEAR_WOY, status);
15276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    int32_t woy = cal.get(UCAL_WEEK_OF_YEAR, status);
15286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    int32_t dow = cal.get(UCAL_DOW_LOCAL, status);
15296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UDate t = cal.getTime(status);
15306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
15316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if(U_FAILURE(status)){
15326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        errln(UnicodeString("Failed to create Calendar for locale. Error: ") + UnicodeString(u_errorName(status)));
15336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        return;
15346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
15356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UnicodeString str, str2;
15366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    SimpleDateFormat fmt(UnicodeString("EEE MMM dd yyyy / YYYY'-W'ww-ee"), status);
15376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    fmt.setCalendar(cal);
15386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
15396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    fmt.format(t, str.remove());
15406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    str += ".add(YEAR, 1)    =>";
15416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    cal.add(UCAL_YEAR, 1, status);
15426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    int32_t y2   = cal.get(UCAL_YEAR, status);
15436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    int32_t mon2 = cal.get(UCAL_MONTH, status);
15446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    int32_t day2 = cal.get(UCAL_DATE, status);
15456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    fmt.format(cal.getTime(status), str);
15466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if (y2 != (y+1) || mon2 != mon || day2 != day) {
15476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        str += (UnicodeString)", expected year " +
15486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            (y+1) + ", month " + (mon+1) + ", day " + day;
15496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        errln((UnicodeString)"FAIL: " + str);
15506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        logln( UnicodeString(" -> ") + CalendarTest::calToStr(cal) );
15516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    } else {
15526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        logln(str);
15536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
15546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
15556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    fmt.format(t, str.remove());
15566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    str += ".add(YEAR_WOY, 1)=>";
15576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    cal.setTime(t, status);
15586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    logln( UnicodeString(" <- ") + CalendarTest::calToStr(cal) );
15596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    cal.add(UCAL_YEAR_WOY, 1, status);
15606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    int32_t ywy2 = cal.get(UCAL_YEAR_WOY, status);
15616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    int32_t woy2 = cal.get(UCAL_WEEK_OF_YEAR, status);
15626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    int32_t dow2 = cal.get(UCAL_DOW_LOCAL, status);
15636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    fmt.format(cal.getTime(status), str);
15646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if (ywy2 != (ywy+1) || woy2 != woy || dow2 != dow) {
15656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        str += (UnicodeString)", expected yearWOY " +
15666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            (ywy+1) + ", woy " + woy + ", dowLocal " + dow;
15676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        errln((UnicodeString)"FAIL: " + str);
15686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        logln( UnicodeString(" -> ") + CalendarTest::calToStr(cal) );
15696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    } else {
15706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        logln(str);
15716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
15726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}
15736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
15746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// -------------------------------------
15756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
15766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid CalendarTest::loop_addroll(Calendar *cal, /*SimpleDateFormat *sdf,*/ int times, UCalendarDateFields field, UCalendarDateFields field2, UErrorCode& errorCode) {
15776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    Calendar *calclone;
15786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    SimpleDateFormat fmt(UnicodeString("EEE MMM dd yyyy / YYYY'-W'ww-ee"), errorCode);
15796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    fmt.setCalendar(*cal);
15806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    int i;
15816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
15826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    for(i = 0; i<times; i++) {
15836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        calclone = cal->clone();
15846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        UDate start = cal->getTime(errorCode);
15856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        cal->add(field,1,errorCode);
15866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        if (U_FAILURE(errorCode)) { errln("Error in add"); delete calclone; return; }
15876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        calclone->add(field2,1,errorCode);
15886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        if (U_FAILURE(errorCode)) { errln("Error in add"); delete calclone; return; }
15896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        if(cal->getTime(errorCode) != calclone->getTime(errorCode)) {
15906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            UnicodeString str("FAIL: Results of add differ. "), str2;
15916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            str += fmt.format(start, str2) + " ";
15926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            str += UnicodeString("Add(") + fieldName(field) + ", 1) -> " +
15936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                fmt.format(cal->getTime(errorCode), str2.remove()) + "; ";
15946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            str += UnicodeString("Add(") + fieldName(field2) + ", 1) -> " +
15956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                fmt.format(calclone->getTime(errorCode), str2.remove());
15966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            errln(str);
15976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            delete calclone;
15986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            return;
15996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        }
16006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        delete calclone;
16016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
16026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
16036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    for(i = 0; i<times; i++) {
16046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        calclone = cal->clone();
16056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        cal->roll(field,(int32_t)1,errorCode);
16066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        if (U_FAILURE(errorCode)) { errln("Error in roll"); delete calclone; return; }
16076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        calclone->roll(field2,(int32_t)1,errorCode);
16086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        if (U_FAILURE(errorCode)) { errln("Error in roll"); delete calclone; return; }
16096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        if(cal->getTime(errorCode) != calclone->getTime(errorCode)) {
16106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            delete calclone;
16116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            errln("Results of roll differ!");
16126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            return;
16136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        }
16146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        delete calclone;
16156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
16166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}
16176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
16186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// -------------------------------------
16196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
16206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid
16216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgCalendarTest::doYEAR_WOYLoop(Calendar *cal, SimpleDateFormat *sdf,
16226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                                    int32_t times, UErrorCode& errorCode) {
16236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
16246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UnicodeString us;
16256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UDate tst, original;
16266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    Calendar *tstres = new GregorianCalendar(Locale::getGermany(), errorCode);
16276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    for(int i=0; i<times; ++i) {
16286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        sdf->format(Formattable(cal->getTime(errorCode),Formattable::kIsDate), us, errorCode);
16296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        //logln("expected: "+us);
16306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        if (U_FAILURE(errorCode)) { errln("Format error"); return; }
16316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        tst=sdf->parse(us,errorCode);
16326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        if (U_FAILURE(errorCode)) { errln("Parse error"); return; }
16336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        tstres->clear();
16346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        tstres->setTime(tst, errorCode);
16356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        //logln((UnicodeString)"Parsed week of year is "+tstres->get(UCAL_WEEK_OF_YEAR, errorCode));
16366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        if (U_FAILURE(errorCode)) { errln("Set time error"); return; }
16376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        original = cal->getTime(errorCode);
16386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        us.remove();
16396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        sdf->format(Formattable(tst,Formattable::kIsDate), us, errorCode);
16406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        //logln("got: "+us);
16416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        if (U_FAILURE(errorCode)) { errln("Get time error"); return; }
16426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        if(original!=tst) {
16436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            us.remove();
16446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            sdf->format(Formattable(original, Formattable::kIsDate), us, errorCode);
16456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            errln("FAIL: Parsed time doesn't match with regular");
16466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            logln("expected "+us + " " + calToStr(*cal));
16476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            us.remove();
16486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            sdf->format(Formattable(tst, Formattable::kIsDate), us, errorCode);
16496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            logln("got "+us + " " + calToStr(*tstres));
16506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        }
16516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        tstres->clear();
16526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        tstres->set(UCAL_YEAR_WOY, cal->get(UCAL_YEAR_WOY, errorCode));
16536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        tstres->set(UCAL_WEEK_OF_YEAR, cal->get(UCAL_WEEK_OF_YEAR, errorCode));
16546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        tstres->set(UCAL_DOW_LOCAL, cal->get(UCAL_DOW_LOCAL, errorCode));
16556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        if(cal->get(UCAL_YEAR, errorCode) != tstres->get(UCAL_YEAR, errorCode)) {
16566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            errln("FAIL: Different Year!");
16576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            logln((UnicodeString)"Expected "+cal->get(UCAL_YEAR, errorCode));
16586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            logln((UnicodeString)"Got "+tstres->get(UCAL_YEAR, errorCode));
16596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            return;
16606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        }
16616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        if(cal->get(UCAL_DAY_OF_YEAR, errorCode) != tstres->get(UCAL_DAY_OF_YEAR, errorCode)) {
16626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            errln("FAIL: Different Day Of Year!");
16636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            logln((UnicodeString)"Expected "+cal->get(UCAL_DAY_OF_YEAR, errorCode));
16646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            logln((UnicodeString)"Got "+tstres->get(UCAL_DAY_OF_YEAR, errorCode));
16656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            return;
16666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        }
16676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        //logln(calToStr(*cal));
16686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        cal->add(UCAL_DATE, 1, errorCode);
16696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        if (U_FAILURE(errorCode)) { errln("Add error"); return; }
16706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        us.remove();
16716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
16726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    delete (tstres);
16736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}
16746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// -------------------------------------
16756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
16766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid
16776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgCalendarTest::marchByDelta(Calendar* cal, int32_t delta)
16786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{
16796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UErrorCode status = U_ZERO_ERROR;
16806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    Calendar *cur = (Calendar*) cal->clone();
16816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    int32_t initialDOW = cur->get(UCAL_DAY_OF_WEEK, status);
16826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if (U_FAILURE(status)) { errln("Calendar::get failed"); return; }
16836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    int32_t DOW, newDOW = initialDOW;
16846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    do {
16856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        UnicodeString str;
16866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        DOW = newDOW;
16876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        logln(UnicodeString("DOW = ") + DOW + "  " + dateToString(cur->getTime(status), str));
16886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        if (U_FAILURE(status)) { errln("Calendar::getTime failed"); return; }
16896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        cur->add(UCAL_DAY_OF_WEEK, delta, status);
16906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        if (U_FAILURE(status)) { errln("Calendar::add failed"); return; }
16916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        newDOW = cur->get(UCAL_DAY_OF_WEEK, status);
16926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        if (U_FAILURE(status)) { errln("Calendar::get failed"); return; }
16936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        int32_t expectedDOW = 1 + (DOW + delta - 1) % 7;
16946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        if (newDOW != expectedDOW) {
16956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            errln(UnicodeString("Day of week should be ") + expectedDOW + " instead of " + newDOW +
16966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                  " on " + dateToString(cur->getTime(status), str));
16976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            if (U_FAILURE(status)) { errln("Calendar::getTime failed"); return; }
16986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            return;
16996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        }
17006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
17016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    while (newDOW != initialDOW);
17026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    delete cur;
17036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}
17046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
17056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define CHECK(status, msg) \
17066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if (U_FAILURE(status)) { \
17076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        errcheckln(status, msg); \
17086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        return; \
17096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
17106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
17116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid CalendarTest::TestWOY(void) {
17126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /*
17136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org      FDW = Mon, MDFW = 4:
17146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org         Sun Dec 26 1999, WOY 51
17156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org         Mon Dec 27 1999, WOY 52
17166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org         Tue Dec 28 1999, WOY 52
17176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org         Wed Dec 29 1999, WOY 52
17186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org         Thu Dec 30 1999, WOY 52
17196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org         Fri Dec 31 1999, WOY 52
17206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org         Sat Jan 01 2000, WOY 52 ***
17216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org         Sun Jan 02 2000, WOY 52 ***
17226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org         Mon Jan 03 2000, WOY 1
17236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org         Tue Jan 04 2000, WOY 1
17246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org         Wed Jan 05 2000, WOY 1
17256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org         Thu Jan 06 2000, WOY 1
17266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org         Fri Jan 07 2000, WOY 1
17276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org         Sat Jan 08 2000, WOY 1
17286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org         Sun Jan 09 2000, WOY 1
17296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org         Mon Jan 10 2000, WOY 2
17306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
17316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org      FDW = Mon, MDFW = 2:
17326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org         Sun Dec 26 1999, WOY 52
17336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org         Mon Dec 27 1999, WOY 1  ***
17346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org         Tue Dec 28 1999, WOY 1  ***
17356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org         Wed Dec 29 1999, WOY 1  ***
17366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org         Thu Dec 30 1999, WOY 1  ***
17376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org         Fri Dec 31 1999, WOY 1  ***
17386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org         Sat Jan 01 2000, WOY 1
17396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org         Sun Jan 02 2000, WOY 1
17406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org         Mon Jan 03 2000, WOY 2
17416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org         Tue Jan 04 2000, WOY 2
17426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org         Wed Jan 05 2000, WOY 2
17436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org         Thu Jan 06 2000, WOY 2
17446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org         Fri Jan 07 2000, WOY 2
17456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org         Sat Jan 08 2000, WOY 2
17466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org         Sun Jan 09 2000, WOY 2
17476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org         Mon Jan 10 2000, WOY 3
17486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    */
17496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
17506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UnicodeString str;
17516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UErrorCode status = U_ZERO_ERROR;
17526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    int32_t i;
17536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
17546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    GregorianCalendar cal(status);
17556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    SimpleDateFormat fmt(UnicodeString("EEE MMM dd yyyy', WOY' w"), status);
17566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if (failure(status, "Cannot construct calendar/format", TRUE)) return;
17576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
17586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UCalendarDaysOfWeek fdw = (UCalendarDaysOfWeek) 0;
17596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
17606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    //for (int8_t pass=2; pass<=2; ++pass) {
17616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    for (int8_t pass=1; pass<=2; ++pass) {
17626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        switch (pass) {
17636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        case 1:
17646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            fdw = UCAL_MONDAY;
17656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            cal.setFirstDayOfWeek(fdw);
17666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            cal.setMinimalDaysInFirstWeek(4);
17676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            fmt.adoptCalendar(cal.clone());
17686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            break;
17696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        case 2:
17706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            fdw = UCAL_MONDAY;
17716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            cal.setFirstDayOfWeek(fdw);
17726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            cal.setMinimalDaysInFirstWeek(2);
17736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            fmt.adoptCalendar(cal.clone());
17746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            break;
17756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        }
17766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
17776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        //for (i=2; i<=6; ++i) {
17786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        for (i=0; i<16; ++i) {
17796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        UDate t, t2;
17806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        int32_t t_y, t_woy, t_dow;
17816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        cal.clear();
17826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        cal.set(1999, UCAL_DECEMBER, 26 + i);
17836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        fmt.format(t = cal.getTime(status), str.remove());
17846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        CHECK(status, "Fail: getTime failed");
17856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        logln(UnicodeString("* ") + str);
17866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        int32_t dow = cal.get(UCAL_DAY_OF_WEEK, status);
17876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        int32_t woy = cal.get(UCAL_WEEK_OF_YEAR, status);
17886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        int32_t year = cal.get(UCAL_YEAR, status);
17896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        int32_t mon = cal.get(UCAL_MONTH, status);
17906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        logln(calToStr(cal));
17916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        CHECK(status, "Fail: get failed");
17926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        int32_t dowLocal = dow - fdw;
17936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        if (dowLocal < 0) dowLocal += 7;
17946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        dowLocal++;
17956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        int32_t yearWoy = year;
17966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        if (mon == UCAL_JANUARY) {
17976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            if (woy >= 52) --yearWoy;
17986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        } else {
17996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            if (woy == 1) ++yearWoy;
18006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        }
18016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
18026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        // Basic fields->time check y/woy/dow
18036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        // Since Y/WOY is ambiguous, we do a check of the fields,
18046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        // not of the specific time.
18056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        cal.clear();
18066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        cal.set(UCAL_YEAR, year);
18076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        cal.set(UCAL_WEEK_OF_YEAR, woy);
18086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        cal.set(UCAL_DAY_OF_WEEK, dow);
18096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        t_y = cal.get(UCAL_YEAR, status);
18106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        t_woy = cal.get(UCAL_WEEK_OF_YEAR, status);
18116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        t_dow = cal.get(UCAL_DAY_OF_WEEK, status);
18126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        CHECK(status, "Fail: get failed");
18136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        if (t_y != year || t_woy != woy || t_dow != dow) {
18146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            str = "Fail: y/woy/dow fields->time => ";
18156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            fmt.format(cal.getTime(status), str);
18166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            errln(str);
18176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            logln(calToStr(cal));
18186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            logln("[get!=set] Y%d!=%d || woy%d!=%d || dow%d!=%d\n",
18196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                  t_y, year, t_woy, woy, t_dow, dow);
18206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        } else {
18216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org          logln("y/woy/dow fields->time OK");
18226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        }
18236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
18246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        // Basic fields->time check y/woy/dow_local
18256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        // Since Y/WOY is ambiguous, we do a check of the fields,
18266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        // not of the specific time.
18276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        cal.clear();
18286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        cal.set(UCAL_YEAR, year);
18296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        cal.set(UCAL_WEEK_OF_YEAR, woy);
18306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        cal.set(UCAL_DOW_LOCAL, dowLocal);
18316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        t_y = cal.get(UCAL_YEAR, status);
18326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        t_woy = cal.get(UCAL_WEEK_OF_YEAR, status);
18336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        t_dow = cal.get(UCAL_DOW_LOCAL, status);
18346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        CHECK(status, "Fail: get failed");
18356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        if (t_y != year || t_woy != woy || t_dow != dowLocal) {
18366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            str = "Fail: y/woy/dow_local fields->time => ";
18376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            fmt.format(cal.getTime(status), str);
18386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            errln(str);
18396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        }
18406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
18416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        // Basic fields->time check y_woy/woy/dow
18426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        cal.clear();
18436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        cal.set(UCAL_YEAR_WOY, yearWoy);
18446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        cal.set(UCAL_WEEK_OF_YEAR, woy);
18456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        cal.set(UCAL_DAY_OF_WEEK, dow);
18466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        t2 = cal.getTime(status);
18476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        CHECK(status, "Fail: getTime failed");
18486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        if (t != t2) {
18496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            str = "Fail: y_woy/woy/dow fields->time => ";
18506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            fmt.format(t2, str);
18516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            errln(str);
18526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            logln(calToStr(cal));
18536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            logln("%.f != %.f\n", t, t2);
18546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        } else {
18556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org          logln("y_woy/woy/dow OK");
18566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        }
18576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
18586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        // Basic fields->time check y_woy/woy/dow_local
18596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        cal.clear();
18606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        cal.set(UCAL_YEAR_WOY, yearWoy);
18616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        cal.set(UCAL_WEEK_OF_YEAR, woy);
18626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        cal.set(UCAL_DOW_LOCAL, dowLocal);
18636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        t2 = cal.getTime(status);
18646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        CHECK(status, "Fail: getTime failed");
18656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        if (t != t2) {
18666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            str = "Fail: y_woy/woy/dow_local fields->time => ";
18676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            fmt.format(t2, str);
18686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            errln(str);
18696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        }
18706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
18716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        logln("Testing DOW_LOCAL.. dow%d\n", dow);
18726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        // Make sure DOW_LOCAL disambiguates over DOW
18736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        int32_t wrongDow = dow - 3;
18746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        if (wrongDow < 1) wrongDow += 7;
18756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        cal.setTime(t, status);
18766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        cal.set(UCAL_DAY_OF_WEEK, wrongDow);
18776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        cal.set(UCAL_DOW_LOCAL, dowLocal);
18786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        t2 = cal.getTime(status);
18796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        CHECK(status, "Fail: set/getTime failed");
18806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        if (t != t2) {
18816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            str = "Fail: DOW_LOCAL fields->time => ";
18826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            fmt.format(t2, str);
18836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            errln(str);
18846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            logln(calToStr(cal));
18856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            logln("%.f :   DOW%d, DOW_LOCAL%d -> %.f\n",
18866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                  t, wrongDow, dowLocal, t2);
18876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        }
18886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
18896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        // Make sure DOW disambiguates over DOW_LOCAL
18906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        int32_t wrongDowLocal = dowLocal - 3;
18916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        if (wrongDowLocal < 1) wrongDowLocal += 7;
18926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        cal.setTime(t, status);
18936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        cal.set(UCAL_DOW_LOCAL, wrongDowLocal);
18946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        cal.set(UCAL_DAY_OF_WEEK, dow);
18956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        t2 = cal.getTime(status);
18966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        CHECK(status, "Fail: set/getTime failed");
18976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        if (t != t2) {
18986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            str = "Fail: DOW       fields->time => ";
18996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            fmt.format(t2, str);
19006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            errln(str);
19016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        }
19026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
19036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        // Make sure YEAR_WOY disambiguates over YEAR
19046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        cal.setTime(t, status);
19056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        cal.set(UCAL_YEAR, year - 2);
19066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        cal.set(UCAL_YEAR_WOY, yearWoy);
19076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        t2 = cal.getTime(status);
19086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        CHECK(status, "Fail: set/getTime failed");
19096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        if (t != t2) {
19106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            str = "Fail: YEAR_WOY  fields->time => ";
19116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            fmt.format(t2, str);
19126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            errln(str);
19136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        }
19146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
19156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        // Make sure YEAR disambiguates over YEAR_WOY
19166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        cal.setTime(t, status);
19176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        cal.set(UCAL_YEAR_WOY, yearWoy - 2);
19186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        cal.set(UCAL_YEAR, year);
19196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        t2 = cal.getTime(status);
19206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        CHECK(status, "Fail: set/getTime failed");
19216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        if (t != t2) {
19226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            str = "Fail: YEAR      fields->time => ";
19236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            fmt.format(t2, str);
19246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            errln(str);
19256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        }
19266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
19276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
19286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
19296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /*
19306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org      FDW = Mon, MDFW = 4:
19316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org         Sun Dec 26 1999, WOY 51
19326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org         Mon Dec 27 1999, WOY 52
19336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org         Tue Dec 28 1999, WOY 52
19346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org         Wed Dec 29 1999, WOY 52
19356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org         Thu Dec 30 1999, WOY 52
19366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org         Fri Dec 31 1999, WOY 52
19376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org         Sat Jan 01 2000, WOY 52
19386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org         Sun Jan 02 2000, WOY 52
19396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    */
19406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
19416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    // Roll the DOW_LOCAL within week 52
19426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    for (i=27; i<=33; ++i) {
19436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        int32_t amount;
19446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        for (amount=-7; amount<=7; ++amount) {
19456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            str = "roll(";
19466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            cal.set(1999, UCAL_DECEMBER, i);
19476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            UDate t, t2;
19486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            fmt.format(cal.getTime(status), str);
19496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            CHECK(status, "Fail: getTime failed");
19506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            str += UnicodeString(", ") + amount + ") = ";
19516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
19526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            cal.roll(UCAL_DOW_LOCAL, amount, status);
19536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            CHECK(status, "Fail: roll failed");
19546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
19556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            t = cal.getTime(status);
19566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            int32_t newDom = i + amount;
19576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            while (newDom < 27) newDom += 7;
19586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            while (newDom > 33) newDom -= 7;
19596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            cal.set(1999, UCAL_DECEMBER, newDom);
19606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            t2 = cal.getTime(status);
19616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            CHECK(status, "Fail: getTime failed");
19626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            fmt.format(t, str);
19636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
19646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            if (t != t2) {
19656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                str.append(", exp ");
19666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                fmt.format(t2, str);
19676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                errln(str);
19686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            } else {
19696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                logln(str);
19706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            }
19716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        }
19726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
19736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}
19746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
19756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid CalendarTest::TestYWOY()
19766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{
19776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org   UnicodeString str;
19786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org   UErrorCode status = U_ZERO_ERROR;
19796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
19806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org   GregorianCalendar cal(status);
19816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org   if (failure(status, "construct GregorianCalendar", TRUE)) return;
19826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
19836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org   cal.setFirstDayOfWeek(UCAL_SUNDAY);
19846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org   cal.setMinimalDaysInFirstWeek(1);
19856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
19866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org   logln("Setting:  ywoy=2004, woy=1, dow=MONDAY");
19876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org   cal.clear();
19886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org   cal.set(UCAL_YEAR_WOY,2004);
19896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org   cal.set(UCAL_WEEK_OF_YEAR,1);
19906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org   cal.set(UCAL_DAY_OF_WEEK, UCAL_MONDAY);
19916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
19926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org   logln(calToStr(cal));
19936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org   if(cal.get(UCAL_YEAR, status) != 2003) {
19946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     errln("year not 2003");
19956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org   }
19966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
19976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org   logln("+ setting DOW to THURSDAY");
19986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org   cal.clear();
19996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org   cal.set(UCAL_YEAR_WOY,2004);
20006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org   cal.set(UCAL_WEEK_OF_YEAR,1);
20016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org   cal.set(UCAL_DAY_OF_WEEK, UCAL_THURSDAY);
20026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
20036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org   logln(calToStr(cal));
20046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org   if(cal.get(UCAL_YEAR, status) != 2004) {
20056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     errln("year not 2004");
20066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org   }
20076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
20086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org   logln("+ setting DOW_LOCAL to 1");
20096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org   cal.clear();
20106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org   cal.set(UCAL_YEAR_WOY,2004);
20116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org   cal.set(UCAL_WEEK_OF_YEAR,1);
20126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org   cal.set(UCAL_DAY_OF_WEEK, UCAL_THURSDAY);
20136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org   cal.set(UCAL_DOW_LOCAL, 1);
20146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
20156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org   logln(calToStr(cal));
20166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org   if(cal.get(UCAL_YEAR, status) != 2003) {
20176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     errln("year not 2003");
20186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org   }
20196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
20206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org   cal.setFirstDayOfWeek(UCAL_MONDAY);
20216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org   cal.setMinimalDaysInFirstWeek(4);
20226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org   UDate t = 946713600000.;
20236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org   cal.setTime(t, status);
20246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org   cal.set(UCAL_DAY_OF_WEEK, 4);
20256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org   cal.set(UCAL_DOW_LOCAL, 6);
20266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org   if(cal.getTime(status) != t) {
20276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     logln(calToStr(cal));
20286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     errln("FAIL:  DOW_LOCAL did not take precedence");
20296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org   }
20306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
20316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}
20326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
20336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid CalendarTest::TestJD()
20346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{
20356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  int32_t jd;
20366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  static const int32_t kEpochStartAsJulianDay = 2440588;
20376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  UErrorCode status = U_ZERO_ERROR;
20386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  GregorianCalendar cal(status);
20396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  if (failure(status, "construct GregorianCalendar", TRUE)) return;
20406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  cal.setTimeZone(*TimeZone::getGMT());
20416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  cal.clear();
20426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  jd = cal.get(UCAL_JULIAN_DAY, status);
20436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  if(jd != kEpochStartAsJulianDay) {
20446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    errln("Wanted JD of %d at time=0, [epoch 1970] but got %d\n", kEpochStartAsJulianDay, jd);
20456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  } else {
20466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    logln("Wanted JD of %d at time=0, [epoch 1970], got %d\n", kEpochStartAsJulianDay, jd);
20476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  }
20486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
20496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  cal.setTime(Calendar::getNow(), status);
20506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  cal.clear();
20516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  cal.set(UCAL_JULIAN_DAY, kEpochStartAsJulianDay);
20526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  UDate epochTime = cal.getTime(status);
20536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  if(epochTime != 0) {
20546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    errln("Wanted time of 0 at jd=%d, got %.1lf\n", kEpochStartAsJulianDay, epochTime);
20556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  } else {
20566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    logln("Wanted time of 0 at jd=%d, got %.1lf\n", kEpochStartAsJulianDay, epochTime);
20576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  }
20586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
20596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}
20606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
20616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// make sure the ctestfw utilities are in sync with the Calendar
20626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid CalendarTest::TestDebug()
20636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{
20646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    for(int32_t  t=0;t<=UDBG_ENUM_COUNT;t++) {
20656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        int32_t count = udbg_enumCount((UDebugEnumType)t);
20666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        if(count == -1) {
20676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            logln("enumCount(%d) returned -1", count);
20686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            continue;
20696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        }
20706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        for(int32_t i=0;i<=count;i++) {
20716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            if(t<=UDBG_HIGHEST_CONTIGUOUS_ENUM && i<count) {
20726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                if( i!=udbg_enumArrayValue((UDebugEnumType)t, i)) {
20736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                    errln("FAIL: udbg_enumArrayValue(%d,%d) returned %d, expected %d", t, i, udbg_enumArrayValue((UDebugEnumType)t,i), i);
20746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                }
20756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            } else {
20766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                logln("Testing count+1:");
20776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            }
20786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                  const char *name = udbg_enumName((UDebugEnumType)t,i);
20796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                  if(name==NULL) {
20806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                          if(i==count || t>UDBG_HIGHEST_CONTIGUOUS_ENUM  ) {
20816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                                logln(" null name - expected.\n");
20826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                          } else {
20836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                                errln("FAIL: udbg_enumName(%d,%d) returned NULL", t, i);
20846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                          }
20856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                          name = "(null)";
20866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                  }
20876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org          logln("udbg_enumArrayValue(%d,%d) = %s, returned %d", t, i,
20886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                      name, udbg_enumArrayValue((UDebugEnumType)t,i));
20896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            logln("udbg_enumString = " + udbg_enumString((UDebugEnumType)t,i));
20906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        }
20916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        if(udbg_enumExpectedCount((UDebugEnumType)t) != count && t<=UDBG_HIGHEST_CONTIGUOUS_ENUM) {
20926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            errln("FAIL: udbg_enumExpectedCount(%d): %d, != UCAL_FIELD_COUNT=%d ", t, udbg_enumExpectedCount((UDebugEnumType)t), count);
20936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        } else {
20946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            logln("udbg_ucal_fieldCount: %d, UCAL_FIELD_COUNT=udbg_enumCount %d ", udbg_enumExpectedCount((UDebugEnumType)t), count);
20956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        }
20966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
20976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}
20986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
20996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
21006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#undef CHECK
21016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
21026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// List of interesting locales
21036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgconst char *CalendarTest::testLocaleID(int32_t i)
21046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{
21056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  switch(i) {
21066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  case 0: return "he_IL@calendar=hebrew";
21076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  case 1: return "en_US@calendar=hebrew";
21086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  case 2: return "fr_FR@calendar=hebrew";
21096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  case 3: return "fi_FI@calendar=hebrew";
21106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  case 4: return "nl_NL@calendar=hebrew";
21116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  case 5: return "hu_HU@calendar=hebrew";
21126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  case 6: return "nl_BE@currency=MTL;calendar=islamic";
21136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  case 7: return "th_TH_TRADITIONAL@calendar=gregorian";
21146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  case 8: return "ar_JO@calendar=islamic-civil";
21156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  case 9: return "fi_FI@calendar=islamic";
21166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  case 10: return "fr_CH@calendar=islamic-civil";
21176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  case 11: return "he_IL@calendar=islamic-civil";
21186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  case 12: return "hu_HU@calendar=buddhist";
21196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  case 13: return "hu_HU@calendar=islamic";
21206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  case 14: return "en_US@calendar=japanese";
21216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  default: return NULL;
21226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  }
21236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}
21246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
21256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgint32_t CalendarTest::testLocaleCount()
21266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{
21276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  static int32_t gLocaleCount = -1;
21286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  if(gLocaleCount < 0) {
21296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    int32_t i;
21306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    for(i=0;testLocaleID(i) != NULL;i++) {
21316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org      ;
21326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
21336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    gLocaleCount = i;
21346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  }
21356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  return gLocaleCount;
21366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}
21376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
21386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic UDate doMinDateOfCalendar(Calendar* adopt, UBool &isGregorian, UErrorCode& status) {
21396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  if(U_FAILURE(status)) return 0.0;
21406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
21416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  adopt->clear();
21426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  adopt->set(UCAL_EXTENDED_YEAR, adopt->getActualMinimum(UCAL_EXTENDED_YEAR, status));
21436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  UDate ret = adopt->getTime(status);
21446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  isGregorian = dynamic_cast<GregorianCalendar*>(adopt) != NULL;
21456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  delete adopt;
21466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  return ret;
21476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}
21486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
21496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUDate CalendarTest::minDateOfCalendar(const Locale& locale, UBool &isGregorian, UErrorCode& status) {
21506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  if(U_FAILURE(status)) return 0.0;
21516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  return doMinDateOfCalendar(Calendar::createInstance(locale, status), isGregorian, status);
21526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}
21536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
21546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUDate CalendarTest::minDateOfCalendar(const Calendar& cal, UBool &isGregorian, UErrorCode& status) {
21556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  if(U_FAILURE(status)) return 0.0;
21566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  return doMinDateOfCalendar(cal.clone(), isGregorian, status);
21576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}
21586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
21596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid CalendarTest::Test6703()
21606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{
21616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UErrorCode status = U_ZERO_ERROR;
21626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    Calendar *cal;
21636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
21646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    Locale loc1("en@calendar=fubar");
21656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    cal = Calendar::createInstance(loc1, status);
21666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if (failure(status, "Calendar::createInstance", TRUE)) return;
21676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    delete cal;
21686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
21696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    status = U_ZERO_ERROR;
21706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    Locale loc2("en");
21716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    cal = Calendar::createInstance(loc2, status);
21726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if (failure(status, "Calendar::createInstance")) return;
21736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    delete cal;
21746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
21756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    status = U_ZERO_ERROR;
21766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    Locale loc3("en@calendar=roc");
21776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    cal = Calendar::createInstance(loc3, status);
21786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if (failure(status, "Calendar::createInstance")) return;
21796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    delete cal;
21806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
21816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    return;
21826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}
21836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
21846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid CalendarTest::Test3785()
21856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{
21866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UErrorCode status = U_ZERO_ERROR;
21876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UnicodeString uzone = UNICODE_STRING_SIMPLE("Europe/Paris");
21886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UnicodeString exp1 = UNICODE_STRING_SIMPLE("Mon 30 Jumada II 1433 AH, 01:47:03");
21896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UnicodeString exp2 = UNICODE_STRING_SIMPLE("Mon 1 Rajab 1433 AH, 01:47:04");
21906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
21916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    LocalUDateFormatPointer df(udat_open(UDAT_NONE, UDAT_NONE, "en@calendar=islamic", uzone.getTerminatedBuffer(),
21926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                                         uzone.length(), NULL, 0, &status));
21936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if (df.isNull() || U_FAILURE(status)) return;
21946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
21956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UChar upattern[64];
21966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    u_uastrcpy(upattern, "EEE d MMMM y G, HH:mm:ss");
21976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    udat_applyPattern(df.getAlias(), FALSE, upattern, u_strlen(upattern));
21986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
21996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UChar ubuffer[1024];
22006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UDate ud0 = 1337557623000.0;
22016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
22026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    status = U_ZERO_ERROR;
22036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    udat_format(df.getAlias(), ud0, ubuffer, 1024, NULL, &status);
22046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if (U_FAILURE(status)) {
22056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        errln("Error formatting date 1\n");
22066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        return;
22076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
22086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    //printf("formatted: '%s'\n", mkcstr(ubuffer));
22096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
22106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UnicodeString act1(ubuffer);
22116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if ( act1 != exp1 ) {
22126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        errln("Unexpected result from date 1 format\n");
22136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
22146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    ud0 += 1000.0; // add one second
22156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
22166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    status = U_ZERO_ERROR;
22176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    udat_format(df.getAlias(), ud0, ubuffer, 1024, NULL, &status);
22186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if (U_FAILURE(status)) {
22196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        errln("Error formatting date 2\n");
22206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        return;
22216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
22226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    //printf("formatted: '%s'\n", mkcstr(ubuffer));
22236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UnicodeString act2(ubuffer);
22246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if ( act2 != exp2 ) {
22256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        errln("Unexpected result from date 2 format\n");
22266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
22276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
22286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    return;
22296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}
22306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
22316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid CalendarTest::Test1624() {
22326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UErrorCode status = U_ZERO_ERROR;
22336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    Locale loc("he_IL@calendar=hebrew");
22346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    HebrewCalendar hc(loc,status);
22356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
22366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    for (int32_t year = 5600; year < 5800; year++ ) {
22376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
22386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        for (int32_t month = HebrewCalendar::TISHRI; month <= HebrewCalendar::ELUL; month++) {
22396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            // skip the adar 1 month if year is not a leap year
22406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            if (HebrewCalendar::isLeapYear(year) == FALSE && month == HebrewCalendar::ADAR_1) {
22416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                continue;
22426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            }
22436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            int32_t day = 15;
22446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            hc.set(year,month,day);
22456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            int32_t dayHC = hc.get(UCAL_DATE,status);
22466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            int32_t monthHC = hc.get(UCAL_MONTH,status);
22476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            int32_t yearHC = hc.get(UCAL_YEAR,status);
22486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
22496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            if (failure(status, "HebrewCalendar.get()", TRUE)) continue;
22506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
22516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            if (dayHC != day) {
22526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                errln(" ==> day %d incorrect, should be: %d\n",dayHC,day);
22536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                break;
22546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            }
22556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            if (monthHC != month) {
22566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                errln(" ==> month %d incorrect, should be: %d\n",monthHC,month);
22576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                break;
22586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            }
22596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            if (yearHC != year) {
22606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                errln(" ==> day %d incorrect, should be: %d\n",yearHC,year);
22616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                break;
22626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            }
22636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        }
22646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
22656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    return;
22666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}
22676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
22686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid CalendarTest::TestTimeStamp() {
22696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UErrorCode status = U_ZERO_ERROR;
22706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UDate start = 0.0, time;
22716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    Calendar *cal;
22726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
22736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    // Create a new Gregorian Calendar.
22746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    cal = Calendar::createInstance("en_US@calender=gregorian", status);
22756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if (U_FAILURE(status)) {
22766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        dataerrln("Error creating Gregorian calendar.");
22776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        return;
22786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
22796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
22806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    for (int i = 0; i < 20000; i++) {
22816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        // Set the Gregorian Calendar to a specific date for testing.
22826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        cal->set(2009, UCAL_JULY, 3, 0, 49, 46);
22836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
22846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        time = cal->getTime(status);
22856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        if (U_FAILURE(status)) {
22866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            errln("Error calling getTime()");
22876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            break;
22886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        }
22896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
22906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        if (i == 0) {
22916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            start = time;
22926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        } else {
22936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            if (start != time) {
22946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                errln("start and time not equal.");
22956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                break;
22966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            }
22976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        }
22986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
22996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
23006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    delete cal;
23016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}
23026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
23036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid CalendarTest::TestISO8601() {
23046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    const char* TEST_LOCALES[] = {
23056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        "en_US@calendar=iso8601",
23066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        "en_US@calendar=Iso8601",
23076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        "th_TH@calendar=iso8601",
23086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        "ar_EG@calendar=iso8601",
23096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        NULL
23106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    };
23116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
23126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    int32_t TEST_DATA[][3] = {
23136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        {2008, 1, 2008},
23146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        {2009, 1, 2009},
23156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        {2010, 53, 2009},
23166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        {2011, 52, 2010},
23176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        {2012, 52, 2011},
23186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        {2013, 1, 2013},
23196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        {2014, 1, 2014},
23206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        {0, 0, 0},
23216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    };
23226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
23236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    for (int i = 0; TEST_LOCALES[i] != NULL; i++) {
23246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        UErrorCode status = U_ZERO_ERROR;
23256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        Calendar *cal = Calendar::createInstance(TEST_LOCALES[i], status);
23266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        if (U_FAILURE(status)) {
23276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            errln("Error: Failed to create a calendar for locale: %s", TEST_LOCALES[i]);
23286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            continue;
23296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        }
23306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        if (uprv_strcmp(cal->getType(), "gregorian") != 0) {
23316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            errln("Error: Gregorian calendar is not used for locale: %s", TEST_LOCALES[i]);
23326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            continue;
23336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        }
23346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        for (int j = 0; TEST_DATA[j][0] != 0; j++) {
23356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            cal->set(TEST_DATA[j][0], UCAL_JANUARY, 1);
23366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            int32_t weekNum = cal->get(UCAL_WEEK_OF_YEAR, status);
23376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            int32_t weekYear = cal->get(UCAL_YEAR_WOY, status);
23386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            if (U_FAILURE(status)) {
23396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                errln("Error: Failed to get week of year");
23406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                break;
23416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            }
23426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            if (weekNum != TEST_DATA[j][1] || weekYear != TEST_DATA[j][2]) {
23436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                errln("Error: Incorrect week of year on January 1st, %d for locale %s: Returned [weekNum=%d, weekYear=%d], Expected [weekNum=%d, weekYear=%d]",
23446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                    TEST_DATA[j][0], TEST_LOCALES[i], weekNum, weekYear, TEST_DATA[j][1], TEST_DATA[j][2]);
23456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            }
23466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        }
23476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        delete cal;
23486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
23496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
23506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}
23516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
23526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid
23536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgCalendarTest::TestAmbiguousWallTimeAPIs(void) {
23546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UErrorCode status = U_ZERO_ERROR;
23556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    Calendar* cal = Calendar::createInstance(status);
23566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if (U_FAILURE(status)) {
23576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        errln("Fail: Error creating a calendar instance.");
23586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        return;
23596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
23606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
23616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if (cal->getRepeatedWallTimeOption() != UCAL_WALLTIME_LAST) {
23626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        errln("Fail: Default repeted time option is not UCAL_WALLTIME_LAST");
23636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
23646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if (cal->getSkippedWallTimeOption() != UCAL_WALLTIME_LAST) {
23656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        errln("Fail: Default skipped time option is not UCAL_WALLTIME_LAST");
23666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
23676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
23686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    Calendar* cal2 = cal->clone();
23696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
23706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if (*cal != *cal2) {
23716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        errln("Fail: Cloned calendar != the original");
23726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
23736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if (!cal->equals(*cal2, status)) {
23746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        errln("Fail: The time of cloned calendar is not equal to the original");
23756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    } else if (U_FAILURE(status)) {
23766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        errln("Fail: Error equals");
23776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
23786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    status = U_ZERO_ERROR;
23796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
23806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    cal2->setRepeatedWallTimeOption(UCAL_WALLTIME_FIRST);
23816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    cal2->setSkippedWallTimeOption(UCAL_WALLTIME_FIRST);
23826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
23836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if (*cal == *cal2) {
23846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        errln("Fail: Cloned and modified calendar == the original");
23856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
23866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if (!cal->equals(*cal2, status)) {
23876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        errln("Fail: The time of cloned calendar is not equal to the original after changing wall time options");
23886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    } else if (U_FAILURE(status)) {
23896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        errln("Fail: Error equals after changing wall time options");
23906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
23916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    status = U_ZERO_ERROR;
23926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
23936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if (cal2->getRepeatedWallTimeOption() != UCAL_WALLTIME_FIRST) {
23946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        errln("Fail: Repeted time option is not UCAL_WALLTIME_FIRST");
23956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
23966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if (cal2->getSkippedWallTimeOption() != UCAL_WALLTIME_FIRST) {
23976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        errln("Fail: Skipped time option is not UCAL_WALLTIME_FIRST");
23986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
23996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
24006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    cal2->setRepeatedWallTimeOption(UCAL_WALLTIME_NEXT_VALID);
24016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if (cal2->getRepeatedWallTimeOption() != UCAL_WALLTIME_FIRST) {
24026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        errln("Fail: Repeated wall time option was updated other than UCAL_WALLTIME_FIRST");
24036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
24046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
24056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    delete cal;
24066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    delete cal2;
24076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}
24086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
24096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgclass CalFields {
24106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgpublic:
24116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    CalFields(int32_t year, int32_t month, int32_t day, int32_t hour, int32_t min, int32_t sec);
24126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    CalFields(const Calendar& cal, UErrorCode& status);
24136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    void setTo(Calendar& cal) const;
24146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    char* toString(char* buf, int32_t len) const;
24156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UBool operator==(const CalFields& rhs) const;
24166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UBool operator!=(const CalFields& rhs) const;
24176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
24186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgprivate:
24196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    int32_t year;
24206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    int32_t month;
24216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    int32_t day;
24226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    int32_t hour;
24236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    int32_t min;
24246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    int32_t sec;
24256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org};
24266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
24276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgCalFields::CalFields(int32_t year, int32_t month, int32_t day, int32_t hour, int32_t min, int32_t sec)
24286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    : year(year), month(month), day(day), hour(hour), min(min), sec(sec) {
24296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}
24306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
24316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgCalFields::CalFields(const Calendar& cal, UErrorCode& status) {
24326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    year = cal.get(UCAL_YEAR, status);
24336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    month = cal.get(UCAL_MONTH, status) + 1;
24346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    day = cal.get(UCAL_DAY_OF_MONTH, status);
24356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    hour = cal.get(UCAL_HOUR_OF_DAY, status);
24366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    min = cal.get(UCAL_MINUTE, status);
24376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    sec = cal.get(UCAL_SECOND, status);
24386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}
24396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
24406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid
24416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgCalFields::setTo(Calendar& cal) const {
24426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    cal.clear();
24436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    cal.set(year, month - 1, day, hour, min, sec);
24446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}
24456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
24466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgchar*
24476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgCalFields::toString(char* buf, int32_t len) const {
24486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    char local[32];
24496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    sprintf(local, "%04d-%02d-%02d %02d:%02d:%02d", year, month, day, hour, min, sec);
24506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    uprv_strncpy(buf, local, len - 1);
24516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    buf[len - 1] = 0;
24526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    return buf;
24536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}
24546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
24556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUBool
24566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgCalFields::operator==(const CalFields& rhs) const {
24576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    return year == rhs.year
24586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        && month == rhs.month
24596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        && day == rhs.day
24606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        && hour == rhs.hour
24616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        && min == rhs.min
24626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        && sec == rhs.sec;
24636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}
24646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
24656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUBool
24666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgCalFields::operator!=(const CalFields& rhs) const {
24676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    return !(*this == rhs);
24686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}
24696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
24706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgtypedef struct {
24716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    const char*     tzid;
24726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    const CalFields in;
24736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    const CalFields expLastGMT;
24746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    const CalFields expFirstGMT;
24756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} RepeatedWallTimeTestData;
24766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
24776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic const RepeatedWallTimeTestData RPDATA[] =
24786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{
24796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    // Time zone            Input wall time                 WALLTIME_LAST in GMT            WALLTIME_FIRST in GMT
24806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    {"America/New_York",    CalFields(2011,11,6,0,59,59),   CalFields(2011,11,6,4,59,59),   CalFields(2011,11,6,4,59,59)},
24816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    {"America/New_York",    CalFields(2011,11,6,1,0,0),     CalFields(2011,11,6,6,0,0),     CalFields(2011,11,6,5,0,0)},
24826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    {"America/New_York",    CalFields(2011,11,6,1,0,1),     CalFields(2011,11,6,6,0,1),     CalFields(2011,11,6,5,0,1)},
24836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    {"America/New_York",    CalFields(2011,11,6,1,30,0),    CalFields(2011,11,6,6,30,0),    CalFields(2011,11,6,5,30,0)},
24846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    {"America/New_York",    CalFields(2011,11,6,1,59,59),   CalFields(2011,11,6,6,59,59),   CalFields(2011,11,6,5,59,59)},
24856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    {"America/New_York",    CalFields(2011,11,6,2,0,0),     CalFields(2011,11,6,7,0,0),     CalFields(2011,11,6,7,0,0)},
24866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    {"America/New_York",    CalFields(2011,11,6,2,0,1),     CalFields(2011,11,6,7,0,1),     CalFields(2011,11,6,7,0,1)},
24876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
24886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    {"Australia/Lord_Howe", CalFields(2011,4,3,1,29,59),    CalFields(2011,4,2,14,29,59),   CalFields(2011,4,2,14,29,59)},
24896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    {"Australia/Lord_Howe", CalFields(2011,4,3,1,30,0),     CalFields(2011,4,2,15,0,0),     CalFields(2011,4,2,14,30,0)},
24906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    {"Australia/Lord_Howe", CalFields(2011,4,3,1,45,0),     CalFields(2011,4,2,15,15,0),    CalFields(2011,4,2,14,45,0)},
24916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    {"Australia/Lord_Howe", CalFields(2011,4,3,1,59,59),    CalFields(2011,4,2,15,29,59),   CalFields(2011,4,2,14,59,59)},
24926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    {"Australia/Lord_Howe", CalFields(2011,4,3,2,0,0),      CalFields(2011,4,2,15,30,0),    CalFields(2011,4,2,15,30,0)},
24936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    {"Australia/Lord_Howe", CalFields(2011,4,3,2,0,1),      CalFields(2011,4,2,15,30,1),    CalFields(2011,4,2,15,30,1)},
24946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
24956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    {NULL,                  CalFields(0,0,0,0,0,0),         CalFields(0,0,0,0,0,0),          CalFields(0,0,0,0,0,0)}
24966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org};
24976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
24986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid CalendarTest::TestRepeatedWallTime(void) {
24996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UErrorCode status = U_ZERO_ERROR;
25006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    GregorianCalendar calGMT((const TimeZone&)*TimeZone::getGMT(), status);
25016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    GregorianCalendar calDefault(status);
25026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    GregorianCalendar calLast(status);
25036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    GregorianCalendar calFirst(status);
25046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
25056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if (U_FAILURE(status)) {
25066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        errln("Fail: Failed to create a calendar object.");
25076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        return;
25086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
25096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
25106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    calLast.setRepeatedWallTimeOption(UCAL_WALLTIME_LAST);
25116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    calFirst.setRepeatedWallTimeOption(UCAL_WALLTIME_FIRST);
25126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
25136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    for (int32_t i = 0; RPDATA[i].tzid != NULL; i++) {
25146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        char buf[32];
25156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        TimeZone *tz = TimeZone::createTimeZone(RPDATA[i].tzid);
25166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
25176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        // UCAL_WALLTIME_LAST
25186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        status = U_ZERO_ERROR;
25196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        calLast.setTimeZone(*tz);
25206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        RPDATA[i].in.setTo(calLast);
25216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        calGMT.setTime(calLast.getTime(status), status);
25226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        CalFields outLastGMT(calGMT, status);
25236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        if (U_FAILURE(status)) {
25246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            errln(UnicodeString("Fail: Failed to get/set time calLast/calGMT (UCAL_WALLTIME_LAST) - ")
25256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                + RPDATA[i].in.toString(buf, sizeof(buf)) + "[" + RPDATA[i].tzid + "]");
25266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        } else {
25276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            if (outLastGMT != RPDATA[i].expLastGMT) {
25286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                dataerrln(UnicodeString("Fail: UCAL_WALLTIME_LAST ") + RPDATA[i].in.toString(buf, sizeof(buf)) + "[" + RPDATA[i].tzid + "] is parsed as "
25296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                    + outLastGMT.toString(buf, sizeof(buf)) + "[GMT]. Expected: " + RPDATA[i].expLastGMT.toString(buf, sizeof(buf)) + "[GMT]");
25306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            }
25316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        }
25326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
25336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        // default
25346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        status = U_ZERO_ERROR;
25356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        calDefault.setTimeZone(*tz);
25366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        RPDATA[i].in.setTo(calDefault);
25376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        calGMT.setTime(calDefault.getTime(status), status);
25386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        CalFields outDefGMT(calGMT, status);
25396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        if (U_FAILURE(status)) {
25406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            errln(UnicodeString("Fail: Failed to get/set time calLast/calGMT (default) - ")
25416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                + RPDATA[i].in.toString(buf, sizeof(buf)) + "[" + RPDATA[i].tzid + "]");
25426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        } else {
25436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            if (outDefGMT != RPDATA[i].expLastGMT) {
25446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                dataerrln(UnicodeString("Fail: (default) ") + RPDATA[i].in.toString(buf, sizeof(buf)) + "[" + RPDATA[i].tzid + "] is parsed as "
25456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                    + outDefGMT.toString(buf, sizeof(buf)) + "[GMT]. Expected: " + RPDATA[i].expLastGMT.toString(buf, sizeof(buf)) + "[GMT]");
25466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            }
25476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        }
25486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
25496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        // UCAL_WALLTIME_FIRST
25506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        status = U_ZERO_ERROR;
25516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        calFirst.setTimeZone(*tz);
25526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        RPDATA[i].in.setTo(calFirst);
25536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        calGMT.setTime(calFirst.getTime(status), status);
25546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        CalFields outFirstGMT(calGMT, status);
25556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        if (U_FAILURE(status)) {
25566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            errln(UnicodeString("Fail: Failed to get/set time calLast/calGMT (UCAL_WALLTIME_FIRST) - ")
25576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                + RPDATA[i].in.toString(buf, sizeof(buf)) + "[" + RPDATA[i].tzid + "]");
25586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        } else {
25596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            if (outFirstGMT != RPDATA[i].expFirstGMT) {
25606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                dataerrln(UnicodeString("Fail: UCAL_WALLTIME_FIRST ") + RPDATA[i].in.toString(buf, sizeof(buf)) + "[" + RPDATA[i].tzid + "] is parsed as "
25616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                    + outFirstGMT.toString(buf, sizeof(buf)) + "[GMT]. Expected: " + RPDATA[i].expFirstGMT.toString(buf, sizeof(buf)) + "[GMT]");
25626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            }
25636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        }
25646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        delete tz;
25656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
25666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}
25676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
25686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgtypedef struct {
25696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    const char*     tzid;
25706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    const CalFields in;
25716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UBool           isValid;
25726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    const CalFields expLastGMT;
25736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    const CalFields expFirstGMT;
25746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    const CalFields expNextAvailGMT;
25756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} SkippedWallTimeTestData;
25766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
25776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic SkippedWallTimeTestData SKDATA[] =
25786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{
25796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     // Time zone           Input wall time                 valid?  WALLTIME_LAST in GMT            WALLTIME_FIRST in GMT           WALLTIME_NEXT_VALID in GMT
25806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    {"America/New_York",    CalFields(2011,3,13,1,59,59),   TRUE,   CalFields(2011,3,13,6,59,59),   CalFields(2011,3,13,6,59,59),   CalFields(2011,3,13,6,59,59)},
25816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    {"America/New_York",    CalFields(2011,3,13,2,0,0),     FALSE,  CalFields(2011,3,13,7,0,0),     CalFields(2011,3,13,6,0,0),     CalFields(2011,3,13,7,0,0)},
25826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    {"America/New_York",    CalFields(2011,3,13,2,1,0),     FALSE,  CalFields(2011,3,13,7,1,0),     CalFields(2011,3,13,6,1,0),     CalFields(2011,3,13,7,0,0)},
25836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    {"America/New_York",    CalFields(2011,3,13,2,30,0),    FALSE,  CalFields(2011,3,13,7,30,0),    CalFields(2011,3,13,6,30,0),    CalFields(2011,3,13,7,0,0)},
25846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    {"America/New_York",    CalFields(2011,3,13,2,59,59),   FALSE,  CalFields(2011,3,13,7,59,59),   CalFields(2011,3,13,6,59,59),   CalFields(2011,3,13,7,0,0)},
25856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    {"America/New_York",    CalFields(2011,3,13,3,0,0),     TRUE,   CalFields(2011,3,13,7,0,0),     CalFields(2011,3,13,7,0,0),     CalFields(2011,3,13,7,0,0)},
25866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
25876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    {"Pacific/Apia",        CalFields(2011,12,29,23,59,59), TRUE,   CalFields(2011,12,30,9,59,59),  CalFields(2011,12,30,9,59,59),  CalFields(2011,12,30,9,59,59)},
25886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    {"Pacific/Apia",        CalFields(2011,12,30,0,0,0),    FALSE,  CalFields(2011,12,30,10,0,0),   CalFields(2011,12,29,10,0,0),   CalFields(2011,12,30,10,0,0)},
25896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    {"Pacific/Apia",        CalFields(2011,12,30,12,0,0),   FALSE,  CalFields(2011,12,30,22,0,0),   CalFields(2011,12,29,22,0,0),   CalFields(2011,12,30,10,0,0)},
25906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    {"Pacific/Apia",        CalFields(2011,12,30,23,59,59), FALSE,  CalFields(2011,12,31,9,59,59),  CalFields(2011,12,30,9,59,59),  CalFields(2011,12,30,10,0,0)},
25916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    {"Pacific/Apia",        CalFields(2011,12,31,0,0,0),    TRUE,   CalFields(2011,12,30,10,0,0),   CalFields(2011,12,30,10,0,0),   CalFields(2011,12,30,10,0,0)},
25926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
25936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    {NULL,                  CalFields(0,0,0,0,0,0),         TRUE,   CalFields(0,0,0,0,0,0),         CalFields(0,0,0,0,0,0),         CalFields(0,0,0,0,0,0)}
25946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org};
25956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
25966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
25976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid CalendarTest::TestSkippedWallTime(void) {
25986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UErrorCode status = U_ZERO_ERROR;
25996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    GregorianCalendar calGMT((const TimeZone&)*TimeZone::getGMT(), status);
26006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    GregorianCalendar calDefault(status);
26016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    GregorianCalendar calLast(status);
26026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    GregorianCalendar calFirst(status);
26036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    GregorianCalendar calNextAvail(status);
26046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
26056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if (U_FAILURE(status)) {
26066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        errln("Fail: Failed to create a calendar object.");
26076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        return;
26086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
26096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
26106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    calLast.setSkippedWallTimeOption(UCAL_WALLTIME_LAST);
26116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    calFirst.setSkippedWallTimeOption(UCAL_WALLTIME_FIRST);
26126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    calNextAvail.setSkippedWallTimeOption(UCAL_WALLTIME_NEXT_VALID);
26136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
26146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    for (int32_t i = 0; SKDATA[i].tzid != NULL; i++) {
26156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        UDate d;
26166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        char buf[32];
26176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        TimeZone *tz = TimeZone::createTimeZone(SKDATA[i].tzid);
26186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
26196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        for (int32_t j = 0; j < 2; j++) {
26206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            UBool bLenient = (j == 0);
26216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
26226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            // UCAL_WALLTIME_LAST
26236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            status = U_ZERO_ERROR;
26246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            calLast.setLenient(bLenient);
26256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            calLast.setTimeZone(*tz);
26266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            SKDATA[i].in.setTo(calLast);
26276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            d = calLast.getTime(status);
26286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            if (bLenient || SKDATA[i].isValid) {
26296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                calGMT.setTime(d, status);
26306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                CalFields outLastGMT(calGMT, status);
26316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                if (U_FAILURE(status)) {
26326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                    errln(UnicodeString("Fail: Failed to get/set time calLast/calGMT (UCAL_WALLTIME_LAST) - ")
26336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                        + SKDATA[i].in.toString(buf, sizeof(buf)) + "[" + SKDATA[i].tzid + "]");
26346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                } else {
26356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                    if (outLastGMT != SKDATA[i].expLastGMT) {
26366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                        dataerrln(UnicodeString("Fail: UCAL_WALLTIME_LAST ") + SKDATA[i].in.toString(buf, sizeof(buf)) + "[" + SKDATA[i].tzid + "] is parsed as "
26376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                            + outLastGMT.toString(buf, sizeof(buf)) + "[GMT]. Expected: " + SKDATA[i].expLastGMT.toString(buf, sizeof(buf)) + "[GMT]");
26386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                    }
26396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                }
26406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            } else if (U_SUCCESS(status)) {
26416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                // strict, invalid wall time - must report an error
26426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                dataerrln(UnicodeString("Fail: An error expected (UCAL_WALLTIME_LAST)") +
26436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                    + SKDATA[i].in.toString(buf, sizeof(buf)) + "[" + SKDATA[i].tzid + "]");
26446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            }
26456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
26466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            // default
26476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            status = U_ZERO_ERROR;
26486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            calDefault.setLenient(bLenient);
26496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            calDefault.setTimeZone(*tz);
26506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            SKDATA[i].in.setTo(calDefault);
26516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            d = calDefault.getTime(status);
26526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            if (bLenient || SKDATA[i].isValid) {
26536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                calGMT.setTime(d, status);
26546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                CalFields outDefGMT(calGMT, status);
26556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                if (U_FAILURE(status)) {
26566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                    errln(UnicodeString("Fail: Failed to get/set time calDefault/calGMT (default) - ")
26576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                        + SKDATA[i].in.toString(buf, sizeof(buf)) + "[" + SKDATA[i].tzid + "]");
26586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                } else {
26596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                    if (outDefGMT != SKDATA[i].expLastGMT) {
26606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                        dataerrln(UnicodeString("Fail: (default) ") + SKDATA[i].in.toString(buf, sizeof(buf)) + "[" + SKDATA[i].tzid + "] is parsed as "
26616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                            + outDefGMT.toString(buf, sizeof(buf)) + "[GMT]. Expected: " + SKDATA[i].expLastGMT.toString(buf, sizeof(buf)) + "[GMT]");
26626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                    }
26636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                }
26646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            } else if (U_SUCCESS(status)) {
26656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                // strict, invalid wall time - must report an error
26666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                dataerrln(UnicodeString("Fail: An error expected (default)") +
26676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                    + SKDATA[i].in.toString(buf, sizeof(buf)) + "[" + SKDATA[i].tzid + "]");
26686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            }
26696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
26706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            // UCAL_WALLTIME_FIRST
26716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            status = U_ZERO_ERROR;
26726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            calFirst.setLenient(bLenient);
26736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            calFirst.setTimeZone(*tz);
26746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            SKDATA[i].in.setTo(calFirst);
26756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            d = calFirst.getTime(status);
26766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            if (bLenient || SKDATA[i].isValid) {
26776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                calGMT.setTime(d, status);
26786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                CalFields outFirstGMT(calGMT, status);
26796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                if (U_FAILURE(status)) {
26806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                    errln(UnicodeString("Fail: Failed to get/set time calFirst/calGMT (UCAL_WALLTIME_FIRST) - ")
26816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                        + SKDATA[i].in.toString(buf, sizeof(buf)) + "[" + SKDATA[i].tzid + "]");
26826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                } else {
26836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                    if (outFirstGMT != SKDATA[i].expFirstGMT) {
26846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                        dataerrln(UnicodeString("Fail: UCAL_WALLTIME_FIRST ") + SKDATA[i].in.toString(buf, sizeof(buf)) + "[" + SKDATA[i].tzid + "] is parsed as "
26856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                            + outFirstGMT.toString(buf, sizeof(buf)) + "[GMT]. Expected: " + SKDATA[i].expFirstGMT.toString(buf, sizeof(buf)) + "[GMT]");
26866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                    }
26876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                }
26886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            } else if (U_SUCCESS(status)) {
26896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                // strict, invalid wall time - must report an error
26906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                dataerrln(UnicodeString("Fail: An error expected (UCAL_WALLTIME_FIRST)") +
26916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                    + SKDATA[i].in.toString(buf, sizeof(buf)) + "[" + SKDATA[i].tzid + "]");
26926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            }
26936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
26946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            // UCAL_WALLTIME_NEXT_VALID
26956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            status = U_ZERO_ERROR;
26966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            calNextAvail.setLenient(bLenient);
26976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            calNextAvail.setTimeZone(*tz);
26986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            SKDATA[i].in.setTo(calNextAvail);
26996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            d = calNextAvail.getTime(status);
27006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            if (bLenient || SKDATA[i].isValid) {
27016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                calGMT.setTime(d, status);
27026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                CalFields outNextAvailGMT(calGMT, status);
27036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                if (U_FAILURE(status)) {
27046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                    errln(UnicodeString("Fail: Failed to get/set time calNextAvail/calGMT (UCAL_WALLTIME_NEXT_VALID) - ")
27056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                        + SKDATA[i].in.toString(buf, sizeof(buf)) + "[" + SKDATA[i].tzid + "]");
27066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                } else {
27076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                    if (outNextAvailGMT != SKDATA[i].expNextAvailGMT) {
27086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                        dataerrln(UnicodeString("Fail: UCAL_WALLTIME_NEXT_VALID ") + SKDATA[i].in.toString(buf, sizeof(buf)) + "[" + SKDATA[i].tzid + "] is parsed as "
27096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                            + outNextAvailGMT.toString(buf, sizeof(buf)) + "[GMT]. Expected: " + SKDATA[i].expNextAvailGMT.toString(buf, sizeof(buf)) + "[GMT]");
27106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                    }
27116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                }
27126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            } else if (U_SUCCESS(status)) {
27136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                // strict, invalid wall time - must report an error
27146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                dataerrln(UnicodeString("Fail: An error expected (UCAL_WALLTIME_NEXT_VALID)") +
27156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                    + SKDATA[i].in.toString(buf, sizeof(buf)) + "[" + SKDATA[i].tzid + "]");
27166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            }
27176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        }
27186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
27196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        delete tz;
27206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
27216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}
27226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
27236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid CalendarTest::TestCloneLocale(void) {
27246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  UErrorCode status = U_ZERO_ERROR;
27256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  LocalPointer<Calendar>  cal(Calendar::createInstance(TimeZone::getGMT()->clone(),
27266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                                                       Locale::createFromName("en"), status));
27276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  TEST_CHECK_STATUS;
27286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  Locale l0 = cal->getLocale(ULOC_VALID_LOCALE, status);
27296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  TEST_CHECK_STATUS;
27306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  LocalPointer<Calendar> cal2(cal->clone());
27316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  Locale l = cal2->getLocale(ULOC_VALID_LOCALE, status);
27326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  if(l0!=l) {
27336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    errln("Error: cloned locale %s != original locale %s, status %s\n", l0.getName(), l.getName(), u_errorName(status));
27346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  }
27356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  TEST_CHECK_STATUS;
27366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}
27376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
27386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid CalendarTest::setAndTestCalendar(Calendar* cal, int32_t initMonth, int32_t initDay, int32_t initYear, UErrorCode& status) {
27396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        cal->clear();
27406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        cal->setLenient(FALSE);
27416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        cal->set(initYear, initMonth, initDay);
27426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        int32_t day = cal->get(UCAL_DAY_OF_MONTH, status);
27436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        int32_t month = cal->get(UCAL_MONTH, status);
27446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        int32_t year = cal->get(UCAL_YEAR, status);
27456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        if(U_FAILURE(status))
27466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            return;
27476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
27486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        if(initDay != day || initMonth != month || initYear != year)
27496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        {
27506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            errln(" year init values:\tmonth %i\tday %i\tyear %i", initMonth, initDay, initYear);
27516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            errln("values post set():\tmonth %i\tday %i\tyear %i",month, day, year);
27526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        }
27536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}
27546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
27556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid CalendarTest::setAndTestWholeYear(Calendar* cal, int32_t startYear, UErrorCode& status) {
27566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        for(int32_t startMonth = 0; startMonth < 12; startMonth++) {
27576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            for(int32_t startDay = 1; startDay < 31; startDay++ ) {
27586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                    setAndTestCalendar(cal, startMonth, startDay, startYear, status);
27596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                    if(U_FAILURE(status) && startDay == 30) {
27606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                        status = U_ZERO_ERROR;
27616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                        continue;
27626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                    }
27636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                    TEST_CHECK_STATUS;
27646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            }
27656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        }
27666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}
27676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
27686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
27696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid CalendarTest::TestIslamicUmAlQura() {
27706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
27716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UErrorCode status = U_ZERO_ERROR;
27726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    Locale islamicLoc("ar_SA@calendar=islamic-umalqura");
27736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    Calendar* tstCal = Calendar::createInstance(islamicLoc, status);
27746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
27756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    IslamicCalendar* iCal = (IslamicCalendar*)tstCal;
27766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if(strcmp(iCal->getType(), "islamic-umalqura") != 0) {
27776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        errln("wrong type of calendar created - %s", iCal->getType());
27786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
27796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
27806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
27816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    int32_t firstYear = 1318;
27826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    int32_t lastYear = 1368;    // just enough to be pretty sure
27836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    //int32_t lastYear = 1480;    // the whole shootin' match
27846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
27856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    tstCal->clear();
27866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    tstCal->setLenient(FALSE);
27876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
27886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    int32_t day=0, month=0, year=0, initDay = 27, initMonth = IslamicCalendar::RAJAB, initYear = 1434;
27896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
27906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    for( int32_t startYear = firstYear; startYear <= lastYear; startYear++) {
27916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        setAndTestWholeYear(tstCal, startYear, status);
27926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        status = U_ZERO_ERROR;
27936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
27946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
27956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    initMonth = IslamicCalendar::RABI_2;
27966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    initDay = 5;
27976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    int32_t loopCnt = 25;
27986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    tstCal->clear();
27996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    setAndTestCalendar( tstCal, initMonth, initDay, initYear, status);
28006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    TEST_CHECK_STATUS;
28016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
28026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    for(int x=1; x<=loopCnt; x++) {
28036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        day = tstCal->get(UCAL_DAY_OF_MONTH,status);
28046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        month = tstCal->get(UCAL_MONTH,status);
28056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        year = tstCal->get(UCAL_YEAR,status);
28066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        TEST_CHECK_STATUS;
28076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        tstCal->roll(UCAL_DAY_OF_MONTH, (UBool)TRUE, status);
28086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        TEST_CHECK_STATUS;
28096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
28106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
28116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if(day != (initDay + loopCnt - 1) || month != IslamicCalendar::RABI_2 || year != 1434)
28126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org      errln("invalid values for RABI_2 date after roll of %d", loopCnt);
28136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
28146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    status = U_ZERO_ERROR;
28156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    tstCal->clear();
28166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    initMonth = 2;
28176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    initDay = 30;
28186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    setAndTestCalendar( tstCal, initMonth, initDay, initYear, status);
28196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if(U_SUCCESS(status)) {
28206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        errln("error NOT detected status %i",status);
28216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        errln("      init values:\tmonth %i\tday %i\tyear %i", initMonth, initDay, initYear);
28226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        int32_t day = tstCal->get(UCAL_DAY_OF_MONTH, status);
28236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        int32_t month = tstCal->get(UCAL_MONTH, status);
28246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        int32_t year = tstCal->get(UCAL_YEAR, status);
28256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        errln("values post set():\tmonth %i\tday %i\tyear %i",month, day, year);
28266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
28276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
28286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    status = U_ZERO_ERROR;
28296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    tstCal->clear();
28306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    initMonth = 3;
28316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    initDay = 30;
28326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    setAndTestCalendar( tstCal, initMonth, initDay, initYear, status);
28336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    TEST_CHECK_STATUS;
28346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
28356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    SimpleDateFormat* formatter = new SimpleDateFormat("yyyy-MM-dd", Locale::getUS(), status);
28366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UDate date = formatter->parse("1975-05-06", status);
28376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    Calendar* is_cal = Calendar::createInstance(islamicLoc, status);
28386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    is_cal->setTime(date, status);
28396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    int32_t is_day = is_cal->get(UCAL_DAY_OF_MONTH,status);
28406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    int32_t is_month = is_cal->get(UCAL_MONTH,status);
28416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    int32_t is_year = is_cal->get(UCAL_YEAR,status);
28426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    TEST_CHECK_STATUS;
28436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if(is_day != 29 || is_month != IslamicCalendar::RABI_2 || is_year != 1395)
28446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        errln("unexpected conversion date month %i not %i or day %i not 20 or year %i not 1395", is_month, IslamicCalendar::RABI_2, is_day, is_year);
28456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
28466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UDate date2 = is_cal->getTime(status);
28476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    TEST_CHECK_STATUS;
28486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if(date2 != date) {
28496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        errln("before(%f) and after(%f) dates don't match up!",date, date2);
28506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
28516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
28526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    delete is_cal;
28536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    delete formatter;
28546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    delete tstCal;
28556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}
28566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
28576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid CalendarTest::TestIslamicTabularDates() {
28586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UErrorCode status = U_ZERO_ERROR;
28596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    Locale islamicLoc("ar_SA@calendar=islamic-civil");
28606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    Locale tblaLoc("ar_SA@calendar=islamic-tbla");
28616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    SimpleDateFormat* formatter = new SimpleDateFormat("yyyy-MM-dd", Locale::getUS(), status);
28626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UDate date = formatter->parse("1975-05-06", status);
28636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
28646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    Calendar* tstCal = Calendar::createInstance(islamicLoc, status);
28656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    tstCal->setTime(date, status);
28666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    int32_t is_day = tstCal->get(UCAL_DAY_OF_MONTH,status);
28676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    int32_t is_month = tstCal->get(UCAL_MONTH,status);
28686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    int32_t is_year = tstCal->get(UCAL_YEAR,status);
28696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    TEST_CHECK_STATUS;
28706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    delete tstCal;
28716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
28726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    tstCal = Calendar::createInstance(tblaLoc, status);
28736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    tstCal->setTime(date, status);
28746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    int32_t tbla_day = tstCal->get(UCAL_DAY_OF_MONTH,status);
28756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    int32_t tbla_month = tstCal->get(UCAL_MONTH,status);
28766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    int32_t tbla_year = tstCal->get(UCAL_YEAR,status);
28776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    TEST_CHECK_STATUS;
28786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
28796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if(tbla_month != is_month || tbla_year != is_year)
28806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        errln("unexpected difference between islamic and tbla month %d : %d and/or year %d : %d",tbla_month,is_month,tbla_year,is_year);
28816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
28826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if(tbla_day - is_day != 1)
28836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        errln("unexpected day difference between islamic and tbla: %d : %d ",tbla_day,is_day);
28846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    delete tstCal;
28856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    delete formatter;
28866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}
28876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
28886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
28896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif /* #if !UCONFIG_NO_FORMATTING */
28906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
28916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org//eof
2892