diff options
author | Adam <you@example.com> | 2020-05-17 05:51:50 +0200 |
---|---|---|
committer | Adam <you@example.com> | 2020-05-17 05:51:50 +0200 |
commit | e611b132f9b8abe35b362e5870b74bce94a1e58e (patch) | |
tree | a5781d2ec0e085eeca33cf350cf878f2efea6fe5 /private/ntos/rtl/ttime.c | |
download | NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar.gz NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar.bz2 NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar.lz NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar.xz NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar.zst NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.zip |
Diffstat (limited to 'private/ntos/rtl/ttime.c')
-rw-r--r-- | private/ntos/rtl/ttime.c | 325 |
1 files changed, 325 insertions, 0 deletions
diff --git a/private/ntos/rtl/ttime.c b/private/ntos/rtl/ttime.c new file mode 100644 index 000000000..cd71ec3b1 --- /dev/null +++ b/private/ntos/rtl/ttime.c @@ -0,0 +1,325 @@ +/*++ + +Copyright (c) 1989 Microsoft Corporation + +Module Name: + + ttime.c + +Abstract: + + Test program for the time conversion package + +Author: + + Gary Kimura [GaryKi] 27-Aug-1989 + +Revision History: + +--*/ + +#include <stdio.h> + +#include "nt.h" +#include "ntrtl.h" + +VOID +PrintTimeFields( + IN PTIME_FIELDS TimeFields + ); + +LARGE_INTEGER Zero; +LARGE_INTEGER OneSecond; +LARGE_INTEGER OneMinute; +LARGE_INTEGER OneHour; +LARGE_INTEGER OneDay; +LARGE_INTEGER OneWeek; +LARGE_INTEGER OneNormalYear; +LARGE_INTEGER OneLeapYear; +LARGE_INTEGER OneCentury; +LARGE_INTEGER TwoCenturies; +LARGE_INTEGER ThreeCenturies; +LARGE_INTEGER FourCenturies; + +LARGE_INTEGER Sum; + +TIME_FIELDS TimeFields; +LARGE_INTEGER Time; + +LARGE_INTEGER StartOf1970; +LARGE_INTEGER StartOf1980; + +int +main( + int argc, + char *argv[] + ) +{ + ULONG i; + + // + // We're starting the test + // + + DbgPrint("Start Time Test\n"); + + // + // Start by initializing some constants and making sure they + // are correct + // + + Zero.QuadPart = 0; + OneSecond.QuadPart = 10000000; + OneMinute.QuadPart = OneSecond.QuadPart * 60; + OneHour.QuadPart = OneMinute.QuadPart * 60; + OneDay.QuadPart = OneHour.QuadPart * 24; + OneWeek.QuadPart = OneDay.QuadPart * 7; + OneNormalYear.QuadPart = OneDay.QuadPart * 365; + OneLeapYear.QuadPart = OneDay.QuadPart * 366; + OneCentury.QuadPart = (OneNormalYear.QuadPart * 76) + (OneLeapYear.QuadPart * 24); + TwoCenturies.QuadPart = OneCentury.QuadPart * 2; + ThreeCenturies.QuadPart = OneCentury.QuadPart * 3; + FourCenturies.QuadPart = (OneCentury.QuadPart * 4) + OneDay.QuadPart; + + Sum.QuadPart = Zero.QuadPart + + OneSecond.QuadPart + + OneMinute.QuadPart + + OneHour.QuadPart + + OneDay.QuadPart + + OneWeek.QuadPart + + OneNormalYear.QuadPart + + ThreeCenturies.QuadPart; + + + RtlTimeToTimeFields( (PLARGE_INTEGER)&Zero, &TimeFields ); + DbgPrint("StartOf1601 = "); PrintTimeFields( &TimeFields ); DbgPrint("\n"); + if (!RtlTimeFieldsToTime( &TimeFields, &Time )) { + DbgPrint("****ERROR converting TimeFields back to Zero\n"); + } + if ((Time.LowPart != Zero.LowPart) || (Time.HighPart != Zero.HighPart)) { + DbgPrint("****ERROR Time != Zero\n"); + } + + RtlTimeToTimeFields( (PLARGE_INTEGER)&OneSecond, &TimeFields ); + DbgPrint(" + 1 Second = "); PrintTimeFields( &TimeFields ); DbgPrint("\n"); + if (!RtlTimeFieldsToTime( &TimeFields, &Time )) { + DbgPrint("****ERROR converting TimeFields back to OneSecond\n"); + } + if ((Time.LowPart != OneSecond.LowPart) || (Time.HighPart != OneSecond.HighPart)) { + DbgPrint("****ERROR Time != OneSecond\n"); + } + + RtlTimeToTimeFields( (PLARGE_INTEGER)&OneMinute, &TimeFields ); + DbgPrint(" + 1 Minute = "); PrintTimeFields( &TimeFields ); DbgPrint("\n"); + if (!RtlTimeFieldsToTime( &TimeFields, &Time )) { + DbgPrint("****ERROR converting TimeFields back to OneMinute\n"); + } + if ((Time.LowPart != OneMinute.LowPart) || (Time.HighPart != OneMinute.HighPart)) { + DbgPrint("****ERROR Time != OneMinute\n"); + } + + RtlTimeToTimeFields( (PLARGE_INTEGER)&OneHour, &TimeFields ); + DbgPrint(" + 1 Hour = "); PrintTimeFields( &TimeFields ); DbgPrint("\n"); + if (!RtlTimeFieldsToTime( &TimeFields, &Time )) { + DbgPrint("****ERROR converting TimeFields back to OneHour\n"); + } + if ((Time.LowPart != OneHour.LowPart) || (Time.HighPart != OneHour.HighPart)) { + DbgPrint("****ERROR Time != OneHour\n"); + } + + RtlTimeToTimeFields( (PLARGE_INTEGER)&OneDay, &TimeFields ); + DbgPrint(" + 1 Day = "); PrintTimeFields( &TimeFields ); DbgPrint("\n"); + if (!RtlTimeFieldsToTime( &TimeFields, &Time )) { + DbgPrint("****ERROR converting TimeFields back to OneDay\n"); + } + if ((Time.LowPart != OneDay.LowPart) || (Time.HighPart != OneDay.HighPart)) { + DbgPrint("****ERROR Time != OneDay\n"); + } + + RtlTimeToTimeFields( (PLARGE_INTEGER)&OneWeek, &TimeFields ); + DbgPrint(" + 1 Week = "); PrintTimeFields( &TimeFields ); DbgPrint("\n"); + if (!RtlTimeFieldsToTime( &TimeFields, &Time )) { + DbgPrint("****ERROR converting TimeFields back to OneWeek\n"); + } + if ((Time.LowPart != OneWeek.LowPart) || (Time.HighPart != OneWeek.HighPart)) { + DbgPrint("****ERROR Time != OneWeek\n"); + } + + RtlTimeToTimeFields( (PLARGE_INTEGER)&OneNormalYear, &TimeFields ); + DbgPrint(" + 1 NormalYear = "); PrintTimeFields( &TimeFields ); DbgPrint("\n"); + if (!RtlTimeFieldsToTime( &TimeFields, &Time )) { + DbgPrint("****ERROR converting TimeFields back to OneNormalYear\n"); + } + if ((Time.LowPart != OneNormalYear.LowPart) || (Time.HighPart != OneNormalYear.HighPart)) { + DbgPrint("****ERROR Time != OneNormalYear\n"); + } + + RtlTimeToTimeFields( (PLARGE_INTEGER)&OneLeapYear, &TimeFields ); + DbgPrint(" + 1 LeapYear = "); PrintTimeFields( &TimeFields ); DbgPrint("\n"); + if (!RtlTimeFieldsToTime( &TimeFields, &Time )) { + DbgPrint("****ERROR converting TimeFields back to OneLeapYear\n"); + } + if ((Time.LowPart != OneLeapYear.LowPart) || (Time.HighPart != OneLeapYear.HighPart)) { + DbgPrint("****ERROR Time != OneLeapYear\n"); + } + + RtlTimeToTimeFields( (PLARGE_INTEGER)&OneCentury, &TimeFields ); + DbgPrint(" + 1 Century = "); PrintTimeFields( &TimeFields ); DbgPrint("\n"); + if (!RtlTimeFieldsToTime( &TimeFields, &Time )) { + DbgPrint("****ERROR converting TimeFields back to OneCentury\n"); + } + if ((Time.LowPart != OneCentury.LowPart) || (Time.HighPart != OneCentury.HighPart)) { + DbgPrint("****ERROR Time != OneCentury\n"); + } + + RtlTimeToTimeFields( (PLARGE_INTEGER)&TwoCenturies, &TimeFields ); + DbgPrint(" + 2 Centuries = "); PrintTimeFields( &TimeFields ); DbgPrint("\n"); + if (!RtlTimeFieldsToTime( &TimeFields, &Time )) { + DbgPrint("****ERROR converting TimeFields back to TwoCenturies\n"); + } + if ((Time.LowPart != TwoCenturies.LowPart) || (Time.HighPart != TwoCenturies.HighPart)) { + DbgPrint("****ERROR Time != TwoCenturies\n"); + } + + RtlTimeToTimeFields( (PLARGE_INTEGER)&ThreeCenturies, &TimeFields ); + DbgPrint(" + 3 Centuries = "); PrintTimeFields( &TimeFields ); DbgPrint("\n"); + if (!RtlTimeFieldsToTime( &TimeFields, &Time )) { + DbgPrint("****ERROR converting TimeFields back to ThreeCenturies\n"); + } + if ((Time.LowPart != ThreeCenturies.LowPart) || (Time.HighPart != ThreeCenturies.HighPart)) { + DbgPrint("****ERROR Time != ThreeCenturies\n"); + } + + RtlTimeToTimeFields( (PLARGE_INTEGER)&FourCenturies, &TimeFields ); + DbgPrint(" + 4 Centuries = "); PrintTimeFields( &TimeFields ); DbgPrint("\n"); + if (!RtlTimeFieldsToTime( &TimeFields, &Time )) { + DbgPrint("****ERROR converting TimeFields back to FourCenturies\n"); + } + if ((Time.LowPart != FourCenturies.LowPart) || (Time.HighPart != FourCenturies.HighPart)) { + DbgPrint("****ERROR Time != FourCenturies\n"); + } + + RtlTimeToTimeFields( (PLARGE_INTEGER)&Sum, &TimeFields ); + DbgPrint(" + sum = "); PrintTimeFields( &TimeFields ); DbgPrint("\n"); + if (!RtlTimeFieldsToTime( &TimeFields, &Time )) { + DbgPrint("****ERROR converting TimeFields back to Sum\n"); + } + if ((Time.LowPart != Sum.LowPart) || (Time.HighPart != Sum.HighPart)) { + DbgPrint("****ERROR Time != Sum\n"); + } + + DbgPrint("\n"); + + // + // Setup and test the start 1970 time + // + + RtlSecondsSince1970ToTime( 0, &StartOf1970 ); + RtlTimeToTimeFields( &StartOf1970, &TimeFields ); + DbgPrint(" Start of 1970 = "); PrintTimeFields( &TimeFields ); DbgPrint("\n"); + if (!RtlTimeFieldsToTime( &TimeFields, &Time )) { + DbgPrint("****ERROR converting TimeFields back to start of 1970\n"); + } + if ((Time.LowPart != StartOf1970.LowPart) || (Time.HighPart != StartOf1970.HighPart)) { + DbgPrint("****ERROR Time != StartOf1970\n"); + } + if (!RtlTimeToSecondsSince1970( &StartOf1970, &i )) { + DbgPrint("****ERROR converting time to seconds since 1970\n"); + } + if (i != 0) { + DbgPrint("****ERROR seconds since 1970 != 0\n"); + } + + // + // Setup and test the start 1980 time + // + + RtlSecondsSince1980ToTime( 0, &StartOf1980 ); + RtlTimeToTimeFields( &StartOf1980, &TimeFields ); + DbgPrint(" Start of 1980 = "); PrintTimeFields( &TimeFields ); DbgPrint("\n"); + if (!RtlTimeFieldsToTime( &TimeFields, &Time )) { + DbgPrint("****ERROR converting TimeFields back to start of 1980\n"); + } + if ((Time.LowPart != StartOf1980.LowPart) || (Time.HighPart != StartOf1980.HighPart)) { + DbgPrint("****ERROR Time != StartOf1980\n"); + } + if (!RtlTimeToSecondsSince1980( &StartOf1980, &i )) { + DbgPrint("****ERROR converting time to seconds since 1980\n"); + } + if (i != 0) { + DbgPrint("****ERROR seconds since 1980 != 0\n"); + } + + // + // Lets try to print the Christmas when Santa arrives for 1901 to 2001 + // every 10 years + // + + TimeFields.Month = 12; + TimeFields.Day = 25; + TimeFields.Hour = 3; + TimeFields.Minute = 30; + TimeFields.Second = 15; + TimeFields.Milliseconds = 250; + + for (i = 1901; i < 2002; i += 10) { + + TimeFields.Year = i; + + if (!RtlTimeFieldsToTime( &TimeFields, &Time )) { + DbgPrint("****ERROR converting TimeFields to Christmas %4d\n", TimeFields.Year); + } + RtlTimeToTimeFields( &Time, &TimeFields ); + DbgPrint(" Christmas %4d = ", i); PrintTimeFields( &TimeFields ); DbgPrint("\n"); + + } + + // + // Let's see how old I really am, when I turn 10, 20, 30, ... + // + + TimeFields.Month = 12; + TimeFields.Day = 5; + TimeFields.Hour = 3; + TimeFields.Minute = 14; + TimeFields.Second = 0; + TimeFields.Milliseconds = 0; + + for (i = 1956; i <= 1956+60; i += 10) { + + TimeFields.Year = i; + + if (!RtlTimeFieldsToTime( &TimeFields, &Time )) { + DbgPrint("****ERROR converting TimeFields to DOB %4d\n", TimeFields.Year); + } + RtlTimeToTimeFields( &Time, &TimeFields ); + DbgPrint(" DOB + %4d = ", i-1956); PrintTimeFields( &TimeFields ); DbgPrint("\n"); + + } + + DbgPrint("End Time Test\n"); + + return TRUE; +} + +VOID +PrintTimeFields ( + IN PTIME_FIELDS TimeFields + ) +{ + static PCHAR Months[] = {"Jan", "Feb", "Mar", "Apr", "May", "Jun", + "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"}; + + static PCHAR Days[] = {"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"}; + + DbgPrint(" %d", TimeFields->Year); + DbgPrint("-%s", Months[TimeFields->Month-1]); + DbgPrint("-%d", TimeFields->Day); + + DbgPrint(" %2d", TimeFields->Hour); + DbgPrint(":%2d", TimeFields->Minute); + DbgPrint(":%2d", TimeFields->Second); + DbgPrint(".%3d", TimeFields->Milliseconds); + + DbgPrint(" (%s)", Days[TimeFields->Weekday]); +} |