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

📄 chk_dirent.cpp

📁 一个不错
💻 CPP
字号:
/* Copyright is licensed under GNU LGPL.                 by I.J.Wang 2003   Basic test of WyDirEnt   Build: make chk_dirent*/#include "wydirent.h"#include "wystr.h"#include <cstdlib>#include <unistd.h>#include <sys/types.h>#include <iostream>#if WYDIRENT_VERSION!=31#error Test code is for WYDIRENT_VERSION 31#endifstatic bool chk_equ(const WyDirEnt& d1,const WyDirEnt& d2){/* if(d1.wy_dent_ptr()==0) {   WY_THROW( WyRet() ); } if(d2.wy_dent_ptr()==0) {   WY_THROW( WyRet() ); }*/ if(d1.is_default()!=d2.is_default()) {   return(false); } if(d1.dt_ino()!=d2.dt_ino()) {   return(false); } if(d1.dt_off()!=d2.dt_off()) {   return(false); } if(d1.dt_reclen()!=d2.dt_reclen()) {   return(false); } if(std::strcmp(d1.dt_name(),d2.dt_name())!=0) {   return(false); } if(d1==d2) { } else {   WY_THROW( WyRet() ); } if(d1!=d2) {   WY_THROW( WyRet() ); } return(true);};//// Check for default object//static bool chk_default(const WyDirEnt& dobj){ static const WyDirEnt DefaultObj; if(chk_equ(dobj,DefaultObj)==false) {   return(false); } if(dobj.dt_ino()!=0) {   WY_THROW( WyRet() ); } if(dobj.dt_off()!=0) {   WY_THROW( WyRet() ); } if(dobj.dt_reclen()!=0) {   WY_THROW( WyRet() ); } if(dobj.dt_name()[0]!=0) {   WY_THROW( WyRet() ); } return(true);};#define CHK_EQU(expr1,expr2) if(chk_equ(expr1,expr2)==false) { WY_THROW( WyRet() ); };#define CHK_NOT_EQU(expr1,expr2) if(chk_equ(expr1,expr2)==true) { WY_THROW( WyRet() ); };#define CHK_DEFAULT(expr) if(chk_default(expr)==false) { WY_THROW( WyRet() ); };#define CHK_NOT_DEFAULT(expr) if(chk_default(expr)==true) { WY_THROW( WyRet() ); };static void t1(void){ // Check default object // {   WyDirEnt tmp;   CHK_DEFAULT(tmp);   WyDirEnt tmp2(tmp);   CHK_DEFAULT(tmp);   tmp2.reset(tmp);   CHK_DEFAULT(tmp);   tmp2.reset();   CHK_DEFAULT(tmp); } // Check on non-default tobj // WyDirEnt NObj; {   CHK_DEFAULT(NObj);   // make NObj d_name='n'+0;   NObj.wy_dent_ptr()->d_name[0]='n';   NObj.wy_dent_ptr()->d_name[1]=0;   NObj.wy_dent_ptr()->d_reclen=1;   CHK_NOT_DEFAULT(NObj); } // Chk copy constructor {   WyDirEnt tmp(NObj);   CHK_NOT_DEFAULT(NObj);   CHK_EQU(tmp,NObj);     tmp.reset();   CHK_DEFAULT(tmp); } // Chk WyDirEnt(const struct& dt) {  WyDirEnt tmp(*NObj.wy_dent_ptr());  CHK_EQU(tmp,NObj);  tmp.reset();  WyDirEnt tmp2(*tmp.wy_dent_ptr());   CHK_DEFAULT(tmp2); } // swap {  WyDirEnt 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); } // reset {   WyDirEnt tmp;   CHK_DEFAULT(tmp);   tmp.reset(NObj);   CHK_EQU(tmp,NObj);   tmp.reset(NObj); // twice reset of non-default object   CHK_EQU(tmp,NObj);   tmp.reset();   CHK_DEFAULT(tmp); } // operator= {   WyDirEnt tmp,tmp2;   CHK_DEFAULT(tmp);   tmp=NObj;   CHK_EQU(tmp,NObj);   tmp=tmp2;   CHK_DEFAULT(tmp); } // operator== {   WyDirEnt tmp1,tmp2;   CHK_DEFAULT(tmp1);   CHK_DEFAULT(tmp2);   if(tmp1!=tmp2) {     WY_THROW( WyRet() );   }   if(tmp1==NObj) {     WY_THROW( WyRet() );   } } // chk move ctor {  char buf[2*sizeof(WyDirEnt)];  ::memset(buf,0,sizeof(buf));  WyDirEnt*p=reinterpret_cast<WyDirEnt*>(buf);  new(p) WyDirEnt();  new(p+1) WyDirEnt(*p,Wy::ByMove);  if((p+1)->is_default()==false) {    (p+1)->~WyDirEnt();    WY_THROW( WyRet() );  }  (p+1)->~WyDirEnt(); }};#include "wy_array.h"#include "ck_array.h"static void t_array(void){/* // chk struct struct dirent // (simple chk) {   typedef struct dirent ElemType;   Wy_Array<ElemType> tmp;   ElemType ele;   ele.d_name[0]=45;   ele.d_name[1]=123;   tmp.push_back(ele);   if(tmp.size()!=1) {     WY_THROW( WyRet() );   }   if(tmp[0].d_name[0]!=ele.d_name[0]) {     WY_THROW( WyRet() );   }   if(tmp[0].d_name[1]!=ele.d_name[1]) {     WY_THROW( WyRet() );   }   tmp.push_back(ElemType());   if(tmp.size()!=2) {     WY_THROW( WyRet() );   }   if(tmp[1].d_name[0]!=0) {     WY_THROW( WyRet() );   }   if(tmp[1].d_name[1]!=0) {     WY_THROW( WyRet() );   } }*/};static const WyStr chdr(                  "+---------------+\n"                  "| main() caught:|\n"                  "+---------------+\n");int main(void) throw()try { std::cout << "Checking wydirent.h ...\n"; if(WyStr(WyDirEnt::class_name)!="WyDirEnt") {   WY_THROW( WyRet() ); } t1(); t_array(); std::cout << "Checked Ok\n"; return(0);}catch(const WyRet& e) { std::cerr << chdr.c_str() << Wy::wrd(e).c_str() << std::endl; return(-1);}catch(const std::exception& e) { std::cerr << chdr.c_str() << "std::exception" << std::endl; return(-1);}catch(...) { std::cerr << chdr.c_str() << "unknown unwind" << std::endl; return(-1);};

⌨️ 快捷键说明

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