📄 chk_reply.cpp
字号:
/* Copyright is licensed under GNU LGPL. by I.J.Wang 2003 Build: make chk_reply*/#include "wyret.h"#include <stdexcept>#include <iostream>#if WYR_REPLY_VERSION!=31#error Check code is for WYR_REPLY_VERSION 31#endifstatic void t_reply(void){};static void chk_default(const WyReply& em){ if(em.is_default()==false) { throw WyRet(); } { WyReply tmp; if(em.operator->()!=tmp.operator->()) { throw WyRet(); } } if(em->c_repcode()!=-1) { throw WyRet(); } static const char* DeiMsg="General error"; static const size_t DeiMsgLen=strlen(DeiMsg); if(strcmp(em->c_repstr(),DeiMsg)!=0) { throw WyRet(); } char buf[16]; if(em->get_reply(buf,sizeof(buf))!=DeiMsgLen) { throw WyRet(); } if(memcmp(buf,DeiMsg,DeiMsgLen)!=0) { throw WyRet(); }};#define CHK_DEFAULT(em) try { chk_default(em); } catch(const WyRet& e) {\ WY_THROW( WyRet(e) ); };// Check the public interface of WyReply//static void t1(void){ WyReply e1; // default constructor WyReply e2(ENOENT); // construct by errno WyReply e3(e2); // constructor by copy WyReply e4(0); // construct by errno (Ok object) char buf[128]; if(WyReply().operator->()!=e1.operator->()) { WY_THROW( WyRet() ); } // Basic construct and compare // if(e1.is_default()==false) { WY_THROW(WyRet()); } if(e2.is_default()==true) { WY_THROW( WyRet() ); } if(e3.is_default()==true) { WY_THROW( WyRet() ); } if(e1==e2) { WY_THROW( ::WyRet() ); } if(e1!=e2) { } else { WY_THROW( WyRet() ); } if(e2!=e3) { WY_THROW( WyRet() ); } if(e2==e3) { } else { WY_THROW( WyRet() ); } CHK_DEFAULT(e1); // chk Ok==WyReply(0) // if(WyReply(0)!=Ok) { WY_THROW( WyRet() ); } if(e1==Ok) { WY_THROW( WyRet() ); } if(e1!=Ok) { } else { WY_THROW( WyRet() ); } if(e2==Ok) { WY_THROW( WyRet() ); } if(e2!=Ok) { } else { WY_THROW( WyRet() ); } if(e4==Ok) { } else { WY_THROW( WyRet() ); } if(e4!=Ok) { WY_THROW( WyRet() ); } if(e4.is_default()) { WY_THROW( WyRet() ); } // chk WyReply(en) { WyReply tmp(Wy::_max_errno+1); if(tmp.is_default()==false) { WY_THROW( WyRet() ); } CHK_DEFAULT(tmp); WyReply tmp2(ENOENT); if(tmp2->c_repcode()!=ENOENT) { WY_THROW( WyRet() ); }; } // chk WyReply(Wy_RepInfo&) (manual example) { class AppErrInfo : public Wy_RepInfo { public: AppErrInfo(int ec, const char* estr) throw() : Wy_RepInfo(ec, estr) {}; size_t get_reply(char* buf, size_t blen) const throw() { return Wy_RepInfo::get_reply(buf,blen); }; void set_reply(const char*, size_t) throw() {}; }; static AppErrInfo e1(45,"Bad Input"); const WyReply BadInput(e1); if(BadInput->c_repcode()!=45) { WY_THROW( WyRet() ); } if(BadInput->get_reply(buf,sizeof(buf))!=9) { WY_THROW( WyRet() ); } if(::memcmp(buf,e1.c_repstr(),9)!=0) { WY_THROW( WyRet() ); } } // chk reset // e4.reset(); CHK_DEFAULT(e4); if(e2.is_default()) { WY_THROW( WyRet() ); } e4.reset(e2); if(e4!=e2) { WY_THROW( WyRet() ); } e4.reset(Wym_EBADF); if(e4!=Wym_EBADF) { WY_THROW( WyRet() ); } if(e4.reset(4)!=4) { WY_THROW( WyRet() ); } if(e4->c_repcode()!=4) { WY_THROW( WyRet() ); } if(e4.reset(Wy::_max_errno+1)!=-1) { WY_THROW( WyRet() ); } CHK_DEFAULT(e4); e4.reset(Wym_EBADF); if(e4.reset(-2)!=-1) { WY_THROW( WyRet() ); } CHK_DEFAULT(e4); // chk operator= // if(e4==e2) { WY_THROW( WyRet() ); } e4=e2; if(e4!=e2) { WY_THROW( WyRet() ); } e4=Wym_EBADF; if(e4!=Wym_EBADF) { WY_THROW( WyRet() ); } if(e4.is_default()) { WY_THROW( WyRet() ); } e4=200; CHK_DEFAULT(e4); // chk some c_repcode // if(Wym_EPERM->c_repcode()!=EPERM) { WY_THROW( WyRet() ); } if(Wym_ENOENT->c_repcode()!=ENOENT) { WY_THROW( WyRet() ); } if(Wym_ESRCH->c_repcode()!=ESRCH) { WY_THROW( WyRet() ); } if(Wym_EINTR->c_repcode()!=EINTR) { WY_THROW( WyRet() ); } if(Wym_ENETRESET->c_repcode()!=ENETRESET) { WY_THROW( WyRet() ); } if(Wym_EMEDIUMTYPE->c_repcode()!=EMEDIUMTYPE) { WY_THROW( WyRet() ); } if(Wym_E127->c_repcode()!=127) { WY_THROW( WyRet() ); } // chk set_reply(..)/get_reply(..) // { char buf[64]; if(Ok->get_reply(buf,sizeof(buf))!=7) { WY_THROW( WyRet() ); } if(memcmp(buf,"Success",7)!=0) { WY_THROW( WyRet() ); } const char Ustr[]="Test Msg for Ok"; Ok->set_reply(Ustr,sizeof(Ustr)); if(Ok->get_reply(buf,sizeof(buf))!=sizeof(Ustr)) { WY_THROW( WyRet() ); } if(memcmp(buf,Ustr,sizeof(Ustr))!=0) { WY_THROW( WyRet() ); } Ok->set_reply("Success",8); // including trailing zero if(Ok->c_repcode()!=0) { WY_THROW( WyRet() ); } } // chk move ctor { WyReply raw_buf[2]; // ok WyReply is discardable ::memset(raw_buf,0,sizeof(raw_buf)); WyReply* const p1( reinterpret_cast<WyReply*>(&raw_buf[0]) ); WyReply* const p2( reinterpret_cast<WyReply*>(&raw_buf[1]) ); new(p1) WyReply(Wym_ENOENT); if(*p1!=Wym_ENOENT) { p1->~WyReply(); WY_THROW( WyRet() ); } // move *p1 to p2 new(p2) WyReply(*p1,Wy::ByMove); if(*p2!=Wym_ENOENT) { p2->~WyReply(); WY_THROW( WyRet() ); } p2->~WyReply(); }};// Check the mapped errno 0-127//static void t2(void){ if((Ok!=WyReply(0))||(Ok->c_repcode()!=0)) { WY_THROW( WyRet() ); } if((Wym_EPERM!=WyReply(EPERM))||(Wym_EPERM->c_repcode()!=EPERM)) { WY_THROW( WyRet() ); } if((Wym_ENOENT!=WyReply(ENOENT))||(Wym_ENOENT->c_repcode()!=ENOENT)) { WY_THROW( WyRet() ); } if((Wym_ESRCH!=WyReply(ESRCH))||(Wym_ESRCH->c_repcode()!=ESRCH)) { WY_THROW( WyRet() ); } if((Wym_EINTR!=WyReply(EINTR))||(Wym_EINTR->c_repcode()!=EINTR)) { WY_THROW( WyRet() ); } if((Wym_EIO!=WyReply(EIO))||(Wym_EIO->c_repcode()!=EIO)) { WY_THROW( WyRet() ); } if((Wym_ENXIO!=WyReply(ENXIO))||(Wym_ENXIO->c_repcode()!=ENXIO)) { WY_THROW( WyRet() ); } if((Wym_E2BIG!=WyReply(E2BIG))||(Wym_E2BIG->c_repcode()!=E2BIG)) { WY_THROW( WyRet() ); } if((Wym_ENOEXEC!=WyReply(ENOEXEC))||(Wym_ENOEXEC->c_repcode()!=ENOEXEC)) { WY_THROW( WyRet() ); } if((Wym_EBADF!=WyReply(EBADF))||(Wym_EBADF->c_repcode()!=EBADF)) { WY_THROW( WyRet() ); } if((Wym_ECHILD!=WyReply(ECHILD))||(Wym_ECHILD->c_repcode()!=ECHILD)) { WY_THROW( WyRet() ); } if((Wym_EAGAIN!=WyReply(EAGAIN))||(Wym_EAGAIN->c_repcode()!=EAGAIN)) { WY_THROW( WyRet() ); } if((Wym_ENOMEM!=WyReply(ENOMEM))||(Wym_ENOMEM->c_repcode()!=ENOMEM)) { WY_THROW( WyRet() ); } if((Wym_EACCES!=WyReply(EACCES))||(Wym_EACCES->c_repcode()!=EACCES)) { WY_THROW( WyRet() ); } if((Wym_EFAULT!=WyReply(EFAULT))||(Wym_EFAULT->c_repcode()!=EFAULT)) { WY_THROW( WyRet() ); } if((Wym_ENOTBLK!=WyReply(ENOTBLK))||(Wym_ENOTBLK->c_repcode()!=ENOTBLK)) { WY_THROW( WyRet() ); } if((Wym_EBUSY!=WyReply(EBUSY))||(Wym_EBUSY->c_repcode()!=EBUSY)) { WY_THROW( WyRet() ); } if((Wym_EEXIST!=WyReply(EEXIST))||(Wym_EEXIST->c_repcode()!=EEXIST)) { WY_THROW( WyRet() ); } if((Wym_EXDEV!=WyReply(EXDEV))||(Wym_EXDEV->c_repcode()!=EXDEV)) { WY_THROW( WyRet() ); } if((Wym_ENODEV!=WyReply(ENODEV))||(Wym_ENODEV->c_repcode()!=ENODEV)) { WY_THROW( WyRet() ); } if((Wym_ENOTDIR!=WyReply(ENOTDIR))||(Wym_ENOTDIR->c_repcode()!=ENOTDIR)) { WY_THROW( WyRet() ); } if((Wym_EISDIR!=WyReply(EISDIR))||(Wym_EISDIR->c_repcode()!=EISDIR)) { WY_THROW( WyRet() ); } if((Wym_EINVAL!=WyReply(EINVAL))||(Wym_EINVAL->c_repcode()!=EINVAL)) { WY_THROW( WyRet() ); } if((Wym_ENFILE!=WyReply(ENFILE))||(Wym_ENFILE->c_repcode()!=ENFILE)) { WY_THROW( WyRet() ); } if((Wym_EMFILE!=WyReply(EMFILE))||(Wym_EMFILE->c_repcode()!=EMFILE)) { WY_THROW( WyRet() ); } if((Wym_ENOTTY!=WyReply(ENOTTY))||(Wym_ENOTTY->c_repcode()!=ENOTTY)) { WY_THROW( WyRet() ); } if((Wym_ETXTBSY!=WyReply(ETXTBSY))||(Wym_ETXTBSY->c_repcode()!=ETXTBSY)) { WY_THROW( WyRet() ); } if((Wym_EFBIG!=WyReply(EFBIG))||(Wym_EFBIG->c_repcode()!=EFBIG)) { WY_THROW( WyRet() ); } if((Wym_ENOSPC!=WyReply(ENOSPC))||(Wym_ENOSPC->c_repcode()!=ENOSPC)) { WY_THROW( WyRet() ); } if((Wym_ESPIPE!=WyReply(ESPIPE))||(Wym_ESPIPE->c_repcode()!=ESPIPE)) { WY_THROW( WyRet() ); } if((Wym_EROFS!=WyReply(EROFS))||(Wym_EROFS->c_repcode()!=EROFS)) { WY_THROW( WyRet() ); } if((Wym_EMLINK!=WyReply(EMLINK))||(Wym_EMLINK->c_repcode()!=EMLINK)) { WY_THROW( WyRet() ); } if((Wym_EPIPE!=WyReply(EPIPE))||(Wym_EPIPE->c_repcode()!=EPIPE)) { WY_THROW( WyRet() ); } if((Wym_EDOM!=WyReply(EDOM))||(Wym_EDOM->c_repcode()!=EDOM)) { WY_THROW( WyRet() ); } if((Wym_ERANGE!=WyReply(ERANGE))||(Wym_ERANGE->c_repcode()!=ERANGE)) { WY_THROW( WyRet() ); } if((Wym_EDEADLK!=WyReply(EDEADLK))||(Wym_EDEADLK->c_repcode()!=EDEADLK)) { WY_THROW( WyRet() ); } if((Wym_ENAMETOOLONG!=WyReply(ENAMETOOLONG))||(Wym_ENAMETOOLONG->c_repcode()!=ENAMETOOLONG)) { WY_THROW( WyRet() ); } if((Wym_ENOLCK!=WyReply(ENOLCK))||(Wym_ENOLCK->c_repcode()!=ENOLCK)) { WY_THROW( WyRet() ); } if((Wym_ENOSYS!=WyReply(ENOSYS))||(Wym_ENOSYS->c_repcode()!=ENOSYS)) {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -