📄 chk_fh.cpp
字号:
/* Copyright is licensed under GNU LGPL. by I.J.Wang 2004 Check functions in wyfilehandle.h Build: make chk_fh*/#include "wyfilehandle.h"#include <unistd.h>#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>#include <iostream>#if WYFILEHANDLE_VERSION!=31#error Test code is for WYFILEHANDLE_VERSION 31#endif//// Assert ff is default//static void assert_default(const WyFileHandle& ff){ if(ff.is_default()==false) { WY_THROW( WyRet() ); } if(ff.fd()!=WY__DEFAULT_FD) { WY_THROW( WyRet() ); }};#define CHK_DEFAULT(p)\ try { assert_default(p); } catch(...) { WY_THROW( WyRet()); }//// Check basic operations on default object//static void t1(void){ WyRet r; WyFileHandle NObj; // non-default object for test as argument CHK_DEFAULT(NObj); { WyFileHandle tmp(NObj); CHK_DEFAULT(tmp); } { WyFileHandle tmp(0); if(tmp.is_default()) { WY_THROW( WyRet() ); } if(tmp.fd()!=0) { WY_THROW( WyRet() ); } } { WyFileStat stt; if((r=NObj.stat(stt))!=Wym_EBADF) { WY_THROW(r); } } { WyFileHandle tmp(-2); if(tmp.fd()!=-2) { WY_THROW( WyRet() ); } } // reset()/reset(WyFileHandle)/reset(int)/= { WyFileHandle tmp; tmp.reset(); CHK_DEFAULT(tmp); tmp.reset(2); if(tmp.fd()!=2) { WY_THROW( WyRet() ); } tmp.reset(3); if(tmp.fd()!=3) { WY_THROW( WyRet() ); } tmp.reset(-5); if(tmp.fd()!=-5) { WY_THROW( WyRet() ); } tmp.reset(INT_MAX); if(tmp.fd()!=INT_MAX) { WY_THROW( WyRet() ); } tmp.reset(INT_MIN); if(tmp.fd()!=INT_MIN) { WY_THROW( WyRet() ); } tmp=WY__DEFAULT_FD; if(tmp.fd()!=WY__DEFAULT_FD) { WY_THROW( WyRet() ); } tmp=INT_MAX; if(tmp.fd()!=INT_MAX) { WY_THROW( WyRet() ); } WyFileHandle tmp2(tmp); if(tmp2!=tmp) { WY_THROW( WyRet() ); } if(tmp2==tmp) { } else { WY_THROW( WyRet() ); } }};static void t_error_filehandle(void){};//// Check Wy::...//static void t2(void){ const char TmpName[]="tmpfile.remove.me"; WyRet r; try { int tfd; Wy::unlink((const char*)TmpName); if((tfd=::creat(TmpName,O_RDONLY|S_IRUSR))==-1) { WY_THROW( WyRet(WyReply(errno)) ); } if((r=Wy::access((const char*)TmpName,R_OK))!=Ok) { WY_THROW(r); } if((r=Wy::access((const char*)TmpName,W_OK))==Ok) { WY_THROW(r); } if((r=Wy::access(WyStr(TmpName),R_OK))!=Ok) { WY_THROW(r); } if((r=Wy::chdir((const char*)"nodir"))!=Wym_ENOENT) { WY_THROW(r); } if((r=Wy::chdir(WyStr("nodir")))!=Wym_ENOENT) { WY_THROW(r); } { WyStr str; if((r=Wy::getcwd(str))!=Ok) { WY_THROW(r); } std::cout << "Current directory =" << str.c_str() << std::endl; } // just check functions exist Wy::chown((const char*)TmpName,0,0); Wy::chown(WyStr(TmpName),0,0); Wy::chmod((const char*)TmpName,S_IRUSR); Wy::chmod(WyStr(TmpName),S_IRUSR); Wy::link(TmpName,TmpName); Wy::link(TmpName,WyStr(TmpName)); Wy::link(WyStr(TmpName),TmpName); Wy::link(WyStr(TmpName),WyStr(TmpName)); if((r=Wy::unlink(WyStr(TmpName)))!=Ok) { WY_THROW(r); } } catch(...) { ::unlink(TmpName); throw; }};static const WyStr chdr( "+---------------+\n" "| main() caught:|\n" "+---------------+\n");int main(void) throw()try { std::cout << "Checking wyfilehandle.h ...\n"; if(std::strcmp(WyFileHandle::class_name,"WyFileHandle")!=0) { WY_THROW( WyRet() ); } t1(); t_error_filehandle(); 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 + -