summaryrefslogtreecommitdiff
path: root/Build/source/libs/icu/icu-src/source/test/intltest/calregts.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Build/source/libs/icu/icu-src/source/test/intltest/calregts.cpp')
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/calregts.cpp54
1 files changed, 52 insertions, 2 deletions
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/calregts.cpp b/Build/source/libs/icu/icu-src/source/test/intltest/calregts.cpp
index f1eb17bbed3..da522637c6f 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/calregts.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/calregts.cpp
@@ -17,6 +17,7 @@
#include "unicode/simpletz.h"
#include "unicode/smpdtfmt.h"
#include "unicode/strenum.h"
+#include "unicode/localpointer.h"
#include "cmemory.h"
#include "caltest.h"
#include "unicode/localpointer.h"
@@ -93,6 +94,8 @@ CalendarRegressionTest::runIndexedTest( int32_t index, UBool exec, const char* &
CASE(50,TestT9452);
CASE(51,TestT11632);
CASE(52,TestPersianCalOverflow);
+ CASE(53,TestIslamicCalOverflow);
+ CASE(54,TestWeekOfYear13548);
default: name = ""; break;
}
}
@@ -3009,9 +3012,9 @@ void CalendarRegressionTest::TestPersianCalOverflow(void) {
month = cal->get(UCAL_MONTH, status);
dayOfMonth = cal->get(UCAL_DATE, status);
if ( U_FAILURE(status) ) {
- errln("FAIL: Calendar->get MONTH/DATE for localeID %s, julianDay %d, status %s\n", localeID, jd, u_errorName(status));
+ errln("FAIL: Calendar->get MONTH/DATE for localeID %s, julianDay %d, status %s", localeID, jd, u_errorName(status));
} else if (month > maxMonth || dayOfMonth > maxDayOfMonth) {
- errln("FAIL: localeID %s, julianDay %d; maxMonth %d, got month %d; maxDayOfMonth %d, got dayOfMonth %d\n",
+ errln("FAIL: localeID %s, julianDay %d; maxMonth %d, got month %d; maxDayOfMonth %d, got dayOfMonth %d",
localeID, jd, maxMonth, month, maxDayOfMonth, dayOfMonth);
}
}
@@ -3019,4 +3022,51 @@ void CalendarRegressionTest::TestPersianCalOverflow(void) {
}
}
+/**
+ * @bug tickets 12661, 13538
+ */
+void CalendarRegressionTest::TestIslamicCalOverflow(void) {
+ const char* localeID = "ar@calendar=islamic-civil";
+ UErrorCode status = U_ZERO_ERROR;
+ Calendar* cal = Calendar::createInstance(Locale(localeID), status);
+ if(U_FAILURE(status)) {
+ dataerrln("FAIL: Calendar::createInstance for localeID %s: %s", localeID, u_errorName(status));
+ } else {
+ int32_t maxMonth = cal->getMaximum(UCAL_MONTH);
+ int32_t maxDayOfMonth = cal->getMaximum(UCAL_DATE);
+ int32_t jd, year, month, dayOfMonth;
+ for (jd = 73530872; jd <= 73530876; jd++) { // year 202002, int32_t overflow if jd >= 73530874
+ status = U_ZERO_ERROR;
+ cal->clear();
+ cal->set(UCAL_JULIAN_DAY, jd);
+ year = cal->get(UCAL_YEAR, status);
+ month = cal->get(UCAL_MONTH, status);
+ dayOfMonth = cal->get(UCAL_DATE, status);
+ if ( U_FAILURE(status) ) {
+ errln("FAIL: Calendar->get YEAR/MONTH/DATE for localeID %s, julianDay %d, status %s", localeID, jd, u_errorName(status));
+ } else if (month > maxMonth || dayOfMonth > maxDayOfMonth) {
+ errln("FAIL: localeID %s, julianDay %d; got year %d; maxMonth %d, got month %d; maxDayOfMonth %d, got dayOfMonth %d",
+ localeID, jd, year, maxMonth, month, maxDayOfMonth, dayOfMonth);
+ }
+ }
+ delete cal;
+ }
+}
+
+void CalendarRegressionTest::TestWeekOfYear13548(void) {
+ int32_t year = 2000;
+ UErrorCode status = U_ZERO_ERROR;
+ LocalPointer<Calendar> cal(Calendar::createInstance(status));
+ failure(status, "Calendar::createInstance(status)");
+
+ cal->set(UCAL_YEAR, year);
+ cal->set(UCAL_WEEK_OF_YEAR, 4);
+
+ int32_t resultYear = cal->get(UCAL_YEAR, status);
+ failure(status, "get(UCAL_YEAR, status)");
+ if (year != resultYear) {
+ errln((UnicodeString)"Fail: Expected year=" + year + ", actual=" + resultYear);
+ }
+}
+
#endif /* #if !UCONFIG_NO_FORMATTING */