📄 chk_hstr.cpp
字号:
/* Copyright is licensed under GNU LGPL. by I.J.Wang 2004 Build: chk_hstr*/#include "wy__hstr.h"#include <iostream>#if WY__HSTR_VERSION!=31#error Test code is for WY__HSTR_VERSION 31#endifvoid chk_invariant(const Wy__HStr* str){ if(str->data()==0) { WY_THROW( WyRet() ); } if(str->c_str()!=str->data()) { WY_THROW( WyRet() ); } if(str->data()[ str->size() ]!=0) { WY_THROW( WyRet() ); }};bool chk_default(const Wy__HStr* ptr){ chk_invariant(ptr); if(ptr->size()!=0) { return(false); } if(ptr->c_str()[0]!=0) { return(false); } if(ptr->_capacity()!=Wy__HStr::min_capacity()) { return(false); } return(true);};#define CHK_DEFAULT(expr) if(chk_default(expr)==false) { WY_THROW(WyRet() ); };#define CHK_NOT_DEFAULT(expr) if(chk_not_default(expr)==false) { WY_THROW(WyRet() ); };static void ck_str(void){ const char Ref[]="0123456789ab"; Wy__HStr* tp0= Wy__HStr::alloc(); Wy__HStr* tp1= Wy__HStr::alloc(100); Wy__HStr* tp2= Wy__HStr::alloc(WyCSeg(Ref,3)); Wy__HStr* tp3= Wy__HStr::alloc(WyCSeg(Ref+1,3)); Wy__HStr* tp4= Wy__HStr::alloc(WyCSeg(Ref+2,3),WyCSeg(Ref+5,3)); Wy__HStr* tp5= Wy__HStr::alloc(WyCSeg(Ref+3,3),WyCSeg(Ref+6,3),WyCSeg(Ref+9,3)); Wy__HStr* tmp= Wy__HStr::alloc(); WyRet r; chk_invariant(tp0); chk_invariant(tp1); chk_invariant(tp2); chk_invariant(tp3); chk_invariant(tp4); chk_invariant(tp5); chk_invariant(tmp); try { // chk alloc tp* CHK_DEFAULT(tp0); if(tp1->c_str()!=tp1->data()) { WY_THROW( WyRet() ); } if((tp1->c_str()[0]!=0)||(tp1->size()!=0)) { WY_THROW( WyRet() ); } if(tp1->_capacity()<100) { WY_THROW( WyRet() ); } if(::memcmp(Ref,tp2->c_str(),tp2->size())!=0) { WY_THROW( WyRet() ); } if(::memcmp(Ref+1,tp3->c_str(),tp3->size())!=0) { WY_THROW( WyRet() ); } if(::memcmp(Ref+2,tp4->c_str(),tp4->size())!=0) { WY_THROW( WyRet() ); } if(::memcmp(Ref+3,tp5->c_str(),tp5->size())!=0) { WY_THROW( WyRet() ); } if(tp2->c_str()[tp2->size()]!=0) { WY_THROW( WyRet() ); } if(tp3->c_str()[tp3->size()]!=0) { WY_THROW( WyRet() ); } if(tp4->c_str()[tp4->size()]!=0) { WY_THROW( WyRet() ); } if(tp5->c_str()[tp5->size()]!=0) { WY_THROW( WyRet() ); } // alloc(size_t,char) { Wy__HStr* tt= Wy__HStr::alloc(4,'u'); chk_invariant(tt); if((tt->size()!=4)||(Wy::_strcmp(tt->c_str(),"uuuu")!=0)||(tt->_capacity()<4)) { Wy__HStr::free(tt); WY_THROW( WyRet() ); } Wy__HStr::free(tt); } // alloc(const Wy__HStr&) { Wy__HStr* tt= Wy__HStr::alloc(*tp2); chk_invariant(tt); if(Wy::_strcmp(tt->cseg(),tp2->cseg())!=0) { Wy__HStr::free(tt); WY_THROW( WyRet() ); } Wy__HStr::free(tt); } // alloc(const WCSeg&,char) { Wy__HStr* tt= Wy__HStr::alloc(WyCSeg("abc",3),'z'); chk_invariant(tt); if(Wy::_strcmp(tt->cseg(),"abcz")!=0) { Wy__HStr::free(tt); WY_THROW( WyRet() ); } Wy__HStr::free(tt); } // alloc(char,const WCSeg&) { Wy__HStr* tt= Wy__HStr::alloc('z',WyCSeg("abc",3)); chk_invariant(tt); if(Wy::_strcmp(tt->cseg(),"zabc")!=0) { Wy__HStr::free(tt); WY_THROW( WyRet() ); } Wy__HStr::free(tt); } // alloc(const WCSeg&,size_t,char) { Wy__HStr* tt= Wy__HStr::alloc(WyCSeg("abc",3),2,'z'); chk_invariant(tt); if(Wy::_strcmp(tt->cseg(),"abczz")!=0) { Wy__HStr::free(tt); WY_THROW( WyRet() ); } Wy__HStr::free(tt); } // alloc(const WCSeg&,size_t,char,const WyCSeg&) { Wy__HStr* tt= Wy__HStr::alloc(WyCSeg("aa"),2,'b',WyCSeg("cc")); chk_invariant(tt); if(Wy::_strcmp(tt->cseg(),"aabbcc")!=0) { Wy__HStr::free(tt); WY_THROW( WyRet() ); } Wy__HStr::free(tt); } // cseg if(Wy::_strcmp(tp2->cseg(),WyCSeg(Ref,3))!=0) { WY_THROW( WyRet() ); } if(Wy::_strcmp(tp2->cseg(1),WyCSeg(Ref+1,2))!=0) { WY_THROW( WyRet() ); } if(Wy::_strcmp(tp2->cseg(1,2),WyCSeg(Ref+1,2))!=0) { WY_THROW( WyRet() ); } if(Wy::_strcmp(tp2->cseg(1,3),WyCSeg(Ref+1,2))!=0) { WY_THROW( WyRet() ); } chk_invariant(tp2); // operator[] if((tp3->_at(0)!='1')||(tp3->_at(1)!='2')) { WY_THROW( WyRet() ); } chk_invariant(tp3); // set_string() { chk_invariant(tp0); tp0->set_string(); CHK_DEFAULT(tp0); tmp->set_string(); CHK_DEFAULT(tmp); if((r=tmp->set_string(*tp3))!=Ok) { WY_THROW(r); } chk_invariant(tmp); if(Wy::_strcmp(tmp->cseg(),tp3->cseg())!=0) { WY_THROW( WyRet() ); } if(tmp->c_str()[tmp->size()]!=0) { WY_THROW( WyRet() ); } tmp->set_string(); CHK_DEFAULT(tmp); if((r=tmp->set_string(tp3->cseg()))!=Ok) { WY_THROW(r); } if(Wy::_strcmp(tmp->cseg(),tp3->cseg())!=0) { WY_THROW( WyRet() ); } if(tmp->c_str()[tmp->size()]!=0) { WY_THROW( WyRet() ); } tmp->set_string(); CHK_DEFAULT(tmp); if((r=tmp->set_string(0,'x'))!=Ok) { WY_THROW(r); } if(Wy::_strcmp(tmp->cseg(),"")!=0) { WY_THROW( WyRet() ); } if((r=tmp->set_string(2,'x'))!=Ok) { WY_THROW(r); } if(Wy::_strcmp(tmp->cseg(),"xx")!=0) { WY_THROW( WyRet() ); } if(tmp->c_str()[tmp->size()]!=0) { WY_THROW( WyRet() ); } } // append { tmp->set_string(); CHK_DEFAULT(tmp); if((r=tmp->append(*tp2))!=Ok) { WY_THROW(r); } chk_invariant(tmp); if(Wy::_strcmp(tmp->cseg(),"012")!=0) { WY_THROW( WyRet() ); } if((r=tmp->append(tp2->cseg(1)))!=Ok) { WY_THROW(r); } chk_invariant(tmp); if(Wy::_strcmp(tmp->cseg(),"01212")!=0) { WY_THROW( WyRet() ); } if((r=tmp->append(0,'a'))!=Ok) { WY_THROW(r); } chk_invariant(tmp); if(Wy::_strcmp(tmp->cseg(),"01212")!=0) { WY_THROW( WyRet() ); } if((r=tmp->append(1,'a'))!=Ok) { WY_THROW(r); } chk_invariant(tmp); if(Wy::_strcmp(tmp->cseg(),"01212a")!=0) { WY_THROW( WyRet() ); } if((r=tmp->append('b'))!=Ok) { WY_THROW(r); } chk_invariant(tmp); if(Wy::_strcmp(tmp->cseg(),"01212ab")!=0) { WY_THROW( WyRet() ); } } // find { size_t fidx; tmp->set_string("HELOWOELD"); chk_invariant(tmp); if(tmp->find(0,'X')==true) { WY_THROW( WyRet() ); } chk_invariant(tmp); if(tmp->find(&fidx,'L')==false) { WY_THROW( WyRet() ); } chk_invariant(tmp); if(fidx!=2) { WY_THROW( WyRet() ); } if(tmp->rfind(0,'X')==true) { WY_THROW( WyRet() ); } chk_invariant(tmp); if(tmp->rfind(&fidx,'L')==false) { WY_THROW( WyRet() ); } if(fidx!=7) { WY_THROW( WyRet() ); } if(tmp->find(&fidx,1,'L')==false) { WY_THROW( WyRet() ); } if(fidx!=2) { WY_THROW( WyRet() ); } if(tmp->find(&fidx,3,'L')==false) { WY_THROW( WyRet() ); } if(fidx!=7) { WY_THROW( WyRet() ); } if(tmp->find(&fidx,3,'x')==true) { WY_THROW( WyRet() ); } if(fidx!=7) { WY_THROW( WyRet() ); } chk_invariant(tmp); if(tmp->rfind(&fidx,3,'L')==false) { WY_THROW( WyRet() ); } chk_invariant(tmp); if(fidx!=2) { WY_THROW( WyRet() ); } if(tmp->rfind(&fidx,8,'L')==false) { WY_THROW( WyRet() ); } chk_invariant(tmp); if(fidx!=7) { WY_THROW( WyRet() ); } if(tmp->rfind(&fidx,8,'x')==true) { WY_THROW( WyRet() ); } chk_invariant(tmp); if(fidx!=7) { WY_THROW( WyRet() ); } if(tmp->find(&fidx,0,WyCSeg("EL"))==false) { WY_THROW( WyRet() ); } chk_invariant(tmp); if(fidx!=1) { WY_THROW( WyRet() ); } /*fidx=100; if(tmp->find(&fidx,WyCSeg("EL"))==false) { WY_THROW( WyRet() ); } chk_invariant(tmp); if(fidx!=1) { WY_THROW( WyRet() ); }*/ if(tmp->find(&fidx,2,WyCSeg("EL"))==false) { WY_THROW( WyRet() ); } chk_invariant(tmp); if(fidx!=6) { WY_THROW( WyRet() ); } fidx=100; if(tmp->rfind(&fidx,10,WyCSeg("EL"))==false) { WY_THROW( WyRet() ); } chk_invariant(tmp); if(fidx!=6) { WY_THROW( WyRet() ); } if(tmp->rfind(&fidx,tmp->size()-1,WyCSeg("EL"))==false) { WY_THROW( WyRet() ); } chk_invariant(tmp); if(fidx!=6) { WY_THROW( WyRet() ); } if(tmp->rfind(&fidx,5,WyCSeg("EL"))==false) { WY_THROW( WyRet() ); } chk_invariant(tmp); if(fidx!=1) { WY_THROW( WyRet() ); } fidx=100; if(tmp->rfind(&fidx,3,WyCSeg("EL"))==false) { WY_THROW( WyRet() ); } chk_invariant(tmp); if(fidx!=1) { WY_THROW( WyRet() ); } fidx=100; if(tmp->rfind(&fidx,1,WyCSeg("EL"))==false) { WY_THROW( WyRet() ); } chk_invariant(tmp); if(fidx!=1) { WY_THROW( WyRet() ); } if(tmp->rfind(&fidx,0,WyCSeg("EL"))==true) { WY_THROW( WyRet() ); } chk_invariant(tmp); if(fidx!=1) { WY_THROW( WyRet() ); } if(tmp->rfind(&fidx,WyCSeg("EL"))==false) { WY_THROW( WyRet() ); } chk_invariant(tmp); if(fidx!=6) { WY_THROW( WyRet() ); } } // _find_not { size_t fidx=100; tmp->set_string("xxxOkbbb"); chk_invariant(tmp); if(tmp->_find_not(&fidx,0,'x')==false) { WY_THROW( WyRet() ); } chk_invariant(tmp); if(fidx!=3) { WY_THROW( WyRet() ); } if(tmp->_find_not(&fidx,5,'b')==true) { WY_THROW( WyRet() ); } if(fidx!=3) { WY_THROW( WyRet() ); } if(tmp->_rfind_not(&fidx,tmp->size(),'b')==false) { WY_THROW( WyRet() ); } if(fidx!=4) { WY_THROW( WyRet() ); } if(tmp->_rfind_not(&fidx,2,'x')==true) { WY_THROW( WyRet() ); } if(fidx!=4) { WY_THROW( WyRet() ); } chk_invariant(tmp); } // insert { chk_invariant(tmp); tmp->set_string(); chk_invariant(tmp); if((r=tmp->insert(0,WyCSeg("fg")))!=Ok) { WY_THROW(r); } chk_invariant(tmp); if(Wy::_strcmp(tmp->cseg(),"fg")!=0) { WY_THROW( WyRet() ); } if((r=tmp->insert(1,WyCSeg("xz")))!=Ok) { WY_THROW(r); } chk_invariant(tmp); if(Wy::_strcmp(tmp->cseg(),"fxzg")!=0) { WY_THROW( WyRet() ); } if((r=tmp->insert(tmp->size(),WyCSeg("5")))!=Ok) { WY_THROW(r); } chk_invariant(tmp); if(Wy::_strcmp(tmp->cseg(),"fxzg5")!=0) { WY_THROW( WyRet() ); } tmp->set_string(); if((r=tmp->insert(0,2,'a'))!=Ok) { WY_THROW(r); } chk_invariant(tmp); if(Wy::_strcmp(tmp->cseg(),"aa")!=0) { WY_THROW( WyRet() ); } if((r=tmp->insert(1,3,'b'))!=Ok) { WY_THROW(r); } chk_invariant(tmp); if(Wy::_strcmp(tmp->cseg(),"abbba")!=0) { WY_THROW( WyRet() ); } if((r=tmp->insert(tmp->size(),1,'c'))!=Ok) { WY_THROW(r); } chk_invariant(tmp); if(Wy::_strcmp(tmp->cseg(),"abbbac")!=0) { WY_THROW( WyRet() ); } if((r=tmp->insert(1,*tp3))!=Ok) { WY_THROW(r); } if(Wy::_strcmp(tmp->cseg(),"a123bbbac")!=0) { WY_THROW( WyRet() ); } chk_invariant(tmp); } // erase { tmp->set_string(); chk_invariant(tmp); if((r=tmp->erase(0))!=Ok) { WY_THROW(r); } chk_invariant(tmp); if(Wy::_strcmp(tmp->cseg(),"")!=0) { WY_THROW( WyRet() ); } tmp->set_string("987654321"); if((r=tmp->erase(4))!=Ok) { WY_THROW(r); } if(Wy::_strcmp(tmp->cseg(),"9876")!=0) { WY_THROW( WyRet() ); } if((r=tmp->erase(2,1))!=Ok) { WY_THROW(r); } chk_invariant(tmp); if(Wy::_strcmp(tmp->cseg(),"986")!=0) { WY_THROW( WyRet() ); } if((r=tmp->erase(2,10))!=Ok) { WY_THROW(r); } chk_invariant(tmp); if(Wy::_strcmp(tmp->cseg(),"98")!=0) { WY_THROW( WyRet() ); } chk_invariant(tmp);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -