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

📄 chk_iconv.cpp

📁 一个不错
💻 CPP
字号:
/* Copyright is licensed under GNU LGPL.                 by I.J.Wang 2006   Build: make chk_iconv*/#include "wyiconv.h"#include "wyregfile.h"#include "wy_uty.h"#if WYICONV_VERSION!=31#error Test code is for WYICONV_VERSION 31#endifstatic void ck_iconv(void){ WyRet r; // chk WyIConv() {  WyIConv tmp;  WyStr strbuf;  if((r=tmp.iconv())!=Wym_EBADF) {    WY_THROW(r);  }  if((r=tmp.iconv(strbuf))!=Wym_EBADF) {    WY_THROW(r);  }  if(strbuf.is_default()==false) {    WY_THROW( WyRet() );  }  if((r=tmp.reset())!=Ok) {    WY_THROW(r);  }  WyCSeg ss("asdd");  size_t n_icv=99;  if((r=tmp.iconv(ss,strbuf,n_icv))!=Wym_EBADF) {    WY_THROW(r);  }  if(n_icv!=0) {    WY_THROW( WyRet() );   // feature only  }  if((r=tmp.reset())!=Ok) {    WY_THROW(r);  }  if((r=tmp.iconv())!=Wym_EBADF) {    WY_THROW(r);  }  if((r=tmp.iconv(strbuf))!=Wym_EBADF) {    WY_THROW(r);  }  if(strbuf.is_default()==false) {    WY_THROW( WyRet() );  }  if((r=tmp.reset())!=Ok) {    WY_THROW(r);  }  n_icv=99;  if((r=tmp.iconv(ss,strbuf,n_icv))!=Wym_EBADF) {    WY_THROW(r);  }  if(n_icv!=0) {    WY_THROW( WyRet() );   // feature only  } } // chk WyIConv(const char*,const char*) {  WyIConv tmp("8859_1","8859_1");  WyStr strbuf;  size_t n_rv;  if((r=tmp.iconv())!=Ok) {    WY_THROW(r);  }  if((r=tmp.iconv(strbuf))!=Ok) {    WY_THROW(r);  }  WyCSeg sptr1("Helo World\n"),sptr2;  sptr2.reset(sptr1);  n_rv=99;  if((r=tmp.iconv(sptr2,strbuf,n_rv))!=Ok) {    WY_THROW(r);  }  if(sptr2.size()!=0) {    WY_THROW( WyRet() );  }  if(strbuf!=sptr1) {    WY_THROW( WyRet() );  }  if(n_rv!=0) {    WY_THROW( WyRet() ); // tested value changed  }  if((r=tmp.iconv())!=Ok) {    WY_THROW(r);  }  if((r=tmp.iconv(strbuf))!=Ok) {    WY_THROW(r);  }  if(strbuf.is_default()==false) {    WY_THROW( WyRet() );  }  sptr2.reset(sptr1);  n_rv=99;  if((r=tmp.iconv(sptr2,strbuf,n_rv))!=Ok) {    WY_THROW(r);  }  if(sptr2.size()!=0) {    WY_THROW( WyRet() );  }  if(strbuf!=sptr1) {    WY_THROW( WyRet() );  }  if(n_rv!=0) {    WY_THROW( WyRet() ); // tested value changed  }    try {    WyIConv tmp("no-such-encoding","+---0-+");    WY_THROW( WyRet() );  }  catch(const WyIConv::Reply& e) {    if(e!=Wym_EINVAL) {      WY_THROW( WyRet(e) );    }  };  strbuf="123";  sptr2=strbuf.cseg(1);  if((r=tmp.iconv(sptr2,strbuf,n_rv))!=Wym_ELOOP) {    WY_THROW(r);  } } // chk reset(const char*,const char*) {  WyIConv tmp;  WyStr strbuf;  size_t n_rv;  if((r=tmp.reset("8859_1","8859_1"))!=Ok) {    WY_THROW(r);  }  WyCSeg sptr1("Helo World2\n"),sptr2;  sptr2.reset(sptr1);  n_rv=99;  if((r=tmp.iconv(sptr2,strbuf,n_rv))!=Ok) {    WY_THROW(r);  }  if(sptr2.size()!=0) {    WY_THROW( WyRet() );  }  if(strbuf!=sptr1) {    WY_THROW( WyRet() );  }  if(n_rv!=0) {    WY_THROW( WyRet() ); // tested value changed  }  if((r=tmp.reset("no-such-encoding","+---0-+"))!=Wym_EINVAL) {    WY_THROW(r);  }  sptr2.reset(sptr1);  n_rv=99;  strbuf.reset();  if((r=tmp.iconv(sptr2,strbuf,n_rv))!=Ok) {    WY_THROW(r);  }  if(sptr2.size()!=0) {    WY_THROW( WyRet() );  }  if(strbuf!=sptr1) {    WY_THROW( WyRet() );  }  if(n_rv!=0) {    WY_THROW( WyRet() ); // tested value changed  }  if((r=tmp.reset())!=Ok) {    WY_THROW(r);  }  if((r=tmp.iconv(strbuf))!=Wym_EBADF) {    WY_THROW(r);  } }};static void ck_iconv2(void){ WyRet r; {   const char txt_utf8[]=" 大學之道在明明德,在新民,在止於至善.";   const WyCSeg cs_utf8(txt_utf8,sizeof(txt_utf8)-1);   WyIConv tmp1("BIG5","UTF8");   WyCSeg ss1,ss2;   WyStr strbuf1,strbuf2;   size_t n_rv;   ss1.reset(cs_utf8);   if((r=tmp1.iconv(ss1,strbuf1,n_rv))!=Ok) {     WY_THROW(r);   }   if(ss1.size()!=0) {     WY_THROW( WyRet() );   }      WyIConv tmp2("UTF8","BIG5");   ss2.reset(strbuf1.cseg());   if((r=tmp2.iconv(ss2,strbuf2,n_rv))!=Ok) {     WY_THROW(r);   }   if(ss2.size()!=0) {     WY_THROW( WyRet() );   }   if(strbuf2!=cs_utf8) {     WY_THROW( WyRet() );   } } {   const char t1_utf8[]="《禮記.中庸》:「自誠明謂之性,自明誠謂之教,誠則明矣,明則誠矣。」";   const char t2_utf8[]="《禮記.中庸》:";    const char t3_utf8[]="「自誠明謂之性,自明誠謂之教,誠則明矣,明則誠矣。」";   WyIConv tmp1("BIG5","UTF8");   WyStr strbuf1,strbuf2,strbuf3;   WyCSeg ss1;   size_t n_rv;   ss1.reset(t2_utf8,sizeof(t2_utf8)-1);   if((r=tmp1.iconv(ss1,strbuf1,n_rv))!=Ok) {     Wy::cout << ss1 << '\n';     WY_THROW(r);   }   if(ss1.size()!=0) {     WY_THROW( WyRet() );   }   ss1.reset(t3_utf8,sizeof(t3_utf8)-1);   if((r=tmp1.iconv(ss1,strbuf2,n_rv))!=Ok) {     WY_THROW(r);   }   if(ss1.size()!=0) {     WY_THROW( WyRet() );   }   ss1.reset(t1_utf8,sizeof(t1_utf8)-1);   if((r=tmp1.iconv(ss1,strbuf3,n_rv))!=Ok) {     WY_THROW(r);   }   if(ss1.size()!=0) {     WY_THROW( WyRet() );   }   if(strbuf1+strbuf2!=strbuf3) {     WY_THROW( WyRet() );   } }};  static void big5_to_utf8(const char* infile_big5, const char* chkfile_utf8){ WyIConv iconv("UTF8", "BIG5"); WyStr infile,obuf; size_t n_rev; WyRet r; WyRegFile rfile( infile_big5, O_RDONLY ); // read infile_big5 into infile if((r=infile._reserve(64L*1024))!=Ok) {   WY_THROW(r); } rfile >> infile; WyStr(infile).swap(infile);  // shrink capacity to needed minimum // iconv to obuf WyCSeg inseg=infile.cseg(); if((r=iconv.iconv(inseg,obuf,n_rev))!=Ok) {   WY_THROW(r); } // read chkfile_utf8 into chkfile if((r=rfile.reset(chkfile_utf8, O_RDONLY))!=Ok) {   WY_THROW(r); } WyStr chkfile; if((r=chkfile._reserve(64L*1024))!=Ok) {   WY_THROW(r); } rfile >> chkfile; WyStr(chkfile).swap(chkfile);  // shrink capacity to needed minimum if(obuf!=chkfile) {   WY_THROW( WyRet() ); }};static void ck_iconv3(void){ big5_to_utf8("mid_ord.big5", "mid_ord.utf8");};static const WyStr chdr(                  "+---------------+\n"                  "| main() caught:|\n"                  "+---------------+\n");int main(void) throw()try { Wy::cout << "Checking wyiconv.h ...\n"; Wy::cout << "sizeof(WyIConv)= " << sizeof(WyIConv) << '\n'; if(std::strcmp(WyIConv::class_name,"WyIConv")!=0) {   WY_THROW( WyRet() ); } ck_iconv(); ck_iconv2(); ck_iconv3(); Wy::cout << "Checked Ok\n"; return(0);}catch(const WyIConv::Reply& e) { Wy::cerr << chdr << "WyIConv::Reply" << Wy::wrd(e) << '\n'; return(e->c_repcode());}catch(const WyRet& e) { Wy::cerr << chdr << Wy::wrd(e) << '\n'; return(e->c_repcode());}catch(...) { Wy::cerr << chdr << "unknown unwind" << '\n'; return(-1);};

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -