diff -r 000000000000 -r e4d67989cc36 genericopenlibs/cstdlib/TSTLIB/TTIME.C --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/genericopenlibs/cstdlib/TSTLIB/TTIME.C Tue Feb 02 02:01:42 2010 +0200 @@ -0,0 +1,242 @@ +/* +* Copyright (c) 1997-2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* Time handling +* +* +*/ + + + +#include /* definition of exit() */ +#include +#include +#include +#include +#include /* timeval, gettimeofday */ + +void msdev_time_example(void); + +void NEXT_TEST(const char *title) + { + static int first = 1; + int c; + if (!first) + { + printf("\nContinue [Y/N]? "); + c = getchar(); + if (c == 'q' || c == 'Q' || c == 'n' || c == 'N') + { + printf("\nAbandoned.\n"); + exit(-1); + } + } + first = 0; + printf("\f\n%s\n\n", title); + } + +/** +@SYMTestCaseID SYSLIB-STDLIB-CT-1080 +@SYMTestCaseDesc Time handling functions test +@SYMTestPriority High +@SYMTestActions Tests for time handling routines +@SYMTestExpectedResults Test must not fail +@SYMREQ REQ0000 +*/ +int main (int argc, char *argv[]) + { + time_t now, then; + struct tm *tmp, newtm; + char tmpbuf[128]; + struct timeval tv, tv2; + struct timezone tz; + int err, duration, count; + + NEXT_TEST("What's the time, Mr Epoc32"); + + then = 0; + now = time(0); + err = gettimeofday(&tv, &tz); + + printf("time_t 0 = %9ld = %s\n", then, ctime(&then)); + printf("time now = %9ld = %s", now, ctime(&now)); + + if (err < 0) + printf("gettimeofday failed\n"); + else + { + printf("gettimeofday = %9ld + %d usecs\n\n", tv.tv_sec, tv.tv_usec); + printf("timezone = %d mins west of GMT, DST is %s\n", + tz.tz_minuteswest, tz.tz_dsttime? "ON":"OFF"); + } + + + NEXT_TEST("Cost of getttimeofday"); + + count = 0; + gettimeofday(&tv, &tz); + + /* Wait for first usec transition */ + err = gettimeofday(&tv2, &tz); + while (err == 0 && tv2.tv_sec == tv.tv_sec && tv2.tv_usec == tv.tv_usec) + { + err = gettimeofday(&tv, &tz); + } + + /* Now wait for second transition */ + err = gettimeofday(&tv2, &tz); + while (err == 0 && tv2.tv_sec == tv.tv_sec &&tv2.tv_usec == tv.tv_usec) + { + err = gettimeofday(&tv2, &tz); + count+=1; + } + + if (err < 0) + printf("gettimeofday failed\n"); + else + { + duration = 1000000 *(tv2.tv_sec - tv.tv_sec) + tv2.tv_usec - tv.tv_usec; + if (tv2.tv_usec < tv.tv_usec) + duration += 1000000; + printf("smallest usec delta = %d usecs\n", duration); + printf("gettimeofday took %d usecs for %d calls = %d usecs\n", + duration, count, duration/count); + } + + + NEXT_TEST("localtime: Conversion to struct tm"); + + tmp = localtime(&now); + printf("time now = %9ld = %s", now, ctime(&now)); + printf("tm now = %02d/%02d/%02d %02d:%02d.%02d, wday=%d, dayno=%d\n", + tmp->tm_mday, tmp->tm_mon+1, tmp->tm_year, + tmp->tm_hour, tmp->tm_min, tmp->tm_sec, + tmp->tm_wday, tmp->tm_yday); + + + NEXT_TEST("mktime: Conversion from struct tm"); + + /* Example derived from MSDEV mktime documentation */ + + newtm.tm_mday = 03; + newtm.tm_mon = 04; + newtm.tm_year = 94; + newtm.tm_hour = 12; + newtm.tm_min = 45; + newtm.tm_sec = 47; + newtm.tm_wday = 9999; + newtm.tm_yday = 9999; + + tmp = &newtm; + printf("tm before = %02d/%02d/%02d %02d:%02d.%02d, wday=%d, dayno=%d\n", + tmp->tm_mday, tmp->tm_mon+1, tmp->tm_year, + tmp->tm_hour, tmp->tm_min, tmp->tm_sec, + tmp->tm_wday, tmp->tm_yday); + then = mktime(tmp); + printf("tm after = %02d/%02d/%02d %02d:%02d.%02d, wday=%d, dayno=%d\n", + tmp->tm_mday, tmp->tm_mon+1, tmp->tm_year, + tmp->tm_hour, tmp->tm_min, tmp->tm_sec, + tmp->tm_wday, tmp->tm_yday); + printf("then = %ld = %s", then, ctime(&then)); + + printf("\nAdd 29 days...(Wed Jun 01)\n\n"); + newtm.tm_mday += 29; + then = mktime(tmp); + printf("tm after = %02d/%02d/%04d %02d:%02d.%02d, wday=%d, dayno=%d\n", + tmp->tm_mday, tmp->tm_mon+1, tmp->tm_year+1900, + tmp->tm_hour, tmp->tm_min, tmp->tm_sec, + tmp->tm_wday, tmp->tm_yday); + printf("then = %ld = %s", then, ctime(&then)); + + + NEXT_TEST("strftime: customised string conversion"); + + tmp = localtime( &now ); + strftime( tmpbuf, 128, + "Today is %A, day %d of %B in the year %Y.\n", tmp ); + printf("time now = %9ld = %s", now, ctime(&now)); + printf( tmpbuf ); + + + NEXT_TEST("Example code from MSDEV documentation"); + + msdev_time_example(); + + return 0; + } + +/* +Example code derived from MSDEV documentation on time() function + +Time in seconds since UTC 1/1/70: 768027063 +UNIX time and date: Tue May 03 21:51:03 1994 +Coordinated universal time: Wed May 04 04:51:03 1994 +12-hour time: 09:51:03 PM +Christmas Sat Dec 25 12:00:00 1993 + +Today is Tuesday, day 03 of May in the year 1994. +*/ + +void msdev_time_example(void) +{ + char tmpbuf[128], ampm[] = "AM"; + time_t ltime; + struct tm *today, *gmt, xmas = { 0, 0, 12, 25, 11, 93 }; + + /* Get UNIX-style time and display as number and string. + * time( <ime ); Tue May 03 21:51:03 1994 + */ + struct tm example = { 3, 51, 21, 3, 4, 94 }; + ltime = mktime(&example); + + printf( "Time in seconds since UTC 1/1/70: %ld\n", ltime ); + printf( "UNIX time and date: %s", ctime( <ime ) ); + + /* Display UTC. */ + gmt = gmtime( <ime ); + printf( "Coordinated universal time: %s", asctime( gmt ) ); + + /* Convert to time structure and adjust for PM if necessary. */ + today = localtime( <ime ); + if( today->tm_hour > 12 ) + { + strcpy( ampm, "PM" ); + today->tm_hour -= 12; + } + if( today->tm_hour == 0 ) /* Adjust if midnight hour. */ + today->tm_hour = 12; + + /* Note how pointer addition is used to skip the first 11 + * characters and printf is used to trim off terminating + * characters. + */ + printf( "12-hour time: %.8s %s\n", + asctime( today ) + 11, ampm ); + + /* Make time for noon on Christmas, 1993. */ + if( mktime( &xmas ) != (time_t)-1 ) + printf( "Christmas %s\n", asctime( &xmas ) ); + + /* Use time structure to build a customized time string. */ + today = localtime( <ime ); + + /* Use strftime to build a customized time string. */ + strftime( tmpbuf, 128, + "Today is %A, day %d of %B in the year %Y.\n", today ); + printf( tmpbuf ); +} + + + +