]> git.saurik.com Git - apple/icu.git/blobdiff - icuSources/test/iotest/iotest.cpp
ICU-8.11.4.tar.gz
[apple/icu.git] / icuSources / test / iotest / iotest.cpp
index 320aca2a3cd11db83bf27d57d463da70a06a5300..748ae3584d848c23dcf125d7cfb6df06234532d2 100644 (file)
@@ -1,6 +1,6 @@
 /*
 **********************************************************************
-*   Copyright (C) 2002-2004, International Business Machines
+*   Copyright (C) 2002-2006, International Business Machines
 *   Corporation and others.  All Rights Reserved.
 **********************************************************************
 *   file name:  iotest.cpp
@@ -14,7 +14,6 @@
 
 
 #include "unicode/ustdio.h"
-#include "unicode/ustream.h"
 #include "unicode/uclean.h"
 
 #include "unicode/ucnv.h"
 #include "ustr_cnv.h"
 #include "iotest.h"
 #include "unicode/tstdtmod.h"
-
-#if U_IOSTREAM_SOURCE >= 199711
-#include <iostream>
-#ifdef U_LINUX
-#define USE_SSTREAM 1
-#include <sstream>
-#else
-// <strstream> is deprecated on some platforms, and the compiler complains very loudly if you use it.
-#include <strstream>
-#endif
-using namespace std;
-#elif U_IOSTREAM_SOURCE >= 198506
-#include <iostream.h>
-#include <strstream.h>
-#endif
+#include "putilimp.h"
 
 #include <string.h>
 #include <stdlib.h>
 
-U_CDECL_BEGIN
-#ifdef WIN32
-const UChar NEW_LINE[] = {0x0d,0x0a,0};
-const char C_NEW_LINE[] = {0x0d,0x0a,0};
-#define UTF8_NEW_LINE "\x0d\x0a"
-#else
-const UChar NEW_LINE[] = {0x0a,0};
-const char C_NEW_LINE[] = {'\n',0};
-#define UTF8_NEW_LINE "\x0a"
-#endif
-U_CDECL_END
-
 class DataDrivenLogger : public TestLog {
     static const char* fgDataDir;
     static char *fgTestDataPath;
@@ -292,7 +265,7 @@ static void U_CALLCONV DataDrivenPrintf(void)
                     uFileBufferLenReturned = u_fprintf_u(testFile, format, i64);
                     break;
                 case 0x73:  // 's' char *
-                    u_austrncpy(cBuffer, uBuffer, sizeof(cBuffer));
+                    u_austrncpy(cBuffer, argument, sizeof(cBuffer));
                     uBufferLenReturned = u_sprintf_u(uBuffer, format, cBuffer);
                     uFileBufferLenReturned = u_fprintf_u(testFile, format, cBuffer);
                     break;
@@ -388,6 +361,7 @@ static void U_CALLCONV DataDrivenScanf(void)
     int32_t i32, expected32;
     int64_t i64, expected64;
     double dbl, expectedDbl;
+    volatile float flt, expectedFlt; // Use volatile in order to get around an Intel compiler issue.
     int32_t uBufferLenReturned;
 
     //const char *fileLocale = "en_US_POSIX";
@@ -437,6 +411,15 @@ static void U_CALLCONV DataDrivenScanf(void)
                                 i, dbl, expectedDbl);
                     }
                     break;
+                case 0x66:  // 'f' float
+                    expectedFlt = (float)atof(u_austrcpy(cBuffer, expectedResult));
+                    uBufferLenReturned = u_sscanf_u(argument, format, &flt);
+                    //uFileBufferLenReturned = u_fscanf_u(testFile, format, flt);
+                    if (flt != expectedFlt) {
+                        log_err("error in scanf test case[%d] Got: %f Exp: %f\n",
+                                i, flt, expectedFlt);
+                    }
+                    break;
                 case 0x31:  // '1' int8_t
                     expected8 = (int8_t)uto64(expectedResult);
                     uBufferLenReturned = u_sscanf_u(argument, format, &i8);
@@ -681,97 +664,17 @@ static void U_CALLCONV DataDrivenPrintfPrecision(void)
 }
 U_CDECL_END
 
-U_CDECL_BEGIN
-static void U_CALLCONV TestStream(void)
-{
-#if U_IOSTREAM_SOURCE >= 198506
-    const UChar thisMu[] = { 0x74, 0x48, 0x69, 0x73, 0x3BC, 0};
-    const UChar mu[] = { 0x6D, 0x75, 0};
-    UnicodeString str1 = UNICODE_STRING_SIMPLE("str1");
-    UnicodeString str2 = UNICODE_STRING_SIMPLE(" <<");
-    UnicodeString str3 = UNICODE_STRING_SIMPLE("2");
-    UnicodeString str4 = UNICODE_STRING_SIMPLE(" UTF-8 ");
-    UnicodeString inStr = UNICODE_STRING_SIMPLE(" UTF-8 ");
-    UnicodeString inStr2;
-    char defConvName[UCNV_MAX_CONVERTER_NAME_LENGTH*2];
-    char inStrC[128];
-    UErrorCode status = U_ZERO_ERROR;
-    UConverter *defConv;
-    static const char testStr[] = "\x42\x65\x67\x69\x6E\x6E\x69\x6E\x67\x20\x6F\x66\x20\x74\x65\x73\x74\x20\x73\x74\x72\x31\x20\x20\x20\x3C\x3C\x32\x31\x20" UTF8_NEW_LINE "\x20\x55\x54\x46\x2D\x38\x20\xCE\xBC\xF0\x90\x80\x81\xF0\x90\x80\x82";
-
-    str4.append((UChar32)0x03BC);   /* mu */
-    str4.append((UChar32)0x10001);
-    str4.append((UChar32)0x10002);
-
-    /* release the default converter and use utf-8 for a bit */
-    defConv = u_getDefaultConverter(&status);
-    if (U_FAILURE(status)) {
-        log_err("Can't get default converter\n");
-        return;
-    }
-    ucnv_close(defConv);
-    strncpy(defConvName, ucnv_getDefaultName(), sizeof(defConvName)/sizeof(defConvName[0]));
-    ucnv_setDefaultName("UTF-8");
-
-#ifdef USE_SSTREAM
-    ostringstream outTestStream;
-    istringstream inTestStream("\x20\x74\x48\x69\x73\xCE\xBC\xE2\x80\x82\x20\x6D\x75\x20\x77\x6F\x72\x6C\x64");
-#else
-    char testStreamBuf[512];
-    ostrstream outTestStream(testStreamBuf, sizeof(testStreamBuf));
-    istrstream inTestStream("\x20\x74\x48\x69\x73\xCE\xBC\xE2\x80\x82\x20\x6D\x75\x20\x77\x6F\x72\x6C\x64", 0);
-
-    /* initialize testStreamBuf */
-    memset(testStreamBuf, '*', sizeof(testStreamBuf));
-    testStreamBuf[sizeof(testStreamBuf)-1] = 0;
-#endif
-
-    outTestStream << "\x42\x65\x67\x69\x6E\x6E\x69\x6E\x67\x20\x6F\x66\x20\x74\x65\x73\x74\x20";
-    outTestStream << str1 << "\x20\x20" << str2 << str3 << "\x31\x20" << UTF8_NEW_LINE << str4 << ends;
-#ifdef USE_SSTREAM
-    string tempStr = outTestStream.str();
-    const char *testStreamBuf = tempStr.c_str();
-#endif
-    if (strcmp(testStreamBuf, testStr) != 0) {
-        log_err("Got: \"%s\", Expected: \"%s\"\n", testStreamBuf, testStr);
-    }
-
-    inTestStream >> inStr >> inStr2;
-    if (inStr.compare(thisMu) != 0) {
-        u_austrncpy(inStrC, inStr.getBuffer(), inStr.length());
-        inStrC[inStr.length()] = 0;
-        log_err("Got: \"%s\", Expected: \"tHis\\u03BC\"\n", inStrC);
-    }
-    if (inStr2.compare(mu) != 0) {
-        u_austrncpy(inStrC, inStr.getBuffer(), inStr.length());
-        inStrC[inStr.length()] = 0;
-        log_err("Got: \"%s\", Expected: \"mu\"\n", inStrC);
-    }
-
-    /* return the default converter to the original state. */
-    ucnv_setDefaultName(defConvName);
-    defConv = u_getDefaultConverter(&status);
-    if (U_FAILURE(status)) {
-        log_err("Can't get default converter");
-        return;
-    }
-    ucnv_close(defConv);
-#else
-    log_info("U_IOSTREAM_SOURCE is disabled\n");
-#endif
-}
-U_CDECL_END
-
 static void addAllTests(TestNode** root) {
     addFileTest(root);
     addStringTest(root);
+    addTranslitTest(root);
 
 #if !UCONFIG_NO_FORMATTING
     addTest(root, &DataDrivenPrintf, "datadriv/DataDrivenPrintf");
     addTest(root, &DataDrivenPrintfPrecision, "datadriv/DataDrivenPrintfPrecision");
     addTest(root, &DataDrivenScanf, "datadriv/DataDrivenScanf");
 #endif
-    addTest(root, &TestStream, "stream/TestStream");
+    addStreamTests(root);
 }
 
 /* returns the path to icu/source/data/out */
@@ -865,6 +768,10 @@ int main(int argc, char* argv[])
     int32_t nerrors = 0;
     TestNode *root = NULL;
     UErrorCode errorCode = U_ZERO_ERROR;
+    UDate startTime, endTime;
+    int32_t diffTime;
+
+    startTime = uprv_getUTCtime();
 
     /* Check whether ICU will initialize without forcing the build data directory into
     *  the ICU_DATA path.  Success here means either the data dll contains data, or that
@@ -916,5 +823,14 @@ int main(int argc, char* argv[])
     cleanUpTestTree(root);
     DataDrivenLogger::cleanUp();
     u_cleanup();
+
+    endTime = uprv_getUTCtime();
+    diffTime = (int32_t)(endTime - startTime);
+    printf("Elapsed Time: %02d:%02d:%02d.%03d\n",
+        (int)((diffTime%U_MILLIS_PER_DAY)/U_MILLIS_PER_HOUR),
+        (int)((diffTime%U_MILLIS_PER_HOUR)/U_MILLIS_PER_MINUTE),
+        (int)((diffTime%U_MILLIS_PER_MINUTE)/U_MILLIS_PER_SECOND),
+        (int)(diffTime%U_MILLIS_PER_SECOND));
+
     return nerrors;
 }