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

📄 chk_fdset.cpp

📁 一个不错
💻 CPP
字号:
/* Copyright is licensed under GNU LGPL.                 by I.J.Wang 2003   Basic test of Wy_FdSet   Build: make chk_fdset*/#include "wyselect.h"#include "wybyteflow.h"#include <iostream>#if WYSELECT_VERSION!=31#error Test code is for WYSELECT_VERSION 31#endifstatic const int MaxFdOfFdSet=FD_SETSIZE;  static bool chk_equ(const Wy_FdSet& d1,const Wy_FdSet& d2){ if(d1.wy_maxfd()!=d2.wy_maxfd()) {   return(false); } for(int i=0; i<MaxFdOfFdSet; ++i) {   WyFileHandle tmp(i);   if(d1.is_set(tmp)!=d2.is_set(tmp)) {     return(false);   } }; return(true);};//// Check for default object//static bool chk_default(const Wy_FdSet& dobj){ if(dobj.wy_maxfd()!=-1) {   return(false); } for(int i=0; i<MaxFdOfFdSet; ++i) {   WyFileHandle tmp(i);   if(dobj.is_set(tmp)) {     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_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 // {   Wy_FdSet tmp,tmp2(tmp);   CHK_DEFAULT(tmp);   CHK_DEFAULT(tmp2); } // Check set/Wy_FdSet(const Wy_FdSet&) // {   WyByteFlow &tdev0(Wy::cin), &tdev1(Wy::cout);   Wy_FdSet tmp;   CHK_DEFAULT(tmp);   tmp.set(tdev0);   CHK_NOT_DEFAULT(tmp);   if(tmp.wy_maxfd()!=0) {     WY_THROW( WyRet() );   }   if(tmp.is_set(tdev0)==false) {     WY_THROW( WyRet() );   }   if(tmp.is_set(tdev1)==true) {     WY_THROW( WyRet() );   }   Wy_FdSet tmp2(tmp);   CHK_NOT_DEFAULT(tmp2);   if(tmp2.is_set(tdev0)==false) {     WY_THROW( WyRet() );   }   if(tmp2.is_set(tdev1)==true) {     WY_THROW( WyRet() );   }   // chk clr(tdev1) no effect   tmp.clr(tdev1);   if(tmp.is_set(tdev1)==true) {     WY_THROW( WyRet() );   }   CHK_NOT_DEFAULT(tmp2);   tmp.set(tdev1);   CHK_NOT_DEFAULT(tmp);   if(tmp.wy_maxfd()!=1) {     WY_THROW( WyRet() );   }   tmp.clr(tdev1);   CHK_NOT_DEFAULT(tmp);   if(tmp.wy_maxfd()!=0) {     WY_THROW( WyRet() );   }   tmp.clr(tdev0);   CHK_DEFAULT(tmp);   if(tmp.wy_maxfd()!=-1) {     WY_THROW( WyRet() );   }   tmp.clr(tdev0);   CHK_DEFAULT(tmp); } // chk = {   WyByteFlow &tdev0(Wy::cin), &tdev1(Wy::cout);   Wy_FdSet tmp;   CHK_DEFAULT(tmp);   tmp.set(tdev0);   CHK_NOT_DEFAULT(tmp);   if(tmp.is_set(tdev0)==false) {     WY_THROW( WyRet() );   }   if(tmp.is_set(tdev1)==true) {     WY_THROW( WyRet() );   }   Wy_FdSet tmp2;   tmp2=tmp;   CHK_EQU(tmp,tmp2); }/* // chk ==/!= {   Wy_FdSet tmp1,tmp2;   CHK_DEFAULT(tmp1);   CHK_DEFAULT(tmp2);   if(tmp1==tmp2) {   } else {     WY_THROW( WyRet() );   }   if(tmp1!=tmp2) {     WY_THROW( WyRet() );   }   tmp1.set(1);   if(tmp1!=tmp2) {   } else {     WY_THROW( WyRet() );   }   if(tmp1==tmp2) {     WY_THROW( WyRet() );   } }*/};static void t2(void){ // {   Wy_FdSet tmp;   CHK_DEFAULT(tmp);   tmp.set( WyFileHandle(20) );   if(tmp.is_set( WyFileHandle(20) )==false) {     WY_THROW( WyRet() );   }   tmp.clr( WyFileHandle(20) );   if(tmp.is_set( WyFileHandle(20) )==true) {     WY_THROW( WyRet() );   }   CHK_DEFAULT(tmp); } // chk move ctor {  char raw_buf[2*sizeof(Wy_FdSet)];  ::memset(raw_buf,0,sizeof(raw_buf));  Wy_FdSet* const p1( reinterpret_cast<Wy_FdSet*>(raw_buf) );  Wy_FdSet* const p2(p1+1);  new(p1) Wy_FdSet();  p1->set( WyFileHandle(100) );  // move *p1 to p2  try {    new(p2) Wy_FdSet(*p1,Wy::ByMove);  }  catch(...) {    p1->~Wy_FdSet();    throw;  };  if(p2->is_set( WyFileHandle(100) )==false) {    p2->~Wy_FdSet();    WY_THROW( WyRet() );  }  p2->~Wy_FdSet(); }};static const WyStr chdr(                  "+---------------+\n"                  "| main() caught:|\n"                  "+---------------+\n");int main(void) throw()try { std::cout << "Checking Wy_FdSet ...\n"; if(WyStr(Wy_FdSet::class_name)!="Wy_FdSet") {   WY_THROW( WyRet() ); } t1(); t2(); 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 + -