⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ck_timespec.cpp

📁 一个不错
💻 CPP
📖 第 1 页 / 共 4 页
字号:
/* Copyright is licensed under GNU LGPL.                 by I.J.Wang 2003*/#include "wytimespec.h"#include "wystr.h"#include <iostream>#include <limits>#include <unistd.h>#include <sys/types.h>#if WYTIMESPEC_VERSION!=31#error Test code is for WYTIMESPEC_VERSION 31#endif#define TEST_SLEEP_TILL// Constant limits use for test//static const long LongMax=std::numeric_limits<long>::max();static const long LongMin=std::numeric_limits<long>::min();static const Wy_Second MaxSecond=std::numeric_limits<Wy_Second>::max();static const Wy_Second MinSecond=std::numeric_limits<Wy_Second>::min();static const Wy_Second MaxL2=MaxSecond/2;static const Wy_Second MaxNano=std::numeric_limits<Wy_Nano>::max();static const Wy_Second MinNano=std::numeric_limits<Wy_Nano>::min();// note: this is zero-terminated stringstatic const WyCSeg IAMsg=" secs (supposedly 1.0 second, may be Ok)\n\0";static bool chk_default(const WyTimeSpec& tm){const static WyTimeSpec T0; if(tm.is_default()==false) {   return(false); } if((tm.second()!=0)||(tm.nano()!=0)) {   return(false); } if(tm==T0) { } else {   return(false); } if(tm!=T0) {   return(false); } return(true);};static bool chk_not_default(const WyTimeSpec& tm){const static WyTimeSpec T0; if(tm.is_default()) {   return(false); } if((tm.second()==0)&&(tm.nano()==0)) {   return(false); } if(tm!=T0) { } else {   return(false); } if(tm==T0) {   return(false); } return(true);};static bool chk_equ(const WyTimeSpec& tm1,const WyTimeSpec& tm2){ if(tm1==tm2) {   if(tm1.second()!=tm2.second()) {     WY_THROW( WyRet() );   }   if(tm1.nano()!=tm2.nano()) {     WY_THROW( WyRet() );   } } else {   return(false); } if(tm1!=tm2) {   return(false); } if(tm1.second()!=tm2.second()) {   return(false); } if(tm1.nano()!=tm2.nano()) {   return(false); } return(true);};#define CHK_EQU(expr1,expr2) if(chk_equ(expr1,expr2)==false) { WY_THROW( WyRet() ); };#define CHK_NOT_EQU(expr1,expr2) if(chk_not_equ(expr1,expr2)==false) { WY_THROW( WyRet() ); };#define CHK_DEFAULT(expr) if(chk_default(expr)==false) { WY_THROW( WyRet() ); };#define CHK_NOT_DEFAULT(expr) if(chk_not_default(expr)==false) { WY_THROW( WyRet() ); };static void dump_tm(const struct tm* tsp){ std::cout      << "tm_year=" << tsp->tm_year     << ", tm_mon=" << tsp->tm_mon     << ", tm_mday=" << tsp->tm_mday     << ", tm_hour=" << tsp->tm_hour     << ", tm_min=" << tsp->tm_min     << ", tm_sec=" << tsp->tm_sec     << ", tm_wday=" << tsp->tm_wday     << ", tm_yday=" << tsp->tm_yday     << ", tm_isdst=" << tsp->tm_isdst     << "\n";};/*   Check WyTimeSpec public interface (set_systime is not tested)*/static void t1(void){ WyRet r; // Check WyTimeSpec()/WyTimeSpec(const WyTimeSpec&) // {   WyTimeSpec a0,a1(a0);   CHK_DEFAULT(a0);   CHK_DEFAULT(a1);   CHK_EQU(a0,a1); } // WyTimeSpec(Wy_Second,Wy_Nano)/WyTimeSpec(Wy_Second) {   WyTimeSpec a1(100,100);   WyTimeSpec a2(a1);   WyTimeSpec a3(99,1000000100L);   CHK_NOT_DEFAULT(a1);   CHK_NOT_DEFAULT(a2);   CHK_NOT_DEFAULT(a3);   CHK_EQU(a1,a2);   CHK_EQU(a1,a3);   if((a1.second()!=100)||(a1.nano()!=100)) {     WY_THROW( WyRet() );   }   WyTimeSpec a4(-100,-100);   if((a4.second()!=-100)||(a4.nano()!=-100)) {     WY_THROW( WyRet() );   }   WyTimeSpec a5(-100, 100);   if((a5.second()!=-99)||(a5.nano()!=-WyTimeSpec::_Giga+100)) {     std::cout << " second()=" << a5.second()                << " nano()=" << a5.nano() << std::endl;     WY_THROW( WyRet() );   }   WyTimeSpec a6( 100,-100);   if((a6.second()!=99)||(a6.nano()!=WyTimeSpec::_Giga-100)) {     std::cout << " second()=" << a6.second()                << " nano()=" << a6.nano() << std::endl;     WY_THROW( WyRet() );   }   WyTimeSpec a7(100,0);   if((a7.second()!=100)||(a7.nano()!=0)) {     WY_THROW( WyRet() );   }   WyTimeSpec a8(-100,0);   if((a8.second()!=-100)||(a8.nano()!=0)) {     WY_THROW( WyRet() );   } } // WyTimeSpec(const char*) {   WyTimeSpec t1("234");   CHK_NOT_DEFAULT(t1);   if(t1.second()!=234) {     WY_THROW( WyRet() );   }   if(t1.nano()!=0) {     WY_THROW( WyRet() );   }   WyTimeSpec t2("-2345.");   CHK_NOT_DEFAULT(t2);   if(t2.second()!=-2345) {     WY_THROW( WyRet() );   }   if(t2.nano()!=0) {     WY_THROW( WyRet() );   }   WyTimeSpec t3("-.123456789");   CHK_NOT_DEFAULT(t3);   if(t3.second()!=0) {     WY_THROW( WyRet() );   }   if(t3.nano()!=-123456789L) {     WY_THROW( WyRet() );   }   WyTimeSpec t4("12.34000000000000000");   CHK_NOT_DEFAULT(t4);   if(t4.second()!=12) {     WY_THROW( WyRet() );   }   if(t4.nano()!=340000000L) {     WY_THROW( WyRet() );   }   WyTimeSpec t5("-2.345e1");   CHK_NOT_DEFAULT(t5);   if(t5.second()!=-23) {     WY_THROW( WyRet() );   }   if(t5.nano()!=-450000000) {     WY_THROW( WyRet() );   } } // chk WyTimeSpec(const WyCSeg&) {   WyTimeSpec t5(WyCSeg("-2.345e1x",8));   CHK_NOT_DEFAULT(t5);   if(t5.second()!=-23) {     WY_THROW( WyRet() );   }   if(t5.nano()!=-450000000) {     WY_THROW( WyRet() );   } } // chk WyTimeSpec(double) {   WyTimeSpec tmp( double(123.456) );   CHK_NOT_DEFAULT(tmp);   if(tmp.second()!=123) {     WY_THROW( WyRet() );   }   if(tmp.nano()!=456000000) {     WY_THROW( WyRet() );   }   WyTimeSpec tmp2( double(-123.456) );   CHK_NOT_DEFAULT(tmp2);   if(tmp2.second()!=-123) {     WY_THROW( WyRet() );   }   if(tmp2.nano()!=-456000000) {     WY_THROW( WyRet() );   }   WyTimeSpec tmp3( double(0.456) );   CHK_NOT_DEFAULT(tmp3);   if(tmp3.second()!=0) {     WY_THROW( WyRet() );   }   if(tmp3.nano()!=456000000) {     WY_THROW( WyRet() );   } } // reset // {   const WyTimeSpec a0;   const WyTimeSpec a1(200,200);   WyTimeSpec tmp(a1);   CHK_DEFAULT(a0);   CHK_NOT_DEFAULT(a1);   CHK_NOT_DEFAULT(tmp);      tmp.reset();   CHK_DEFAULT(tmp);   tmp.reset(a1);   CHK_EQU(tmp,a1);   tmp.reset(a0);   CHK_EQU(tmp,a0);   if((r=tmp.reset(a1.second(),a1.nano()))!=Ok) {      WY_THROW(r);   }   CHK_EQU(tmp,a1);   tmp.reset(Wy_Second(),0);   if(tmp.second()!=0) {     WY_THROW( WyRet() );   }   if((r=tmp.reset(300,LongMax))!=Ok) {     WY_THROW( WyRet() );    }   if((tmp.second()!=300+LongMax/WyTimeSpec::_Giga)||        (tmp.nano()!=LongMax%WyTimeSpec::_Giga)) {    WY_THROW( WyRet() );   // not rounded-up   }   if((r=tmp.reset(300,LongMin))!=Ok) {     WY_THROW( WyRet() );    }   WyTimeSpec tmp1(300+LongMin/WyTimeSpec::_Giga,LongMin%WyTimeSpec::_Giga);   CHK_EQU(tmp,tmp1);   tmp.reset(20,0);   if((tmp.second()!=20)||(tmp.nano()!=0)) {     WY_THROW( WyRet() );    } } // reset(const char*) {   const WyTimeSpec NDefault(1,1);   WyTimeSpec t1;   CHK_DEFAULT(t1);   t1.reset(NDefault);   if((r=t1.reset("0"))!=Ok) {     WY_THROW(r);   }   CHK_DEFAULT(t1);   t1.reset(NDefault);   if((r=t1.reset("0."))!=Ok) {     WY_THROW(r);   }   CHK_DEFAULT(t1);   t1.reset(NDefault);   if((r=t1.reset(".0"))!=Ok) {     WY_THROW(r);   }   CHK_DEFAULT(t1);   t1.reset(NDefault);   if((r=t1.reset("0.0"))!=Ok) {     WY_THROW(r);   }   CHK_DEFAULT(t1);   t1.reset(NDefault);   if((r=t1.reset("-0.0"))!=Ok) {     WY_THROW(r);   }   CHK_DEFAULT(t1);   if((r=t1.reset("1.000000002"))!=Ok) {     WY_THROW(r);   }   if(t1.second()!=1) {     WY_THROW( WyRet() );   }   if(t1.nano()!=2) {     WY_THROW( WyRet() );   }   if((r=t1.reset("-123.400000000000000000"))!=Ok) {     WY_THROW(r);   }   if(t1.second()!=-123) {     WY_THROW( WyRet() );   }   if(t1.nano()!=-400000000L) {     WY_THROW( WyRet() );   } } // swap {  const WyTimeSpec Nobj(1,2);  WyTimeSpec tmp0(Nobj),tmp1,tmp2;  CHK_NOT_DEFAULT(tmp0);  CHK_DEFAULT(tmp1);  CHK_DEFAULT(tmp2);  CHK_NOT_DEFAULT(Nobj);  tmp1.swap(tmp2);  CHK_DEFAULT(tmp1);  CHK_DEFAULT(tmp2);  tmp1.swap(tmp0);  CHK_DEFAULT(tmp0);  CHK_NOT_DEFAULT(tmp1);  CHK_EQU(tmp1,Nobj);  tmp0.swap(tmp1);  CHK_DEFAULT(tmp1);  CHK_NOT_DEFAULT(tmp0);  CHK_EQU(tmp0,Nobj); } // operator = // {   WyTimeSpec a2(-100,-100),a3(100,100),a4;   CHK_DEFAULT(a4);   a4=a3;   CHK_EQU(a4,a3);   a4=a2;   CHK_EQU(a4,a2); } // operator =(const char*) {   WyTimeSpec t1;   CHK_DEFAULT(t1);   if(&(t1="0")!=&t1) {     WY_THROW( WyRet() );   }   t1="2.5e0";   if(t1.second()!=2) {     WY_THROW( WyRet() );   }   if(t1.nano()!=500000000L) {     WY_THROW( WyRet() );   }   t1="-2.5";   if(t1.second()!=-2) {     WY_THROW( WyRet() );   }   if(t1.nano()!=-500000000L) {     WY_THROW( WyRet() );   } } // operator -() // {   WyTimeSpec a1,a2;   CHK_DEFAULT(a1);   CHK_EQU(-a1,WyTimeSpec(Wy_Second(),Wy_Nano()));   a1.reset(-111,-111);   a2.reset(a1);   CHK_EQU(-a2,WyTimeSpec(111,111));   CHK_EQU(a1,a2);   a1.reset(-111,-LongMax);   a2.reset(a1);   CHK_EQU(-a2,WyTimeSpec(111,LongMax));   CHK_EQU(a1,a2); } // operator ++() --() {   WyTimeSpec a1;   CHK_DEFAULT(a1);   if(++a1!=WyTimeSpec(1,Wy_Nano())) {     WY_THROW( WyRet() );    }   if(++a1!=WyTimeSpec(2,Wy_Nano())) {     WY_THROW( WyRet() );    }   if(--a1!=WyTimeSpec(1,Wy_Nano())) {     WY_THROW( WyRet() );    }   if(--a1!=WyTimeSpec(Wy_Second(),Wy_Nano())) {     WY_THROW( WyRet() );    } } // operator ++(int) --(int) {   WyTimeSpec a1;   CHK_DEFAULT(a1);   if(a1++!=WyTimeSpec()) {     WY_THROW( WyRet() );    }   if(a1++!=WyTimeSpec(1,Wy_Nano())) {     WY_THROW( WyRet() );    }   if(a1--!=WyTimeSpec(2,Wy_Nano())) {     WY_THROW( WyRet() );    }   if(a1--!=WyTimeSpec(Wy_Second(1),Wy_Nano())) {     WY_THROW( WyRet() );    } } // operator +/-, += // {   WyTimeSpec a2,a3,a4;   a2.reset(100,100);   a3.reset(200,200);   a4=a2+a3;   if((a4.second()!=300)||(a4.nano()!=300)) {     WY_THROW( WyRet() );    }   a4=a2-a3;   CHK_EQU(a4,WyTimeSpec(-100,-100));   a4+=a3;   CHK_EQU(a4,a2); } // operator <,<=, >,>= // {   WyTimeSpec a2,a3,a4;   a2.reset(100,100);   a3.reset(200,200);   a4=a2+a3;   if((a4<a2)||(a4<a3)) {     WY_THROW( WyRet() );    }   if((a4<=a2)||(a4<=a3)) {     WY_THROW( WyRet() );    }   a2.reset(-100,-100);   a3.reset(-200,-200);   a4=a2+a3;   if((a4>a2)||(a4>a3)) {     WY_THROW( WyRet() );    }   if((a4>=a2)||(a4>=a3)) {     WY_THROW( WyRet() );    } } // abs {   WyTimeSpec a2(1,2),a3(-3,-4);   if(a2.abs()!=a2) {     WY_THROW( WyRet() );    }   if(a3.abs()!=WyTimeSpec(3,4)) {     WY_THROW( WyRet() );    }   if(a2!=WyTimeSpec(1,2)) {     WY_THROW( WyRet() );    }   if(a3!=WyTimeSpec(-3,-4)) {     WY_THROW( WyRet() );    } } // add // {   WyTimeSpec a2,a3;   if((r=a2.reset(-400,-400))!=Ok) {     WY_THROW(r);    }   a3.reset(a2);   if((r=a2.add(500,500))!=Ok) {     WY_THROW(r);    }   if((r=a3.add(WyTimeSpec(500,500)))!=Ok) {     WY_THROW(r); 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -