16f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/*
26f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org**********************************************************************
36f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* Copyright (c) 2010-2011,International Business Machines
46f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* Corporation and others.  All Rights Reserved.
56f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org**********************************************************************
66f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org**********************************************************************
76f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*/
86f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
96f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#ifndef _DTFMTRTPERF_H
106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define _DTFMTRTPERF_H
116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/utypes.h"
136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/uperf.h"
146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/timezone.h"
156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/simpletz.h"
166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/calendar.h"
176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/strenum.h"
186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/smpdtfmt.h"
196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/uchar.h"
206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/basictz.h"
216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "cstring.h"
226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/uperf.h"
246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/unistr.h"
256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/datefmt.h"
266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/calendar.h"
276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/uclean.h"
286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/brkiter.h"
296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "util.h"
306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic const char* PATTERNS[] = {"z", "zzzz", "Z", "ZZZZ", "v", "vvvv", "V", "VVVV"};
326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic const int NUM_PATTERNS = sizeof(PATTERNS)/sizeof(const char*);
336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include <iostream>
356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include <stdlib.h>
366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include <fstream>
376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include <string>
386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgusing namespace std;
396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org//  Stubs for Windows API functions when building on UNIXes.
416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org//
426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#if U_PLATFORM_USES_ONLY_WIN32_API
436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// do nothing
446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#else
456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define _UNICODE
466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgtypedef int DWORD;
476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orginline int FoldStringW(DWORD dwMapFlags, const UChar* lpSrcStr,int cchSrc, UChar* lpDestStr,int cchDest);
486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif
496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgclass DateTimeRoundTripFunction : public UPerfFunction
516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{
526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgprivate:
536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org	int nLocales;
546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgpublic:
556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org	DateTimeRoundTripFunction()
576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org	{
586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org		nLocales = 0;
596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org	}
606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org	DateTimeRoundTripFunction(int locs)
626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org	{
636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org		nLocales = locs;
646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org	}
656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org	virtual void call(UErrorCode* status)
676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org	{
686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        *status = U_ZERO_ERROR;
696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        SimpleTimeZone unknownZone(-31415, (UnicodeString)"Etc/Unknown");
716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        int32_t badDstOffset = -1234;
726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        int32_t badZoneOffset = -2345;
736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        int32_t testDateData[][3] = {
756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            {2007, 1, 15},
766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            {2007, 6, 15},
776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            {1990, 1, 15},
786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            {1990, 6, 15},
796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            {1960, 1, 15},
806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            {1960, 6, 15},
816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        };
826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        Calendar *cal = Calendar::createInstance(*status);
846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        if (U_FAILURE(*status)) {
856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            //dataerrln("Calendar::createInstance failed: %s", u_errorName(*status));
866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            return;
876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        }
886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        // Set up rule equivalency test range
906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        UDate low, high;
916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        cal->set(1900, UCAL_JANUARY, 1);
926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        low = cal->getTime(*status);
936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        cal->set(2040, UCAL_JANUARY, 1);
946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        high = cal->getTime(*status);
956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        if (U_FAILURE(*status)) {
966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            //errln("getTime failed");
976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            return;
986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        }
996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        // Set up test dates
1016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        UDate DATES[(sizeof(testDateData)/sizeof(int32_t))/3];
1026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        const int32_t nDates = (sizeof(testDateData)/sizeof(int32_t))/3;
1036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        cal->clear();
1046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        for (int32_t i = 0; i < nDates; i++) {
1056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            cal->set(testDateData[i][0], testDateData[i][1], testDateData[i][2]);
1066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            DATES[i] = cal->getTime(*status);
1076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            if (U_FAILURE(*status)) {
1086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                //errln("getTime failed");
1096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                return;
1106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            }
1116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        }
1126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        // Set up test locales
1146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        const Locale testLocales[] = {
1156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            Locale("en"),
1166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            Locale("en_US"),
1176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            Locale("en_AU"),
1186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            Locale("de_DE"),
1196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            Locale("fr"),
1206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            Locale("ja_JP"),
1216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            Locale("ko"),
1226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            Locale("pt"),
1236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            Locale("th_TH"),
1246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            Locale("zh_Hans"),
1256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            Locale("it"),
1276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            Locale("en"),
1296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            Locale("en_US"),
1306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            Locale("en_AU"),
1316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            Locale("de_DE"),
1326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            Locale("fr"),
1336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            Locale("ja_JP"),
1346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            Locale("ko"),
1356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            Locale("pt"),
1366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            Locale("th_TH"),
1376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            Locale("zh_Hans"),
1386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        };
1396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        const Locale *LOCALES;
1416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        LOCALES = testLocales;
1426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        StringEnumeration *tzids = TimeZone::createEnumeration();
1446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        if (U_FAILURE(*status)) {
1456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            //errln("tzids->count failed");
1466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            return;
1476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        }
1486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        // Run the roundtrip test
1506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        for (int32_t locidx = 0; locidx < nLocales; locidx++) {
1516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            for (int32_t patidx = 0; patidx < NUM_PATTERNS; patidx++) {
1526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                SimpleDateFormat *sdf = new SimpleDateFormat((UnicodeString)PATTERNS[patidx], LOCALES[locidx], *status);
1536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                if (U_FAILURE(*status)) {
1546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                    //errcheckln(*status, (UnicodeString)"new SimpleDateFormat failed for pattern " +
1556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                    //    PATTERNS[patidx] + " for locale " + LOCALES[locidx].getName() + " - " + u_errorName(*status));
1566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                    *status = U_ZERO_ERROR;
1576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                    continue;
1586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                }
1596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                tzids->reset(*status);
1616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                const UnicodeString *tzid;
1626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                while ((tzid = tzids->snext(*status))) {
1636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                    TimeZone *tz = TimeZone::createTimeZone(*tzid);
1646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                    for (int32_t datidx = 0; datidx < nDates; datidx++) {
1666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                        UnicodeString tzstr;
1676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                        FieldPosition fpos(0);
1686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                        // Format
1706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                        sdf->setTimeZone(*tz);
1716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                        sdf->format(DATES[datidx], tzstr, fpos);
1726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                        // Before parse, set unknown zone to SimpleDateFormat instance
1746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                        // just for making sure that it does not depends on the time zone
1756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                        // originally set.
1766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                        sdf->setTimeZone(unknownZone);
1776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                        // Parse
1796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                        ParsePosition pos(0);
1806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                        Calendar *outcal = Calendar::createInstance(unknownZone, *status);
1816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                        if (U_FAILURE(*status)) {
1826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                            //errln("Failed to create an instance of calendar for receiving parse result.");
1836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                            *status = U_ZERO_ERROR;
1846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                            continue;
1856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                        }
1866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                        outcal->set(UCAL_DST_OFFSET, badDstOffset);
1876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                        outcal->set(UCAL_ZONE_OFFSET, badZoneOffset);
1886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                        sdf->parse(tzstr, *outcal, pos);
1896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                        // clean loop
1916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                        delete outcal;
1926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                    }
1946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                    delete tz;
1956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                    // break  time zone loop
1966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                    break;
1976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                }
1996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                delete sdf;
2006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            }
2016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        }
2026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        delete cal;
2036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        delete tzids;
2046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
2056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org	}
2066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
2076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org	virtual long getOperationsPerIteration()
2086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org	{
2096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org		return NUM_PATTERNS * nLocales * 6;
2106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org	}
2116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org};
2126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
2136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
2146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgclass DateTimeRoundTripPerfTest : public UPerfTest
2156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{
2166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgprivate:
2176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
2186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgpublic:
2196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
2206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org	DateTimeRoundTripPerfTest(int32_t argc, const char* argv[], UErrorCode& status);
2216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org	~DateTimeRoundTripPerfTest();
2226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org	virtual UPerfFunction* runIndexedTest(int32_t index, UBool exec,const char* &name, char* par);
2236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
2246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org	UPerfFunction* RoundTripLocale1();
2256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org	UPerfFunction* RoundTripLocale10();
2266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org	UPerfFunction* RoundTripLocale11();
2276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org	UPerfFunction* RoundTripLocale21();
2286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org};
2296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
2306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
2316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif // DateTimeRoundTripPerfTest