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

📄 ck_date.cpp

📁 一个不错
💻 CPP
📖 第 1 页 / 共 2 页
字号:
/* 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 + -