diff --git a/icu4c/source/test/cintltst/cdattst.c b/icu4c/source/test/cintltst/cdattst.c index 86e9db15a9b..2abc310351b 100644 --- a/icu4c/source/test/cintltst/cdattst.c +++ b/icu4c/source/test/cintltst/cdattst.c @@ -1582,35 +1582,43 @@ static void TestOverrideNumberFormat(void) { char bbuf2[kBbufMax]; const char* localeString = "zh@numbers=hanidays"; UDateFormat* fmt; - UNumberFormat* overrideFmt; const UNumberFormat* getter_result; int32_t i; unsigned j; - fmt=udat_open(UDAT_PATTERN, UDAT_PATTERN,"en_US",NULL,0,pattern, u_strlen(pattern), &status); - if (!assertSuccess("udat_open()", &status)) { - return; - } - - overrideFmt = unum_open(UNUM_DEFAULT, NULL, 0, localeString, NULL, &status); - assertSuccess("unum_open()", &status); - expected=(UChar*)malloc(sizeof(UChar) * 10); fields=(UChar*)malloc(sizeof(UChar) * 10); u_uastrcpy(fields, "d"); u_uastrcpy(pattern,"MM d"); + fmt=udat_open(UDAT_PATTERN, UDAT_PATTERN,"en_US",NULL,0,pattern, u_strlen(pattern), &status); + if (!assertSuccess("udat_open()", &status)) { + return; + } + // loop 50 times to check getter/setter - for (i = 0; i < 50; i++){ + for (i = 0; i < 5; i++){ + UNumberFormat* overrideFmt; + overrideFmt = unum_open(UNUM_DEFAULT, NULL, 0, localeString, NULL, &status); + assertSuccess("unum_open()", &status); + udat_adoptNumberFormatForFields(fmt, fields, overrideFmt, &status); + overrideFmt = NULL; // no longer valid assertSuccess("udat_setNumberFormatForField()", &status); getter_result = udat_getNumberFormatForField(fmt, 'd'); - if (getter_result != overrideFmt) - log_err("FAIL: udat_getNumberFormatForField does not work\n"); + if(getter_result == NULL) { + log_err("FAIL: udat_getNumberFormatForField did not return a valid pointer\n"); + } + } + + { + UNumberFormat* overrideFmt; + overrideFmt = unum_open(UNUM_DEFAULT, NULL, 0, localeString, NULL, &status); + assertSuccess("unum_open()", &status); + udat_setNumberFormat(fmt, overrideFmt); // test the same override NF will not crash } - udat_setNumberFormat(fmt, overrideFmt); // test the same override NF will not crash udat_close(fmt); for (j=0; i