Index: icu46/source/test/perf/normperf/dtfmtrtperf.h |
=================================================================== |
--- icu46/source/test/perf/normperf/dtfmtrtperf.h (revision 0) |
+++ icu46/source/test/perf/normperf/dtfmtrtperf.h (revision 0) |
@@ -0,0 +1,231 @@ |
+/* |
+********************************************************************** |
+* Copyright (c) 2010,International Business Machines |
+* Corporation and others. All Rights Reserved. |
+********************************************************************** |
+********************************************************************** |
+*/ |
+ |
+#ifndef _DTFMTRTPERF_H |
+#define _DTFMTRTPERF_H |
+ |
+#include "unicode/utypes.h" |
+#include "unicode/uperf.h" |
+#include "unicode/timezone.h" |
+#include "unicode/simpletz.h" |
+#include "unicode/calendar.h" |
+#include "unicode/strenum.h" |
+#include "unicode/smpdtfmt.h" |
+#include "unicode/uchar.h" |
+#include "unicode/basictz.h" |
+#include "cstring.h" |
+ |
+#include "unicode/uperf.h" |
+#include "unicode/unistr.h" |
+#include "unicode/datefmt.h" |
+#include "unicode/calendar.h" |
+#include "unicode/uclean.h" |
+#include "unicode/brkiter.h" |
+#include "util.h" |
+ |
+static const char* PATTERNS[] = {"z", "zzzz", "Z", "ZZZZ", "v", "vvvv", "V", "VVVV"}; |
+static const int NUM_PATTERNS = sizeof(PATTERNS)/sizeof(const char*); |
+ |
+#include <iostream> |
+#include <stdlib.h> |
+#include <fstream> |
+#include <string> |
+using namespace std; |
+ |
+// Stubs for Windows API functions when building on UNIXes. |
+// |
+#if defined(U_WINDOWS) |
+// do nothing |
+#else |
+#define _UNICODE |
+typedef int DWORD; |
+inline int FoldStringW(DWORD dwMapFlags, const UChar* lpSrcStr,int cchSrc, UChar* lpDestStr,int cchDest); |
+#endif |
+ |
+class DateTimeRoundTripFunction : public UPerfFunction |
+{ |
+private: |
+ int nLocales; |
+public: |
+ |
+ DateTimeRoundTripFunction() |
+ { |
+ nLocales = 0; |
+ } |
+ |
+ DateTimeRoundTripFunction(int locs) |
+ { |
+ nLocales = locs; |
+ } |
+ |
+ virtual void call(UErrorCode* status) |
+ { |
+ *status = U_ZERO_ERROR; |
+ |
+ SimpleTimeZone unknownZone(-31415, (UnicodeString)"Etc/Unknown"); |
+ int32_t badDstOffset = -1234; |
+ int32_t badZoneOffset = -2345; |
+ |
+ int32_t testDateData[][3] = { |
+ {2007, 1, 15}, |
+ {2007, 6, 15}, |
+ {1990, 1, 15}, |
+ {1990, 6, 15}, |
+ {1960, 1, 15}, |
+ {1960, 6, 15}, |
+ }; |
+ |
+ Calendar *cal = Calendar::createInstance(*status); |
+ if (U_FAILURE(*status)) { |
+ //dataerrln("Calendar::createInstance failed: %s", u_errorName(*status)); |
+ return; |
+ } |
+ |
+ // Set up rule equivalency test range |
+ UDate low, high; |
+ cal->set(1900, UCAL_JANUARY, 1); |
+ low = cal->getTime(*status); |
+ cal->set(2040, UCAL_JANUARY, 1); |
+ high = cal->getTime(*status); |
+ if (U_FAILURE(*status)) { |
+ //errln("getTime failed"); |
+ return; |
+ } |
+ |
+ // Set up test dates |
+ UDate DATES[(sizeof(testDateData)/sizeof(int32_t))/3]; |
+ const int32_t nDates = (sizeof(testDateData)/sizeof(int32_t))/3; |
+ cal->clear(); |
+ for (int32_t i = 0; i < nDates; i++) { |
+ cal->set(testDateData[i][0], testDateData[i][1], testDateData[i][2]); |
+ DATES[i] = cal->getTime(*status); |
+ if (U_FAILURE(*status)) { |
+ //errln("getTime failed"); |
+ return; |
+ } |
+ } |
+ |
+ // Set up test locales |
+ const Locale testLocales[] = { |
+ Locale("en"), |
+ Locale("en_US"), |
+ Locale("en_AU"), |
+ Locale("de_DE"), |
+ Locale("fr"), |
+ Locale("ja_JP"), |
+ Locale("ko"), |
+ Locale("pt"), |
+ Locale("th_TH"), |
+ Locale("zh_Hans"), |
+ |
+ Locale("it"), |
+ |
+ Locale("en"), |
+ Locale("en_US"), |
+ Locale("en_AU"), |
+ Locale("de_DE"), |
+ Locale("fr"), |
+ Locale("ja_JP"), |
+ Locale("ko"), |
+ Locale("pt"), |
+ Locale("th_TH"), |
+ Locale("zh_Hans"), |
+ }; |
+ |
+ const Locale *LOCALES; |
+ LOCALES = testLocales; |
+ |
+ StringEnumeration *tzids = TimeZone::createEnumeration(); |
+ if (U_FAILURE(*status)) { |
+ //errln("tzids->count failed"); |
+ return; |
+ } |
+ |
+ // Run the roundtrip test |
+ for (int32_t locidx = 0; locidx < nLocales; locidx++) { |
+ for (int32_t patidx = 0; patidx < NUM_PATTERNS; patidx++) { |
+ SimpleDateFormat *sdf = new SimpleDateFormat((UnicodeString)PATTERNS[patidx], LOCALES[locidx], *status); |
+ if (U_FAILURE(*status)) { |
+ //errcheckln(*status, (UnicodeString)"new SimpleDateFormat failed for pattern " + |
+ // PATTERNS[patidx] + " for locale " + LOCALES[locidx].getName() + " - " + u_errorName(*status)); |
+ *status = U_ZERO_ERROR; |
+ continue; |
+ } |
+ |
+ tzids->reset(*status); |
+ const UnicodeString *tzid; |
+ while ((tzid = tzids->snext(*status))) { |
+ TimeZone *tz = TimeZone::createTimeZone(*tzid); |
+ |
+ for (int32_t datidx = 0; datidx < nDates; datidx++) { |
+ UnicodeString tzstr; |
+ FieldPosition fpos(0); |
+ |
+ // Format |
+ sdf->setTimeZone(*tz); |
+ sdf->format(DATES[datidx], tzstr, fpos); |
+ |
+ // Before parse, set unknown zone to SimpleDateFormat instance |
+ // just for making sure that it does not depends on the time zone |
+ // originally set. |
+ sdf->setTimeZone(unknownZone); |
+ |
+ // Parse |
+ ParsePosition pos(0); |
+ Calendar *outcal = Calendar::createInstance(unknownZone, *status); |
+ if (U_FAILURE(*status)) { |
+ //errln("Failed to create an instance of calendar for receiving parse result."); |
+ *status = U_ZERO_ERROR; |
+ continue; |
+ } |
+ outcal->set(UCAL_DST_OFFSET, badDstOffset); |
+ outcal->set(UCAL_ZONE_OFFSET, badZoneOffset); |
+ sdf->parse(tzstr, *outcal, pos); |
+ |
+ // clean loop |
+ delete outcal; |
+ |
+ } |
+ delete tz; |
+ // break time zone loop |
+ break; |
+ |
+ } |
+ delete sdf; |
+ } |
+ } |
+ delete cal; |
+ delete tzids; |
+ |
+ } |
+ |
+ virtual long getOperationsPerIteration() |
+ { |
+ return NUM_PATTERNS * nLocales * 6; |
+ } |
+}; |
+ |
+ |
+class DateTimeRoundTripPerfTest : public UPerfTest |
+{ |
+private: |
+ |
+public: |
+ |
+ DateTimeRoundTripPerfTest(int32_t argc, const char* argv[], UErrorCode& status); |
+ ~DateTimeRoundTripPerfTest(); |
+ virtual UPerfFunction* runIndexedTest(int32_t index, UBool exec,const char* &name, char* par); |
+ |
+ UPerfFunction* RoundTripLocale1(); |
+ UPerfFunction* RoundTripLocale10(); |
+ UPerfFunction* RoundTripLocale11(); |
+ UPerfFunction* RoundTripLocale21(); |
+}; |
+ |
+ |
+#endif // DateTimeRoundTripPerfTest |
Property changes on: icu46/source/test/perf/normperf/dtfmtrtperf.h |
___________________________________________________________________ |
Added: svn:eol-style |
+ LF |