blob: e3fa020ff13b4d098483a0ff8959d03919afa6fb [file] [log] [blame]
/* Copyright (c) 2002,2003 CrystalClear Software, Inc.
* Use, modification and distribution is subject to the
* Boost Software License, Version 1.0. (See accompanying
* file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
*/
#include "boost/date_time/posix_time/posix_time.hpp"
#include "boost/date_time/microsec_time_clock.hpp"
#include "../testfrmwk.hpp"
#if defined(BOOST_HAS_FTIME)
#include <windows.h>
#endif
int
main()
{
#ifdef BOOST_DATE_TIME_HAS_HIGH_PRECISION_CLOCK
using namespace boost::posix_time;
// ptime last = boost::date_time::microsec_resolution_clock<ptime>::local_time();
ptime last = microsec_clock::local_time();
int max = 30;
int i = 0;
for (i = 0; i<max; i++)
{
for (int j=0; j<100000; j++)
{
// some systems loop too fast so "last is less" tests fail
// due to 'last' & 't2' being equal. These calls slow
// it down enough to make 'last' & 't2' different
#if defined(BOOST_HAS_GETTIMEOFDAY)
timeval tv;
gettimeofday(&tv, 0);
#endif
#if defined(BOOST_HAS_FTIME)
SYSTEMTIME st;
GetSystemTime(&st);
#endif
}
ptime t1 = second_clock::local_time();
std::cout << to_simple_string(t1) << std::endl;
ptime t2 = microsec_clock::local_time();
std::cout << to_simple_string(t2) << std::endl;
check("hours match", t1.time_of_day().hours() == t2.time_of_day().hours());
check("minutes match",
t1.time_of_day().minutes() == t2.time_of_day().minutes());
check("seconds match",
t1.time_of_day().minutes() == t2.time_of_day().minutes());
check("hours date", t1.date() == t2.date());
if( !check("last is less", last <= t2) ) {
std::cout << to_simple_string(last) << " < "
<< to_simple_string(t2) << std::endl;
}
last = t2;
}
std::cout << "Now do the same test for universal time -- a few less iterations" << std::endl;
max = 10;
last = microsec_clock::universal_time();
for (i = 0; i<max; i++)
{
for (int j=0; j<100000; j++)
{
// some systems loop too fast so "last is less" tests fail
// due to 'last' & 't2' being equal. These calls slow
// it down enough to make 'last' & 't2' different
#if defined(BOOST_HAS_GETTIMEOFDAY)
timeval tv;
gettimeofday(&tv, 0);
#endif
#if defined(BOOST_HAS_FTIME)
SYSTEMTIME st;
GetSystemTime(&st);
#endif
}
ptime t1 = second_clock::universal_time();
std::cout << to_simple_string(t1) << std::endl;
ptime t2 = microsec_clock::universal_time();
std::cout << to_simple_string(t2) << std::endl;
check("hours match", t1.time_of_day().hours() == t2.time_of_day().hours());
check("minutes match",
t1.time_of_day().minutes() == t2.time_of_day().minutes());
check("seconds match",
t1.time_of_day().minutes() == t2.time_of_day().minutes());
check("hours date", t1.date() == t2.date());
//following check might be equal on a really fast machine
if( !check("last is less", last <= t2) ) {
std::cout << to_simple_string(last) << " < "
<< to_simple_string(t2) << std::endl;
}
last = t2;
}
#else
check("Get time of day micro second clock not supported due to inadequate compiler/platform", false);
#endif
return printTestStats();
}