📄 chk_cseg.cpp
字号:
/* Copyright is licensed under GNU LGPL. by I.J.Wang 2003 Build: make chk_cseg*/#include "wyret.h"#include "wycseg.h"#include "wystr.h"#include <iostream>#if WYCSEG_VERSION!=31#error Test code is for WYCSEG_VERSION 31#endifstatic void verify_equ(const WyCSeg& s1,const WyCSeg& s2){ if(s1.begin()==NULL) { WY_THROW( WyRet() ); } if(s1.end()==NULL) { WY_THROW( WyRet() ); } if(s1.size()!=s2.size()) { WY_THROW( WyRet() ); } if(s1!=s2) { WY_THROW( WyRet() ); } if(s1==s2) { } else { WY_THROW( WyRet() ); } if(s1.size()!=0) { if(std::memcmp(s1.begin(),s2.begin(),s1.size())!=0) { WY_THROW( WyRet() ); } }};#define CHK_EQU(s1,s2) try { verify_equ(s1,s2); } catch(...) { WY_THROW( WyRet()); };static void ck_cseg(void){ WyRet r; { WyCSeg s0; if(s0.is_default()==false) { WY_THROW( WyRet() ); } if(s0.size()!=0) { WY_THROW( WyRet() ); } if(s0.begin()==NULL) { WY_THROW( WyRet() ); } if(s0.end()==NULL) { WY_THROW( WyRet() ); } if(*s0.begin()!=0) { WY_THROW( WyRet() ); // feature test } const char cstr1[]="123"; WyCSeg s1(cstr1),s2(s1),s3="xyz"; CHK_EQU(s1,s2); if(s1.size()!=3) { WY_THROW( WyRet() ); } if((s1[0]!='1')||(s1[1]!='2')||(s1[2]!='3')) { WY_THROW( WyRet() ); } if((s3[0]!='x')||(s3[1]!='y')||(s3[2]!='z')) { WY_THROW( WyRet() ); } WyCSeg s4="",s5(s3); CHK_EQU(s0,s4); CHK_EQU(s3,s5); // chk operator==(const WyCSeg&) if(s0==s4) { } else { WY_THROW( WyRet() ); } if(s0!=s4) { WY_THROW( WyRet() ); } else { } if(s0=="") { } else { WY_THROW( WyRet() ); } if(s0!="") { WY_THROW( WyRet() ); } else { } if(""==s0) { } else { WY_THROW( WyRet() ); } if(""!=s0) { WY_THROW( WyRet() ); } else { } if(s1==s3) { WY_THROW( WyRet() ); } if(s1!=s3) { } else { WY_THROW( WyRet() ); } if(s1==s3.begin()) { WY_THROW( WyRet() ); } if(s1!=s3.begin()) { } else { WY_THROW( WyRet() ); } if(s1.begin()==s3) { WY_THROW( WyRet() ); } if(s1.begin()!=s3) { } else { WY_THROW( WyRet() ); } if(s3==s5) { } else { WY_THROW( WyRet() ); } if(s3!=s5) { WY_THROW( WyRet() ); } if(s3==s5.begin()) { } else { WY_THROW( WyRet() ); } if(s3!=s5.begin()) { WY_THROW( WyRet() ); } if(s3.begin()==s5) { } else { WY_THROW( WyRet() ); } if(s3.begin()!=s5) { WY_THROW( WyRet() ); } s0.reset(cstr1,size_t(0)); s1.reset(cstr1+1,size_t(0)); CHK_EQU(s0,s1); } { WyCSeg s1("abc",4),s2(s1); CHK_EQU(s1,s2); if(s1.size()!=4) { WY_THROW( WyRet() ); } if((s1[0]!='a')||(s1[1]!='b')||(s1[2]!='c')||(s1[3]!=0)) { WY_THROW( WyRet() ); } } // WyCSeg(const char*, const char*) { const char* tmp="helo"; WyCSeg s1(tmp,tmp+4); if(s1.size()!=4) { WY_THROW( WyRet() ); } if((s1[0]!='h')||(s1[1]!='e')||(s1[2]!='l')||(s1[3]!='o')) { WY_THROW( WyRet() ); } WyCSeg s2("",""); if(s2.size()!=0) { WY_THROW( WyRet() ); } } // reset()/reset(const WyCSeg&) { WyCSeg s1("x",1),s2("a"); if(s1.size()!=1) { WY_THROW( WyRet() ); } s2.reset(s1); CHK_EQU(s1,s2); if(s1.is_default()) { WY_THROW( WyRet() ); } s1.reset(); if(s1.is_default()==false) { WY_THROW( WyRet() ); } } // reset(const char*) { WyCSeg s1("x"); CHK_EQU(s1,s1); if((r=s1.reset("123"))!=Ok) { WY_THROW(r); } if((s1[0]!='1')||(s1[1]!='2')||(s1[2]!='3')) { WY_THROW( WyRet() ); } } // reset(const char*,size_t) { WyCSeg s1("x"); if((r=s1.reset("ijk",3))!=Ok) { WY_THROW(r); } if(s1.size()!=3) { WY_THROW( WyRet() ); } if((s1[0]!='i')||(s1[1]!='j')||(s1[2]!='k')) { WY_THROW( WyRet() ); } } // reset(const char*, const char*) { const char* tmp="helo"; WyCSeg s1(tmp,size_t(0)),s2; // note: s1("",0) may or may be be default, may depend on compiler // optimization level // if(s1.is_default()==false) { WY_THROW( WyRet() ); } if(s2.is_default()==false) { WY_THROW( WyRet() ); } if((r=s1.reset(tmp,tmp+4))!=Ok) { WY_THROW( WyRet() ); } if(s1.size()!=4) { WY_THROW( WyRet() ); } if((s1[0]!='h')||(s1[1]!='e')||(s1[2]!='l')||(s1[3]!='o')) { WY_THROW( WyRet() ); } if((r=s1.reset(tmp,tmp))!=Ok) { WY_THROW( WyRet() ); } if(s1.size()!=0) { WY_THROW( WyRet() ); } s1.reset(); if(s1.is_default()==false) { WY_THROW( WyRet() ); } } // chk front()/back() { WyCSeg s="asdf"; if(s.front()!='a') { WY_THROW( WyRet() ); } if(s.back()!='f') { WY_THROW( WyRet() ); } s.reset(); try { s.front(); WY_THROW( WyRet() ); } catch(const WyCSeg::Reply& e) { if(e!=Wym_ENOENT) { WY_THROW( WyRet() ); } }; try { s.back(); WY_THROW( WyRet() ); } catch(const WyCSeg::Reply& e) { if(e!=Wym_ENOENT) { WY_THROW( WyRet() ); } }; } // chk _move_begin() { const char cstr[]="234"; WyCSeg s(cstr); s._move_begin(1); if(s.size()!=2) { WY_THROW( WyRet() ); } if(s.front()!='3') { WY_THROW( WyRet() ); } if(*s._move_begin(1)!='4') { WY_THROW( WyRet() ); } if(s.size()!=1) { WY_THROW( WyRet() ); } if(s.front()!='4') { WY_THROW( WyRet() ); } s._move_begin(1); if(s.size()!=0) { WY_THROW( WyRet() ); } s._move_begin(-3); if(s.size()!=3) { WY_THROW( WyRet() ); } s._move_begin(s.size()); if(s.size()!=0) { WY_THROW( WyRet() ); } s=cstr; if(s!=cstr) { WY_THROW( WyRet() ); } try { s._move_begin(s.size()+1); WY_THROW( WyRet() ); } catch(const WyCSeg::Reply& e) { if(e!=Wym_EINVAL) { WY_THROW( WyRet(e) ); } }; } // chk _move_end() { const char cstr[]="234"; WyCSeg s(cstr); s._move_end(-1); if(s.size()!=2) { WY_THROW( WyRet() ); } if(s.back()!='3') { WY_THROW( WyRet() ); } if(*s._move_end(-1)!='3') { WY_THROW( WyRet() ); } if(s.size()!=1) { WY_THROW( WyRet() ); } if(s.back()!='2') { WY_THROW( WyRet() ); } s._move_end(-1); if(s.size()!=0) { WY_THROW( WyRet() ); } s._move_end(2); if(s.size()!=2) { WY_THROW( WyRet() ); } s._move_end(-s.size()); if(s.size()!=0) { WY_THROW( WyRet() ); } s=cstr; if(s!=cstr) { WY_THROW( WyRet() ); } try { s._move_end(-1-s.size()); WY_THROW( WyRet() ); } catch(const WyCSeg::Reply& e) { if(e!=Wym_EINVAL) { WY_THROW( WyRet(e) ); } }; } // swap(..) { const char *cstr1="ab"; const char *cstr2="fgg"; WyCSeg s1(cstr1); WyCSeg s2(cstr2); if(s1.begin()!=cstr1) { WY_THROW( WyRet() ); } if(s1.size()!=::strlen(cstr1)) { WY_THROW( WyRet() ); } if(s2.begin()!=cstr2) { WY_THROW( WyRet() ); } if(s2.size()!=::strlen(cstr2)) { WY_THROW( WyRet() ); } s1.swap(s2); if(s1.begin()!=cstr2) { WY_THROW( WyRet() ); } if(s1.size()!=::strlen(cstr2)) { WY_THROW( WyRet() ); } if(s2.begin()!=cstr1) { WY_THROW( WyRet() ); } if(s2.size()!=::strlen(cstr1)) { WY_THROW( WyRet() ); } } // reset(const char*) { WyCSeg s1("x"); if((r=s1.reset("B"))!=Ok) { WY_THROW(r); } if(s1.size()!=1) { WY_THROW( WyRet() ); } if(s1[0]!='B') { WY_THROW( WyRet() ); } } // reset(const WyCSeg&) { WyCSeg s1("x"),s2("aa"); s1.reset(s2); CHK_EQU(s1,s2); if(s1.size()!=2) { WY_THROW( WyRet() ); } } // operator=(const WyCSeg&) { WyCSeg s1("x"),s2("aa"); if(s1.size()!=1) { WY_THROW( WyRet() ); } if(&(s1=s2)!=&s1) { WY_THROW( WyRet() ); } CHK_EQU(s1,s2); } // operator=(const char*) { WyCSeg s1("xx"); const char abc[]="abc"; if(s1.size()!=2) { WY_THROW( WyRet() ); } if(&(s1=abc)!=&s1) { WY_THROW( WyRet() ); } if(s1.size()!=3) { WY_THROW( WyRet() ); } if(s1!=abc) { WY_THROW( WyRet() ); } try { s1=NULL; WY_THROW( WyRet() ); } catch(const WyCSeg::Reply& e) { if(e!=Wym_EFAULT) { WY_THROW( WyRet() ); } }; } // chk operator [](size_t) { WyCSeg s="1234567"; if((s[0]!='1')||(s[1]!='2')) { WY_THROW( WyRet() ); } try { s[s.size()]; WY_THROW( WyRet() ); } catch(const WyCSeg::Reply& e) { if(e!=Wym_EINVAL) { WY_THROW( WyRet() ); } }; } // chk cseg(size_t,size_t) { WyCSeg s="1234567"; if(Wy::_strcmp(s.cseg(0,3),"123")!=0) { WY_THROW( WyRet() ); } if(Wy::_strcmp(s.cseg(0,3),"12")<0) { WY_THROW( WyRet() ); } if(Wy::_strcmp(s.cseg(0,3),"1234")>0) { WY_THROW( WyRet() ); } if(Wy::_strcmp(s.cseg(1,2),"23")!=0) { WY_THROW( WyRet() ); } if(Wy::_strcmp(s.cseg(5,6),"67")!=0) { WY_THROW( WyRet() ); } if(s.cseg(7,6).size()!=0) { WY_THROW( WyRet() ); } if(Wy::_strcmp(s.cseg(5),"67")!=0) { WY_THROW( WyRet() ); } if(s.cseg(s.size()).size()!=0) { WY_THROW( WyRet() ); } if(Wy::_strcmp(s.cseg(s.size()),"")!=0) { WY_THROW( WyRet() ); } } // is_overlap(const WyCSeg&) { WyCSeg s1("x"),s2("aa"); if(s1.is_overlap(s2)) { WY_THROW( WyRet() ); } } // end() { WyCSeg s1("3456",3); if(s1.size()!=3) { WY_THROW( WyRet() ); } if(s1.end()!=s1.begin()+s1.size()) { WY_THROW( WyRet() ); } } // chk average coding for const char* { WyCSeg c1="abtt"; WyCSeg c2("hdlm"); if(c1.begin()==c2.begin()) { // for supressing unused warning WY_THROW( WyRet() ); } } // chk move ctor { char buf[2*sizeof(WyCSeg)]; ::memset(buf,0,sizeof(buf)); WyCSeg *p=reinterpret_cast<WyCSeg*>(buf); new(p) WyCSeg("bn",2); new(p+1) WyCSeg(*p,Wy::ByMove); if(Wy::_strcmp(*(p+1),WyCSeg("bn",2))!=0) { (p+1)->~WyCSeg(); WY_THROW( WyRet() ); } (p+1)->~WyCSeg(); }};static void ck_cseg_find(void){ // find(size_t*,size_t,const WyCSeg&) { const WyCSeg ss("\xffx1111231237890\xff"); size_t fidx; fidx=100; if(ss.find(&fidx,2,WyCSeg())==true) { WY_THROW( WyRet() ); } if(fidx!=100) { WY_THROW( WyRet() ); } if(ss.find(NULL,2,WyCSeg())==true) { WY_THROW( WyRet() ); } if(ss.find(&fidx,2,WyCSeg("123"))==false) { WY_THROW( WyRet() ); } if(fidx!=5) { WY_THROW( WyRet() ); } if(ss.find(NULL,2,WyCSeg("123"))==false) { WY_THROW( WyRet() ); } if(ss.find(&fidx,0,WyCSeg("0\xff"))==false) { WY_THROW( WyRet() ); } if(fidx!=14) { WY_THROW( WyRet() ); } if(ss.find(NULL,0,WyCSeg("0\xff"))==false) { WY_THROW( WyRet() ); } fidx=100; if(ss.find(&fidx,100,WyCSeg("\xff"))==true) { WY_THROW( WyRet() ); } if(fidx!=100) { WY_THROW( WyRet() ); } if(ss.find(&fidx,0,ss)==false) { WY_THROW( WyRet() ); } if(fidx!=0) { WY_THROW( WyRet() ); } if(ss.find(&fidx,0,ss.cseg(1))==false) { WY_THROW( WyRet() ); } if(fidx!=1) { WY_THROW( WyRet() ); } const WyCSeg ss2; fidx=100; if(ss2.find(&fidx,0,WyCSeg())==true) { WY_THROW( WyRet() ); } if(fidx!=100) { WY_THROW( WyRet() ); } } // rfind(size_t*,size_t,const WyCSeg&) { const WyCSeg ss("\xffx1111231237890\xff"); size_t fidx; fidx=100; if(ss.rfind(&fidx,2,WyCSeg())==true) { WY_THROW( WyRet() ); } if(fidx!=100) { WY_THROW( WyRet() ); } if(ss.rfind(NULL,200,WyCSeg())==true) {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -