📄 chk_rdbuf.cpp
字号:
/* Copyright is licensed under GNU LGPL. by I.J.Wang 2003 Build: make chk_rdbuf*/#include "wystr.h"#include "wyregfile.h"#include "wy_uty.h"#include "wy__rdbuf.h"static void ck_rd(WyByteFlow& bfile){ WyRet r; // chk WY_RdBuf(NULL) { Wy__RdBuf tmp(NULL); if(tmp.rf_ptr()!=NULL) { WY_THROW( WyRet() ); } if(tmp.data().size()!=0) { WY_THROW( WyRet() ); } char ch='5'; if((r=tmp.getch(ch))!=Wym_EFAULT) { WY_THROW( WyRet() ); } if(ch!='5') { WY_THROW( WyRet() ); } WyCSeg dseg="ab"; if((r=tmp.getdata(dseg,10))!=Wym_EFAULT) { WY_THROW( WyRet() ); } if(dseg!="ab") { WY_THROW( WyRet() ); } if(tmp._rdsize()<512) { WY_THROW( WyRet() ); } tmp._rdsize(1000); if(tmp._rdsize()!=1000) { WY_THROW( WyRet() ); } if((r=tmp._feed())!=Wym_EFAULT) { WY_THROW( WyRet() ); } if((r=tmp._feed(100))!=Wym_EFAULT) { WY_THROW( WyRet() ); } if((r=tmp.reset(NULL))!=Ok) { WY_THROW( WyRet() ); } } // chk Wy__RdBuf() error { WyByteFlow bf; try { Wy__RdBuf tmp(&bf); WY_THROW( WyRet() ); } catch(const Wy__RdBuf::Reply& e) { if(e!=Wym_EBADF) { WY_THROW( WyRet(e) ); } // FALLTHROUGH } catch(...) { throw; }; } // chk getch(char&) { if(bfile.ftype()!=S_IFREG) { WY_THROW( WyRet() ); // this chk work for regular file only } WyRegFile tf1(bfile); // for contract WyStr rbuf; size_t n_rd; if((r=tf1.read(rbuf,100L*1024,n_rd))!=Ok) { WY_THROW(r); } tf1.set_pos(0); Wy__RdBuf rdq(&tf1); for(size_t i=0; ; ++i) { char rch; if((r=rdq.getch(rch))!=Ok) { if(r!=Wym_ENOENT) { WY_THROW(r); }; if(rbuf.size()!=i) { WY_THROW(r); } break; // end test } if(rbuf[i]!=rch) { WY_THROW( WyRet() ); } } } // chk unget() { if(bfile.ftype()!=S_IFREG) { WY_THROW( WyRet() ); // this chk work for regular file only } WyRegFile tf1(bfile); // for contract tf1.set_pos(0); Wy__RdBuf rdq(&tf1); char rch1,rch2; if((r=rdq.unget())!=Wym_ENOENT) { WY_THROW( WyRet() ); } if((r=rdq.getch(rch1))!=Ok) { WY_THROW(r); } if((r=rdq.unget())!=Ok) { WY_THROW( WyRet() ); } if((r=rdq.unget())!=Wym_ENOENT) { WY_THROW( WyRet() ); } if((r=rdq.getch(rch2))!=Ok) { WY_THROW(r); } if(rch1!=rch2) { WY_THROW( WyRet() ); } } // chk getdata(WyCSeg&,size_t) { if(bfile.ftype()!=S_IFREG) { WY_THROW( WyRet() ); // this chk work for regular file only } // note: r/w position of bfile is assumed at 0 // WyRegFile tf1(bfile); // for contract. tf1.set_pos(0); WyByteFlow tf2(tf1); Wy__RdBuf rdq(&tf2); WyStr rbuf; WyCSeg rseg; for(;;) { size_t n_rd; rbuf.reset(); if((r=tf1.read(rbuf,5,n_rd))!=Ok) { WY_THROW(r); } if((r=rdq.getdata(rseg,5))!=Ok) { WY_THROW(r); } if(rbuf!=rseg) { WY_THROW( WyRet() ); } if(n_rd==0) { break; } } } // chk getdata(WyCSeg&,size_t,char) { if(bfile.ftype()!=S_IFREG) { WY_THROW( WyRet() ); // this chk work for regular file only } WyRegFile tf1(bfile); // for contract WyStr rbuf; size_t n_rd; if((r=tf1.read(rbuf,100L*1024,n_rd))!=Ok) { WY_THROW(r); } tf1.set_pos(0); Wy__RdBuf rdq(&tf1); size_t fidx1=0,fidx2; bool eof=false; for(size_t i=0; ; ++i) { WyCSeg dseg; if((r=rdq.getdata(dseg,1024,'\n'))!=Ok) { WY_THROW(r); } if(dseg.size()==0) { break; } if(rbuf.size()-fidx1<dseg.size()) { WY_THROW(r); } if(eof==true) { WY_THROW( WyRet() ); } eof=!rbuf.cseg().findc(&fidx2,fidx1,'\n'); ++fidx2; if(dseg!=rbuf.cseg(fidx1,fidx2-fidx1)) { WY_THROW(r); } fidx1=fidx2; } } // chk _feed(size_t&) { if(bfile.ftype()!=S_IFREG) { WY_THROW( WyRet() ); // this chk work for regular file only } WyRegFile tf1(bfile); // for contract tf1.set_pos(0); WyRegFile tf2(tf1); Wy__RdBuf rdq(&tf2); WyStr rbuf; WyCSeg rseg; rdq._rdsize(11); if(rdq._rdsize()!=11) { WY_THROW(r); } for(;;) { size_t n_rd; if((r=tf1.read(rbuf,11,n_rd))!=Ok) { WY_THROW(r); } if((r=rdq._feed())!=Ok) { WY_THROW(r); } if(rbuf!=rdq.data()) { WY_THROW( WyRet() ); } if(n_rd==0) { break; } } }};static void ck_rdq(void){ WyRegFile tfile(__FILE__,O_RDONLY); ck_rd(tfile);};static const WyStr chdr( "+---------------+\n" "| main() caught:|\n" "+---------------+\n");int main(void) throw()try { Wy::cout << "Checking wy__rdbuf.h ...\n"; ck_rdq(); Wy::cout << "Checked Ok\n"; return(0);}catch(const WyRet& e) { Wy::cerr << chdr << Wy::wrd(e) << "\n"; return(-1);}catch(const std::exception& e) { Wy::cerr << chdr << "std::exception\n"; return(-1);}catch(...) { Wy::cerr << chdr << "unknown unwind\n"; return(-1);};
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -