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

📄 chk_rdbuf.cpp

📁 一个不错
💻 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 + -