📄 chk_iconv.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 + -