cdtrgtst.c revision c73f511526464f8e56c242df80552e9b0d94ae3d
19f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson/********************************************************************
29f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * COPYRIGHT:
39f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Copyright (c) 1997-2014, International Business Machines Corporation and
49f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * others. All Rights Reserved.
59f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson ********************************************************************/
69f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson/********************************************************************************
79f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson*
89f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson* File CDTRGTST.C
99f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson*
109f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson*     Madhu Katragadda            Ported for C API
119f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson* Modification History:
129f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson*   Date        Name        Description
139f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson*   07/15/99    helena      Ported to HPUX 10/11 CC.
149f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson*********************************************************************************
159f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson*/
169f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson/* REGRESSION TEST FOR DATE FORMAT */
179f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
189f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson#include "unicode/utypes.h"
199f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
209f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson#if !UCONFIG_NO_FORMATTING
219f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
229f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson#include "unicode/uloc.h"
239f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson#include "unicode/udat.h"
249f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson#include "unicode/ucal.h"
259f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson#include "unicode/unum.h"
269f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson#include "unicode/ustring.h"
279f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson#include "cintltst.h"
289f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson#include "cdtrgtst.h"
299f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson#include "cmemory.h"
309f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
319f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonvoid addDateForRgrTest(TestNode** root);
329f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
339f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonvoid addDateForRgrTest(TestNode** root)
349f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson{
359f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    addTest(root, &Test4029195, "tsformat/cdtrgtst/Test4029195");
369f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    addTest(root, &Test4056591, "tsformat/cdtrgtst/Test4056591");
379f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    addTest(root, &Test4059917, "tsformat/cdtrgtst/Test4059917");
389f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    addTest(root, &Test4060212, "tsformat/cdtrgtst/Test4060212");
399f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    addTest(root, &Test4061287, "tsformat/cdtrgtst/Test4061287");
409f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    addTest(root, &Test4073003, "tsformat/cdtrgtst/Test4073003");
419f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    addTest(root, &Test4162071, "tsformat/cdtrgtst/Test4162071");
429f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    addTest(root, &Test714,     "tsformat/cdtrgtst/Test714");
439f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    addTest(root, &Test_GEec,   "tsformat/cdtrgtst/Test_GEec"); /* tests for format chars GEec, jitterbugs 5726 6072 6585 */
449f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson}
459f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
469f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson/**
479f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @bug 4029195
489f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */
499f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonvoid Test4029195()
509f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson{
519f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    int32_t resultlength, resultlengthneeded;
529f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    UChar  *fmdt, *todayS, *rt;
539f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    UChar *pat=NULL;
549f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    UChar *temp;
559f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    UDate today, d1;
569f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    UDateFormat *df;
579f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    int32_t parsepos;
589f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    UErrorCode status = U_ZERO_ERROR;
599f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
609f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    log_verbose("Testing date format and parse function in regression test\n");
619f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    today = ucal_getNow();
629f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
639f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    df = udat_open(UDAT_DEFAULT,UDAT_DEFAULT ,"en_US", NULL, 0, NULL, 0, &status);
649f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    if(U_FAILURE(status))
659f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    {
669f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson        log_data_err("FAIL: error in creating the dateformat using default date and time style : %s (Are you missing data?)\n", myErrorName(status));
679f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson        return;
689f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    }
699f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    resultlength=0;
709f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    resultlengthneeded=udat_toPattern(df, TRUE, NULL, resultlength, &status);
719f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    if(status==U_BUFFER_OVERFLOW_ERROR)
729f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    {
739f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson        status=U_ZERO_ERROR;
749f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson        resultlength=resultlengthneeded + 1;
759f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson        pat=(UChar*)malloc(sizeof(UChar) * resultlength);
769f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson        udat_toPattern(df, TRUE, pat, resultlength, &status);
779f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    }
789f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
799f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    log_verbose("pattern: %s\n", austrdup(pat));
809f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
819f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
829f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    fmdt = myFormatit(df, today);
839f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    if(fmdt) {
849f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson      log_verbose("today: %s\n", austrdup(fmdt));
859f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    } else {
869f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson      log_data_err("ERROR: couldn't format, exitting test");
879f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson      return;
889f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    }
899f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
909f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    temp=(UChar*)malloc(sizeof(UChar) * 10);
919f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    u_uastrcpy(temp, "M yyyy dd");
929f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    udat_applyPattern(df, TRUE, temp, u_strlen(temp));
939f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
949f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    todayS =myFormatit(df, today);
959f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    log_verbose("After the pattern is applied\n today: %s\n", austrdup(todayS) );
969f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    parsepos=0;
979f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    d1=udat_parse(df, todayS, u_strlen(todayS), &parsepos, &status);
989f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    if(U_FAILURE(status))
999f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    {
1009f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson        log_err("FAIL: Error in parsing using udat_parse(.....): %s\n", myErrorName(status));
1019f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    }
1029f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
1039f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    rt =myFormatit(df, d1);
1049f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    log_verbose("today: %s\n", austrdup(rt) );
1059f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
1069f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    log_verbose("round trip: %s\n", austrdup(rt) );
1079f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
1089f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    if(u_strcmp(rt, todayS)!=0) {
1099f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson        log_err("Fail: Want  %s  Got  %s\n", austrdup(todayS), austrdup(rt) );
1109f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    }
1119f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    else
1129f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson        log_verbose("Pass: parse and format working fine\n");
1139f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    udat_close(df);
1149f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    free(temp);
1159f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    if(pat != NULL) {
1169f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson        free(pat);
1179f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    }
1189f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson}
1199f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
1209f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
1219f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson/**
1229f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @bug 4056591
1239f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Verify the function of the [s|g]et2DigitYearStart() API.
1249f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */
1259f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonvoid Test4056591()
1269f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson{
1279f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    int i;
1289f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    UCalendar *cal;
1299f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    UDateFormat *def;
1309f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    UDate start,exp,got;
1319f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    UChar s[10];
1329f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    UChar *gotdate, *expdate;
1339f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    UChar pat[10];
1349f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    UDate d[4];
1359f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    UErrorCode status = U_ZERO_ERROR;
1369f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    const char* strings[] = {
1379f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson             "091225",
1389f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson             "091224",
1399f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson             "611226",
1409f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson             "991227"
1419f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson        };
1429f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
1439f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    log_verbose("Testing s[get] 2 digit year start regressively\n");
1449f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    cal=ucal_open(NULL, 0, "en_US", UCAL_GREGORIAN, &status);
1459f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    if(U_FAILURE(status)){
1469f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson        log_data_err("error in ucal_open caldef : %s - (Are you missing data?)\n", myErrorName(status));
1479f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson        return;
1489f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    }
1499f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    ucal_setDateTime(cal, 1809, UCAL_DECEMBER, 25, 17, 40, 30, &status);
1509f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    d[0]=ucal_getMillis(cal, &status);
1519f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    if(U_FAILURE(status)){
1529f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson            log_err("Error: failure in get millis: %s\n", myErrorName(status));
1539f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    }
1549f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    ucal_setDateTime(cal, 1909, UCAL_DECEMBER, 24, 17, 40, 30, &status);
1559f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    d[1]=ucal_getMillis(cal, &status);
1569f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    ucal_setDateTime(cal, 1861, UCAL_DECEMBER, 26, 17, 40, 30, &status);
1579f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    d[2]=ucal_getMillis(cal, &status);
1589f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    ucal_setDateTime(cal, 1999, UCAL_DECEMBER, 27, 17, 40, 30, &status);
1599f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    d[3]=ucal_getMillis(cal, &status);
1609f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
1619f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
1629f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    u_uastrcpy(pat, "yyMMdd");
1639f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    def = udat_open(UDAT_PATTERN,UDAT_PATTERN,NULL, NULL, 0, pat, u_strlen(pat), &status);
1649f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    if(U_FAILURE(status))
1659f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    {
1669f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson        log_data_err("FAIL: error in creating the dateformat using u_openPattern(): %s - (Are you missing data?)\n", myErrorName(status));
1679f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson        return;
1689f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    }
1699f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    start = 1800;
1709f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    udat_set2DigitYearStart(def, start, &status);
1719f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    if(U_FAILURE(status))
1729f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson        log_err("ERROR: in setTwoDigitStartDate: %s\n", myErrorName(status));
1739f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    if( (udat_get2DigitYearStart(def, &status) != start))
1749f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson        log_err("ERROR: get2DigitYearStart broken\n");
1759f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
1769f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
1779f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    for(i = 0; i < 4; ++i) {
1789f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson        u_uastrcpy(s, strings[i]);
1799f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson        exp = d[i];
1809f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson        got = udat_parse(def, s, u_strlen(s), 0, &status);
1819f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson        gotdate=myFormatit(def, got);
1829f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson        expdate=myFormatit(def, exp);
1839f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
1849f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson        if (gotdate == NULL || expdate == NULL) {
1859f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson            log_err("myFormatit failed!\n");
1869f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson        }
1879f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson        else if(u_strcmp(gotdate, expdate) !=0){
1889f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson            log_err("set2DigitYearStart broken for %s \n  got: %s, expected: %s\n", austrdup(s),
1899f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson                austrdup(gotdate), austrdup(expdate) );
1909f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson        }
1919f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    }
1929f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
1939f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    udat_close(def);
1949f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    ucal_close(cal);
1959f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson}
1969f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
1979f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
1989f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson/**
1999f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * SimpleDateFormat does not properly parse date strings without delimiters
2009f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @bug 4059917
2019f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */
2029f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonvoid Test4059917()
2039f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson{
2049f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    UDateFormat* def;
2059f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    UChar *myDate;
2069f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    UErrorCode status = U_ZERO_ERROR;
2079f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    UChar pattern[11];
2089f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    UChar tzID[4];
2099f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
2109f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    log_verbose("Testing apply pattern and to pattern regressively\n");
2119f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    u_uastrcpy(tzID, "PST");
2129f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    u_uastrcpy(pattern, "yyyy/MM/dd");
2139f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    log_verbose("%s\n", austrdup(pattern) );
2149f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    def = udat_open(UDAT_PATTERN,UDAT_PATTERN,NULL,tzID,-1,pattern, u_strlen(pattern),&status);
215    if(U_FAILURE(status))
216    {
217        log_data_err("FAIL: error in creating the dateformat using openPattern: %s - (Are you missing data?)\n", myErrorName(status));
218        return;
219    }
220    myDate=(UChar*)malloc(sizeof(UChar) * 11);
221    u_uastrcpy(myDate, "1970/01/12");
222
223    aux917( def, myDate );
224    udat_close(def);
225
226    u_uastrcpy(pattern, "yyyyMMdd");
227    def = udat_open(UDAT_PATTERN,UDAT_PATTERN,NULL,tzID,-1,pattern, u_strlen(pattern),&status);
228    if(U_FAILURE(status))
229    {
230        log_err("FAIL: error in creating the dateformat using openPattern: %s\n", myErrorName(status));
231        return;
232    }
233    u_uastrcpy(myDate, "19700112");
234    aux917( def, myDate );
235    udat_close(def);
236    free(myDate);
237}
238
239void aux917( UDateFormat *fmt, UChar* str)
240{
241    int32_t resultlength, resultlengthneeded;
242    UErrorCode status = U_ZERO_ERROR;
243    UChar* formatted=NULL;
244    UChar *pat=NULL;
245    UDate d1=1000000000.0;
246
247    resultlength=0;
248    resultlengthneeded=udat_toPattern(fmt, TRUE, NULL, resultlength, &status);
249    if(status==U_BUFFER_OVERFLOW_ERROR)
250    {
251        status=U_ZERO_ERROR;
252        resultlength=resultlengthneeded + 1;
253        pat=(UChar*)malloc(sizeof(UChar) * (resultlength));
254        udat_toPattern(fmt, TRUE, pat, resultlength, &status);
255    }
256    if(U_FAILURE(status)){
257        log_err("failure in retrieving the pattern: %s\n", myErrorName(status));
258    }
259    log_verbose("pattern: %s\n", austrdup(pat) );
260
261    status = U_ZERO_ERROR;
262    formatted = myFormatit(fmt, d1);
263    if( u_strcmp(formatted,str)!=0) {
264        log_err("Fail: Want %s Got: %s\n", austrdup(str),  austrdup(formatted) );
265    }
266    free(pat);
267}
268
269/**
270 * @bug 4060212
271 */
272void Test4060212()
273{
274    int32_t pos;
275    UCalendar *cal;
276    UDateFormat *formatter, *fmt;
277    UErrorCode status = U_ZERO_ERROR;
278    UDate myDate;
279    UChar *myString;
280    UChar dateString[30], pattern[20], tzID[4];
281    u_uastrcpy(dateString, "1995-040.05:01:29 -8");
282    u_uastrcpy(pattern, "yyyy-DDD.hh:mm:ss z");
283
284    log_verbose( "dateString= %s Using yyyy-DDD.hh:mm:ss\n", austrdup(dateString) );
285    status = U_ZERO_ERROR;
286    u_uastrcpy(tzID, "PST");
287
288    formatter = udat_open(UDAT_PATTERN,UDAT_PATTERN,"en_US",tzID,-1,pattern, u_strlen(pattern), &status);
289    pos=0;
290    myDate = udat_parse(formatter, dateString, u_strlen(dateString), &pos, &status);
291
292
293    fmt = udat_open(UDAT_FULL,UDAT_LONG ,NULL, tzID, -1, NULL, 0, &status);
294    if(U_FAILURE(status))
295    {
296        log_data_err("FAIL: error in creating the dateformat using default date and time style: %s - (Are you missing data?)\n",
297                        myErrorName(status) );
298        return;
299    }
300    myString = myFormatit(fmt, myDate);
301    (void)myString;   /* Suppress set but not used warning. */
302    cal=ucal_open(tzID, u_strlen(tzID), "en_US", UCAL_GREGORIAN, &status);
303    if(U_FAILURE(status)){
304        log_err("FAIL: error in ucal_open caldef : %s\n", myErrorName(status));
305    }
306    ucal_setMillis(cal, myDate, &status);
307    if ((ucal_get(cal, UCAL_DAY_OF_YEAR, &status) != 40)){
308        log_err("Fail: Got  %d Expected 40\n", ucal_get(cal, UCAL_DAY_OF_YEAR, &status));
309    }
310
311    udat_close(formatter);
312    ucal_close(cal);
313    udat_close(fmt);
314
315}
316
317/**
318 * @bug 4061287
319 */
320void Test4061287()
321{
322    UBool ok;
323    int32_t pos;
324    UDateFormat *df;
325    UErrorCode status = U_ZERO_ERROR;
326    UDate myDate;
327    UChar pattern[21], dateString[11];
328
329    u_uastrcpy(dateString, "35/13/1971");
330    u_uastrcpy(pattern, "dd/mm/yyyy");
331    status = U_ZERO_ERROR;
332    log_verbose("Testing parsing by changing the attribute lenient\n");
333    df = udat_open(UDAT_PATTERN,UDAT_PATTERN,NULL,NULL,0,pattern, u_strlen(pattern),&status);
334    if(U_FAILURE(status)){
335        log_data_err("ERROR: failure in open pattern of test4061287: %s - (Are you missing data?)\n", myErrorName(status));
336        return;
337    }
338
339    pos=0;
340
341    udat_setLenient(df, FALSE);
342    ok=udat_isLenient(df);
343    if(ok==TRUE)
344        log_err("setLenient nor working\n");
345    ok = FALSE;
346    myDate = udat_parse(df, dateString, u_strlen(dateString), &pos, &status);
347    (void)myDate;   /* Suppress set but not used warning. */
348    if(U_FAILURE(status))
349        ok = TRUE;
350    if(ok!=TRUE)
351        log_err("Fail: Lenient not working: does lenient parsing in spite of setting Leninent as FALSE ");
352
353    udat_close(df);
354
355}
356
357
358
359/* The java.text.DateFormat.parse(String) method expects for the
360  US locale a string formatted according to mm/dd/yy and parses it
361  correctly.
362
363  When given a string mm/dd/yyyy it only parses up to the first
364  two y's, typically resulting in a date in the year 1919.
365
366  Please extend the parsing method(s) to handle strings with
367  four-digit year values (probably also applicable to various
368  other locales.  */
369/**
370 * @bug 4073003
371 */
372void Test4073003()
373{
374    int32_t pos,i;
375    UDate d,dd;
376    UChar *datestr;
377    UChar temp[15];
378    UErrorCode status = U_ZERO_ERROR;
379    UDateFormat *fmt;
380    UChar *result, *result2;
381    const char* tests [] = {
382                "12/25/61",
383                "12/25/1961",
384                "4/3/1999",
385                "4/3/99"
386        };
387
388    fmt= udat_open(UDAT_SHORT,UDAT_SHORT ,NULL, NULL, 0, NULL, 0, &status);
389    if(U_FAILURE(status))
390    {
391        log_data_err("FAIL: error in creating the dateformat using short date and time style: %s (Are you missing data?)\n",
392            myErrorName(status));
393        return;
394    }
395    u_uastrcpy(temp, "m/D/yy");
396    udat_applyPattern(fmt, FALSE, temp, u_strlen(temp));
397
398    for(i= 0; i < 4; i+=2) {
399        status=U_ZERO_ERROR;
400        datestr=(UChar*)malloc(sizeof(UChar) * (strlen(tests[i])+1));
401        u_uastrcpy(datestr, tests[i]);
402
403        pos=0;
404        d = udat_parse(fmt, datestr, u_strlen(datestr), &pos, &status);
405        if(U_FAILURE(status)){
406            log_err("ERROR : in test 4073003: %s\n", myErrorName(status));
407        }
408
409        free(datestr);
410        datestr=(UChar*)malloc(sizeof(UChar) * (strlen(tests[i+1])+1));
411        u_uastrcpy(datestr, tests[i+1]);
412
413        pos=0;
414        status=U_ZERO_ERROR;
415        dd = udat_parse(fmt, datestr, u_strlen(datestr), &pos, &status);
416        if(U_FAILURE(status)){
417            log_err("ERROR : in test 4073003: %s\n", myErrorName(status));
418        }
419        free(datestr);
420
421        result =myFormatit(fmt, d);
422        result2 =myFormatit(fmt, dd);
423        if(!result || !result2) {
424            log_data_err("Fail: could not format - exitting test\n");
425            return;
426        }
427        if (u_strcmp(result, result2)!=0){
428            log_err("Fail: %s != %s\n", austrdup(result), austrdup(result2) );
429        }
430        else{
431            log_verbose("Ok: %s == %s\n", austrdup(result), austrdup(result2) );
432        }
433
434    }
435    udat_close(fmt);
436}
437
438/**
439 * @bug 4162071
440 **/
441void Test4162071()
442{
443    int32_t pos;
444    UDate x;
445    UErrorCode status = U_ZERO_ERROR;
446    UDateFormat *df;
447    UChar datestr[30];
448    UChar format[50];
449    u_uastrcpy(datestr, "Thu, 30-Jul-1999 11:51:14 GMT");
450    u_uastrcpy(format, "EEE', 'dd-MMM-yyyy HH:mm:ss z"); /*  RFC 822/1123 */
451    status = U_ZERO_ERROR;
452    /* Can't hardcode the result to assume the default locale is "en_US". */
453    df = udat_open(UDAT_PATTERN,UDAT_PATTERN,"en_US",NULL,0,format, u_strlen(format),&status);
454    if(U_FAILURE(status)){
455        log_data_err("ERROR: couldn't create date format: %s\n", myErrorName(status));
456        return;
457    }
458    pos=0;
459    x = udat_parse(df, datestr, u_strlen(datestr), &pos, &status);
460    (void)x;   /* Suppress set but not used warning. */
461    if(U_FAILURE(status)){
462        log_data_err("ERROR : parse format  %s fails : %s\n", austrdup(format), myErrorName(status));
463    }
464    else{
465        log_verbose("Parse format \"%s \" ok.\n", austrdup(format) );
466    }
467    /*log_verbose("date= %s\n", austrdup(myFormatit(df, x)) );*/
468    udat_close(df);
469}
470
471void Test714(void)
472{
473    UDate d=978103543000.0;
474    UChar temp[20];
475    UErrorCode status = U_ZERO_ERROR;
476    UDateFormat *fmt;
477    UChar *result;
478    const char* expect =  "7:25:43 AM";
479
480    ctest_setTimeZone(NULL, &status);
481
482    fmt= udat_open(UDAT_MEDIUM,UDAT_NONE ,"en_US_CA", NULL, -1, NULL, 0, &status);
483    if(U_FAILURE(status))
484    {
485        log_data_err("FAIL: error in creating the dateformat using medium time style and NO date style: %s (Are you missing data?)\n",
486            myErrorName(status));
487        return;
488    }
489    result =myFormatit(fmt, d);
490    if(!result) {
491      log_data_err("Fail: could not format - exitting test\n");
492      return;
493    }
494    u_uastrcpy(temp, expect);
495    if (u_strcmp(result, temp)!=0){
496      log_err("Fail: %s != %s\n", austrdup(result), expect);
497    }
498    else{
499      log_verbose("Ok: %s == %s\n", austrdup(result), expect );
500    }
501
502    udat_close(fmt);
503
504    ctest_resetTimeZone();
505}
506
507enum { DATE_TEXT_MAX_CHARS = 64 };
508static const UChar zonePST[] = { 0x50,0x53,0x54,0 }; /* "PST" */
509static const UDate july022008 = 1215000001979.0; /* 02 July 2008 5:00:01.979 AM PDT (near ICU 4.0 release date :-) */
510static const double dayMillisec = 8.64e+07;
511
512static const UChar dMyGGGPattern[]   = { 0x64,0x64,0x20,0x4D,0x4D,0x4D,0x20,0x79,0x79,0x79,0x79,0x20,0x47,0x47,0x47,0 };           /* "dd MMM yyyy GGG" */
513static const UChar dMyGGGGGPattern[] = { 0x64,0x64,0x20,0x4D,0x4D,0x4D,0x20,0x79,0x79,0x79,0x79,0x20,0x47,0x47,0x47,0x47,0x47,0 }; /* "dd MMM yyyy GGGGG" */
514static const UChar dMyGGGText[]      = { 0x30,0x32,0x20,0x4A,0x75,0x6C,0x20,0x32,0x30,0x30,0x38,0x20,0x41,0x44,0 };                /* "02 Jul 2008 AD" */
515static const UChar dMyGGGGGText[]    = { 0x30,0x32,0x20,0x4A,0x75,0x6C,0x20,0x32,0x30,0x30,0x38,0x20,0x41,0 };                     /* "02 Jul 2008 A" */
516static const UChar edMyPattern[]     = { 0x65,0x20,0x64,0x64,0x20,0x4D,0x4D,0x4D,0x20,0x79,0x79,0x79,0x79,0 };                     /* "e dd MMM yyyy" */
517static const UChar eedMyPattern[]    = { 0x65,0x65,0x20,0x64,0x64,0x20,0x4D,0x4D,0x4D,0x20,0x79,0x79,0x79,0x79,0 };                /* "ee dd MMM yyyy" */
518static const UChar cdMyPattern[]     = { 0x63,0x20,0x64,0x64,0x20,0x4D,0x4D,0x4D,0x20,0x79,0x79,0x79,0x79,0 };                     /* "c dd MMM yyyy" */
519static const UChar ccdMyPattern[]    = { 0x63,0x63,0x20,0x64,0x64,0x20,0x4D,0x4D,0x4D,0x20,0x79,0x79,0x79,0x79,0 };                /* "cc dd MMM yyyy" */
520static const UChar edMyText[]        = { 0x34,0x20,0x30,0x32,0x20,0x4A,0x75,0x6C,0x20,0x32,0x30,0x30,0x38,0 };                     /* "4 02 Jul 2008" */
521static const UChar eedMyText[]       = { 0x30,0x34,0x20,0x30,0x32,0x20,0x4A,0x75,0x6C,0x20,0x32,0x30,0x30,0x38,0 };                /* "04 02 Jul 2008" */
522static const UChar eeedMyPattern[]   = { 0x65,0x65,0x65,0x20,0x64,0x64,0x20,0x4D,0x4D,0x4D,0x20,0x79,0x79,0x79,0x79,0 };           /* "eee dd MMM yyyy" */
523static const UChar EEEdMyPattern[]   = { 0x45,0x45,0x45,0x20,0x64,0x64,0x20,0x4D,0x4D,0x4D,0x20,0x79,0x79,0x79,0x79,0 };           /* "EEE dd MMM yyyy" */
524static const UChar EEdMyPattern[]    = { 0x45,0x45,0x20,0x64,0x64,0x20,0x4D,0x4D,0x4D,0x20,0x79,0x79,0x79,0x79,0 };                /* "EE dd MMM yyyy" */
525static const UChar eeedMyText[]      = { 0x57,0x65,0x64,0x20,0x30,0x32,0x20,0x4A,0x75,0x6C,0x20,0x32,0x30,0x30,0x38,0 };           /* "Wed 02 Jul 2008" */
526static const UChar eeeedMyPattern[]  = { 0x65,0x65,0x65,0x65,0x20,0x64,0x64,0x20,0x4D,0x4D,0x4D,0x20,0x79,0x79,0x79,0x79,0 };      /* "eeee dd MMM yyyy" */
527static const UChar eeeedMyText[]     = { 0x57,0x65,0x64,0x6E,0x65,0x73,0x64,0x61,0x79,0x20,0x30,0x32,0x20,0x4A,0x75,0x6C,0x20,0x32,0x30,0x30,0x38,0 }; /* "Wednesday 02 Jul 2008" */
528static const UChar eeeeedMyPattern[] = { 0x65,0x65,0x65,0x65,0x65,0x20,0x64,0x64,0x20,0x4D,0x4D,0x4D,0x20,0x79,0x79,0x79,0x79,0 }; /* "eeeee dd MMM yyyy" */
529static const UChar eeeeedMyText[]    = { 0x57,0x20,0x30,0x32,0x20,0x4A,0x75,0x6C,0x20,0x32,0x30,0x30,0x38,0 };                     /* "W 02 Jul 2008" */
530static const UChar ewYPattern[]      = { 0x65,0x20,0x77,0x77,0x20,0x59,0x59,0x59,0x59,0 };                                         /* "e ww YYYY" */
531static const UChar cwYPattern[]      = { 0x63,0x20,0x77,0x77,0x20,0x59,0x59,0x59,0x59,0 };                                         /* "c ww YYYY" */
532static const UChar ewYText[]         = { 0x34,0x20,0x32,0x37,0x20,0x32,0x30,0x30,0x38,0 };                                         /* "4 27 2008" */
533static const UChar HHmmssPattern[]   = { 0x48,0x48,0x3A,0x6D,0x6D,0x3A,0x73,0x73,0 };                                              /* "HH:mm:ss" */
534static const UChar HHmmssText[]      = { 0x30,0x35,0x3A,0x30,0x30,0x3A,0x30,0x31,0 };                                              /* "05:00:01" */
535static const UChar ssSPattern[]      = { 0x73,0x73,0x2E,0x53,0 };                                                                  /* "ss.S" */
536static const UChar ssSText[]         = { 0x30,0x31,0x2E,0x39,0 };                                                                  /* "01.9" */
537static const UChar ssSSPattern[]     = { 0x73,0x73,0x2E,0x53,0x53,0 };                                                             /* "ss.SS" */
538static const UChar ssSSText[]        = { 0x30,0x31,0x2E,0x39,0x37,0 };                                                             /* "01.97" */
539
540typedef struct {
541    const UChar * pattern;
542    const UChar * text;
543    const char *  label;
544} DatePatternAndText;
545static const DatePatternAndText datePatternsAndText[] = {
546    { dMyGGGPattern,   dMyGGGText,   "dd MMM yyyy GGG"   },
547    { dMyGGGGGPattern, dMyGGGGGText, "dd MMM yyyy GGGGG" },
548    { edMyPattern,     edMyText,     "e dd MMM yyyy"     },
549    { eedMyPattern,    eedMyText,    "ee dd MMM yyyy"    },
550    { cdMyPattern,     edMyText,     "c dd MMM yyyy"     },
551    { ccdMyPattern,    edMyText,     "cc dd MMM yyyy"    },
552    { eeedMyPattern,   eeedMyText,   "eee dd MMM yyyy"   },
553    { EEEdMyPattern,   eeedMyText,   "EEE dd MMM yyyy"   },
554    { EEdMyPattern,    eeedMyText,   "EE dd MMM yyyy"    },
555    { eeeedMyPattern,  eeeedMyText,  "eeee dd MMM yyyy"  },
556    { eeeeedMyPattern, eeeeedMyText, "eeeee dd MMM yyyy" },
557    { ewYPattern,      ewYText,      "e ww YYYY"         },
558    { cwYPattern,      ewYText,      "c ww YYYY"         },
559    { HHmmssPattern,   HHmmssText,   "* HH:mm:ss"        }, /* '*' at start means don't check value from parse (won't be july022008) */
560    { ssSPattern,      ssSText,      "* ss.S"            },
561    { ssSSPattern,     ssSSText,     "* ss.SS"           },
562    { NULL,            NULL,         NULL                }
563};
564void Test_GEec(void)
565{
566    UErrorCode    status = U_ZERO_ERROR;
567    UDateFormat * dtfmt = udat_open(UDAT_LONG, UDAT_LONG, "en", zonePST, -1, NULL, 0, &status);
568    if ( U_SUCCESS(status) ) {
569        const DatePatternAndText *patTextPtr;
570        for (patTextPtr = datePatternsAndText; patTextPtr->pattern != NULL; ++patTextPtr) {
571            UChar   dmyGnText[DATE_TEXT_MAX_CHARS];
572            char    byteText[3*DATE_TEXT_MAX_CHARS];
573            int32_t dmyGnTextLen;
574            UDate   dateResult;
575
576            udat_applyPattern(dtfmt, FALSE, patTextPtr->pattern, -1);
577            dmyGnTextLen = udat_format(dtfmt, july022008, dmyGnText, DATE_TEXT_MAX_CHARS, NULL, &status);
578            (void)dmyGnTextLen;   /* Suppress set but not used warning. */
579            if ( U_FAILURE(status) ) {
580                log_err("FAIL: udat_format with %s: %s\n", patTextPtr->label, myErrorName(status) );
581                status = U_ZERO_ERROR;
582            } else if ( u_strcmp(dmyGnText, patTextPtr->text) != 0 ) {
583                log_err("FAIL: udat_format with %s: wrong UChar[] result %s\n", patTextPtr->label, u_austrcpy(byteText,dmyGnText) );
584            }
585
586            dateResult = udat_parse(dtfmt, patTextPtr->text, -1, NULL, &status); /* no time, dateResult != july022008 by some hours */
587            if ( U_FAILURE(status) ) {
588                log_err("FAIL: udat_parse with %s: %s\n", patTextPtr->label, myErrorName(status) );
589                status = U_ZERO_ERROR;
590            } else if ( patTextPtr->label[0] != '*' && july022008 - dateResult > dayMillisec ) {
591                log_err("FAIL: udat_parse with %s: wrong UDate result\n", patTextPtr->label );
592            }
593        }
594        udat_close(dtfmt);
595    } else {
596        log_data_err("FAIL: udat_open fails: %s (Are you missing data?)\n", myErrorName(status));
597    }
598}
599
600/*INTERNAL FUNCTION USED */
601
602UChar* myFormatit(UDateFormat* datdef, UDate d1)
603{
604    UChar *result1=NULL;
605    int32_t resultlength, resultlengthneeded;
606    UErrorCode status = U_ZERO_ERROR;
607
608    resultlength=0;
609    resultlengthneeded=udat_format(datdef, d1, NULL, resultlength, NULL, &status);
610    if(status==U_BUFFER_OVERFLOW_ERROR)
611    {
612        status=U_ZERO_ERROR;
613        resultlength=resultlengthneeded+1;
614        /*result1=(UChar*)malloc(sizeof(UChar) * resultlength);*/ /*this leaks*/
615        result1=(UChar*)ctst_malloc(sizeof(UChar) * resultlength); /*this won't*/
616        udat_format(datdef, d1, result1, resultlength, NULL, &status);
617    }
618    if(U_FAILURE(status))
619    {
620        log_err("FAIL: Error in formatting using udat_format(.....): %s\n", myErrorName(status));
621        return 0;
622    }
623
624
625    return result1;
626
627}
628
629#endif /* #if !UCONFIG_NO_FORMATTING */
630
631/*eof*/
632