📄 ck_date.cpp
字号:
/* Copyright is licensed under GNU LGPL. by I.J.Wang 2003*/#include "wydate.h"#include <iostream>#if WYDATE_VERSION!=31#error Test code is for WYDATE_VERSION 31#endifstruct ChkData { const char* time_zone; int year; int month; int mday; int hour; int min; int sec; int wday; int yday; WyTimeSpec utc_time;};// Warning: These check data is generated by localtime_r/mktime.// Only consistency can be proved//static const ChkData cdt[]={ {":Europe/Berlin",2003,1,17,23,34,49,5,16,WyTimeSpec(1042842889,Wy_Nano())}, {":Asia/Taipei",2003,1,18,6,34,49,6,17,WyTimeSpec(1042842889,Wy_Nano())}, {":America/Detroit",2003,1,17,17,34,49,5,16,WyTimeSpec(1042842889,Wy_Nano())}, {":America/Miquelon",2003,1,17,19,34,49,5,16,WyTimeSpec(1042842889,Wy_Nano())}, {":America/Martinique",2003,1,17,18,34,49,5,16,WyTimeSpec(1042842889,Wy_Nano())}, {":America/Cordoba",2003,1,17,19,34,49,5,16,WyTimeSpec(1042842889,Wy_Nano())}, {":America/Chicago",2003,1,17,16,34,49,5,16,WyTimeSpec(1042842889,Wy_Nano())}, {":America/Tijuana",2003,1,17,14,34,49,5,16,WyTimeSpec(1042842889,Wy_Nano())}, {":America/Indianapolis",2003,1,17,17,34,49,5,16,WyTimeSpec(1042842889,Wy_Nano())}, {":Pacific/Apia",2003,1,17,11,34,49,5,16,WyTimeSpec(1042842889,Wy_Nano())}, {":Pacific/Honolulu",2003,1,17,12,34,49,5,16,WyTimeSpec(1042842889,Wy_Nano())}, {":Pacific/Easter",2003,1,17,17,34,49,5,16,WyTimeSpec(1042842889,Wy_Nano())}, {":America/Whitehorse",2003,1,17,14,34,49,5,16,WyTimeSpec(1042842889,Wy_Nano())}, {":America/lnuvik",2003,1,17,22,34,49,5,16,WyTimeSpec(1042842889,Wy_Nano())}, {":America/New_York",2003,1,17,17,34,49,5,16,WyTimeSpec(1042842889,Wy_Nano())}, {":America/Anguilla",2003,1,17,18,34,49,5,16,WyTimeSpec(1042842889,Wy_Nano())}, {":Atlantic/Reykjavik",2003,1,17,22,34,49,5,16,WyTimeSpec(1042842889,Wy_Nano())}, {":Europe/Dublin",2003,1,17,22,34,49,5,16,WyTimeSpec(1042842889,Wy_Nano())}, {":Europe/Bratislava",2003,1,17,23,34,49,5,16,WyTimeSpec(1042842889,Wy_Nano())}, {":Europe/Madrid",2003,1,17,23,34,49,5,16,WyTimeSpec(1042842889,Wy_Nano())}, {":Europe/Athens",2003,1,18,0,34,49,6,17,WyTimeSpec(1042842889,Wy_Nano())}, {":Africa/Freetown",2003,1,17,22,34,49,5,16,WyTimeSpec(1042842889,Wy_Nano())}, {":Africa/johannesburg",2003,1,17,22,34,49,5,16,WyTimeSpec(1042842889,Wy_Nano())}, {":Africa/Bujumbura",2003,1,18,0,34,49,6,17,WyTimeSpec(1042842889,Wy_Nano())}, {":Africa/Lome",2003,1,17,22,34,49,5,16,WyTimeSpec(1042842889,Wy_Nano())}, {":Africa/Malabo",2003,1,17,23,34,49,5,16,WyTimeSpec(1042842889,Wy_Nano())}, {":Europe/Bucharest",2003,1,18,0,34,49,6,17,WyTimeSpec(1042842889,Wy_Nano())}, {":Asia/Oral",2003,1,18,2,34,49,6,17,WyTimeSpec(1042842889,Wy_Nano())}, {":Asia/Kuwait",2003,1,18,1,34,49,6,17,WyTimeSpec(1042842889,Wy_Nano())}, {":Indian/Antananarivo",2003,1,18,1,34,49,6,17,WyTimeSpec(1042842889,Wy_Nano())}, {":Asia/Hovd",2003,1,18,5,34,49,6,17,WyTimeSpec(1042842889,Wy_Nano())}, {":Asia/Thimphu",2003,1,18,4,34,49,6,17,WyTimeSpec(1042842889,Wy_Nano())}, {":Asia/Ulaanbaatar",2003,1,18,6,34,49,6,17,WyTimeSpec(1042842889,Wy_Nano())}, {":Asia/Chongqing",2003,1,18,6,34,49,6,17,WyTimeSpec(1042842889,Wy_Nano())}, {":Asia/Taipei",2003,1,18,6,34,49,6,17,WyTimeSpec(1042842889,Wy_Nano())}, {":Asia/Pontianak",2003,1,18,5,34,49,6,17,WyTimeSpec(1042842889,Wy_Nano())}, {":Asia/Tokyo",2003,1,18,7,34,49,6,17,WyTimeSpec(1042842889,Wy_Nano())}, {":Asia/Shanghai",2003,1,18,6,34,49,6,17,WyTimeSpec(1042842889,Wy_Nano())}, {":Asia/Seoul",2003,1,18,7,34,49,6,17,WyTimeSpec(1042842889,Wy_Nano())}, {":Asia/Anadyr",2003,1,18,10,34,49,6,17,WyTimeSpec(1042842889,Wy_Nano())}, {":Australia/Perth",2003,1,18,6,34,49,6,17,WyTimeSpec(1042842889,Wy_Nano())}, {":Australia/Sydney",2003,1,18,9,34,49,6,17,WyTimeSpec(1042842889,Wy_Nano())}, {":Pacific/Niue",2003,1,17,11,34,49,5,16,WyTimeSpec(1042842889,Wy_Nano())}, {":Pacific/Wake",2003,1,18,10,34,49,6,17,WyTimeSpec(1042842889,Wy_Nano())}, {":Pacific/Auckland",2003,1,18,11,34,49,6,17,WyTimeSpec(1042842889,Wy_Nano())}, {":Asia/Singapore",2003,1,18,6,34,49,6,17,WyTimeSpec(1042842889,Wy_Nano())}, {":Europe/Paris",2003,1,17,23,34,49,5,16,WyTimeSpec(1042842889,Wy_Nano())}, {":Europe/London",2003,1,17,22,34,49,5,16,WyTimeSpec(1042842889,Wy_Nano())}, {":Europe/Berlin",2003,1,17,23,34,49,5,16,WyTimeSpec(1042842889,Wy_Nano())}, {":Europe/Moscow",2003,1,18,1,34,49,6,17,WyTimeSpec(1042842889,Wy_Nano())}, {":Antarctical/Palmer",2003,1,17,22,34,49,5,16,WyTimeSpec(1042842889,Wy_Nano())}, {":Arctic/Longyearbyen",2003,1,17,23,34,49,5,16,WyTimeSpec(1042842889,Wy_Nano())}, };static const size_t cdt_size=sizeof(cdt)/sizeof(ChkData);static bool chk_default(const WyDate& date){ if(date.utc_time().nano()!=0) { WY_THROW( WyRet() ); } if(date.is_default()==false) { return(false); } { const static WyDate D0; if(date==D0) {} else { return(false); } if(date!=D0) { return(false); } } if(date.time_zone()!=WyDate::TIMEZONE_UTC) { return(false); } if(date.year()!=1970) { return(false); } if(date.month()!=1) { return(false); } if(date.mday()!=1) { return(false); } if(date.hour()!=0) { return(false); } if(date.min()!=0) { return(false); } if(date.sec()!=0) { return(false); } if(date.wday()!=4) { return(false); } if(date.yday()!=0) { return(false); } if(date.utc_time()!=WyTimeSpec(Wy_Second(),Wy_Nano())) { return(false); } if(date.isdst()!=0) { return(false); } return(true);};static bool chk_not_default(const WyDate& date){ return !chk_default(date);};static bool chk_equ(const WyDate& d1, const WyDate& d2){ if(d1.utc_time().nano()!=0) { WY_THROW( WyRet() ); // nano-second of WyDate currently zero } if(d2.utc_time().nano()!=0) { WY_THROW( WyRet() ); } if(d1!=d2) { return(false); } if(d1.time_zone()!=d2.time_zone()) { return(false); } if(d1.year()!=d2.year()) { return(false); } if(d1.month()!=d2.month()) { return(false); } if(d1.mday()!=d2.mday()) { return(false); } if(d1.hour()!=d2.hour()) { return(false); } if(d1.min()!=d2.min()) { return(false); } if(d1.sec()!=d2.sec()) { return(false); } if(d1.wday()!=d2.wday()) { return(false); } if(d1.yday()!=d2.yday()) { return(false); } if(d1.utc_time()!=d2.utc_time()) { return(false); } if(d1.isdst()!=d2.isdst()) { return(false); } if(d1!=d2) { WY_THROW( WyRet() ); } if(d1==d2) {} else { WY_THROW( WyRet() ); } return(true);};#define CHK_EQU(expr1,expr2) if(chk_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 bool chk_equ(const WyDate& dat, const ChkData& cd){ if(dat.time_zone()!=cd.time_zone) { return(false); } if(dat.year()!=cd.year) { return(false); } if(dat.month()!=cd.month) { return(false); } if(dat.hour()!=cd.hour) { return(false); } if(dat.min()!=cd.min) { return(false); } if(dat.sec()!=cd.sec) { return(false); } if(dat.wday()!=cd.wday) { return(false); } if(dat.yday()!=cd.yday) { return(false); } if(dat.utc_time()!=cd.utc_time) { return(false); } return(true);};//// Check basic (set_systime() not tested)//static void t_date1(void){ WyRet r; // WyDate()/WyDate(const WyDate&) { WyDate a,b(a); CHK_DEFAULT(a); CHK_DEFAULT(b); CHK_EQU(a,b); } // WyDate(const char*,int,int,int,int,int,int) // WyDate(const WyStr&,int,int,int,int,int,int) { for(size_t i=0; i<cdt_size; ++i) { const ChkData& cd=cdt[i]; WyDate smp(cd.time_zone,cd.year,cd.month,cd.mday,cd.hour,cd.min,cd.sec); CHK_EQU(smp,cd); WyDate tmp(smp); CHK_EQU(tmp,smp); } for(size_t i=0; i<cdt_size; ++i) { const ChkData& cd=cdt[i]; WyDate smp(WyStr(cd.time_zone),cd.year,cd.month,cd.mday,cd.hour,cd.min,cd.sec); CHK_EQU(smp,cd); WyDate tmp(smp); CHK_EQU(tmp,smp); } } // WyDate(const char*,const WyTimeSpec&) // WyDate(const WyStr&,const WyTimeSpec&) { for(size_t i=0; i<cdt_size; ++i) { const ChkData& cd=cdt[i]; WyDate smp(cd.time_zone,cd.utc_time); CHK_EQU(smp,cd); } for(size_t i=0; i<cdt_size; ++i) { const ChkData& cd=cdt[i]; WyDate smp(WyStr(cd.time_zone),cd.utc_time); CHK_EQU(smp,cd); } } // reset() { const ChkData& cd=cdt[0]; WyDate d0(cd.time_zone,cd.year,cd.month,cd.mday,cd.hour,cd.min,cd.sec); WyDate tmp; CHK_DEFAULT(tmp); tmp.reset(); CHK_DEFAULT(tmp); d0.reset(); CHK_DEFAULT(d0); } // reset(const WyDate&) { for(size_t i=0; i<cdt_size; ++i) { const ChkData& cd=cdt[i]; WyDate smp(cd.time_zone,cd.utc_time); CHK_EQU(smp,cd); WyDate tmp; if((r=tmp.reset(smp))!=Ok) { WY_THROW(r); } CHK_EQU(tmp,smp); } } // reset(const char*,const WyTimeSpec&) // reset(const WyStr&,const WyTimeSpec&) { for(size_t i=0; i<cdt_size; ++i) { const ChkData& cd=cdt[i]; WyDate smp(cd.time_zone,cd.year,cd.month,cd.mday,cd.hour,cd.min,cd.sec); CHK_EQU(smp,cd); WyDate tmp; if((r=tmp.reset(smp.time_zone(),smp.utc_time()))!=Ok) { WY_THROW(r); } CHK_EQU(tmp,smp); } for(size_t i=0; i<cdt_size; ++i) { const ChkData& cd=cdt[i]; WyDate smp(WyStr(cd.time_zone),cd.year,cd.month,cd.mday,cd.hour,cd.min,cd.sec); CHK_EQU(smp,cd); WyDate tmp; if((r=tmp.reset(smp.time_zone(),smp.utc_time()))!=Ok) { WY_THROW(r); } CHK_EQU(tmp,smp); } } // reset(const char*,int,int,int,int,int,int) // reset(const WyStr&,int,int,int,int,int,int) { for(size_t i=0; i<cdt_size; ++i) { const ChkData& cd=cdt[i]; WyDate smp(cd.time_zone,cd.year,cd.month,cd.mday,cd.hour,cd.min,cd.sec); CHK_EQU(smp,cd); WyDate tmp; if((r=tmp.reset(smp.time_zone(),smp.year(),smp.month(),smp.mday(), smp.hour(),smp.min(),smp.sec()))!=Ok) { WY_THROW(r); } CHK_EQU(tmp,smp); } for(size_t i=0; i<cdt_size; ++i) { const ChkData& cd=cdt[i]; WyDate smp(WyStr(cd.time_zone),cd.year,cd.month,cd.mday,cd.hour,cd.min,cd.sec); CHK_EQU(smp,cd); WyDate tmp; if((r=tmp.reset(smp.time_zone(),smp.year(),smp.month(),smp.mday(), smp.hour(),smp.min(),smp.sec()))!=Ok) { WY_THROW(r); } CHK_EQU(tmp,smp); } } // swap { const ChkData& cd=cdt[0]; const WyDate Nobj(cd.time_zone,cd.year,cd.month,cd.mday,cd.hour,cd.min,cd.sec); WyDate tmp0(Nobj),tmp1,tmp2; WyDate& rt0(tmp0),&rt1(tmp1),&rt2(tmp2); CHK_NOT_DEFAULT(tmp0); CHK_DEFAULT(tmp1); CHK_DEFAULT(tmp2); CHK_NOT_DEFAULT(Nobj); CHK_EQU(tmp0,rt0); CHK_EQU(tmp1,rt1); CHK_EQU(tmp2,rt2); tmp1.swap(tmp2); CHK_DEFAULT(tmp1); CHK_DEFAULT(tmp2); CHK_EQU(tmp1,rt1); CHK_EQU(tmp2,rt2);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -