📄 ckn_strnum.cpp
字号:
/* Check wy_strnum2(...) and wy_strnum3(...)*/#include "wynum.h"#include <iostream>template <typename NumT>struct ChkSmp2 { const char* nstr; size_t nstr_size; NumT res1,res2; int frdig; void verify(void) try { WyRet r; NumT tn1(res1+1),tn2(res2+1); int tdig(frdig+1); const char* endptr; if((r=Wy::wy_strnum2(tn1,tn2,tdig,&endptr,nstr,nstr_size))!=Ok) { WY_THROW(r); } if(endptr-nstr!=(int)nstr_size) { WY_THROW( WyRet() ); } if(res1!=tn1) { WY_THROW( WyRet() ); } if(res2!=tn2) { WY_THROW( WyRet() ); } if(frdig!=tdig) { WY_THROW( WyRet() ); } } catch(...) { std::cerr << "Failed on ChkSmp2={\"" << nstr << "\"," << nstr_size << "," << res1 << "," << res2 << "," << frdig << "}\n"; throw; };};template <typename NumT>struct ChkSmp3 { const char* nstr; size_t nstr_size; NumT res1,res2; int frdig; int res3; void verify(void) { WyRet r; NumT tn1(res1+1),tn2(res2+1); int tdig(frdig+1); int texp(res3+1); const char* endptr; try { if((r=Wy::wy_strnum3(tn1,tn2,tdig,texp,&endptr,nstr,nstr_size))!=Ok) { WY_THROW(r); } if(endptr-nstr!=(int)nstr_size) { WY_THROW( WyRet() ); } if(res1!=tn1) { WY_THROW( WyRet() ); } if(res2!=tn2) { WY_THROW( WyRet() ); } if(frdig!=tdig) { WY_THROW( WyRet() ); } if(res3!=texp) { WY_THROW( WyRet() ); } } catch(...) { std::cerr << "Failed on ChkSmp3={\"" << nstr << "\"," << nstr_size << "," << res1 << "," << res2 << "," << frdig << "," << res3 << "}\n"; std::cerr << "Result=(" << endptr-nstr << "," << tn1 << "," << tn2 << "," << tdig << "," << texp << ")\n"; throw; }; };};template <typename NumT>static void ck_strnum2_typed(void){ // // Note: larger numbers not checked // static ChkSmp2<NumT> chk_tab[]={ {"0",1,0,0,0},{"+0",2,0,0,0},{"-0",2,0,0,0}, {".0",2,0,0,-1},{"+.0",3,0,0,-1},{"-.0",3,0,0,-1}, {".00",3,0,0,-2},{"+.00",4,0,0,-2},{"-.00",4,0,0,-2}, {"0.",2,0,0,0},{"+0.",3,0,0,0},{"-0.",3,0,0,0}, {"0.0",3,0,0,-1},{"+0.0",4,0,0,-1},{"-0.0",4,0,0,-1}, {"00.0",4,0,0,-1},{"+00.0",5,0,0,-1},{"-00.0",5,0,0,-1}, {"0.010",5,0,10,-3},{"+0.010",6,0,10,-3},{"-0.010",6,0,-10,-3}, {"123",3,123,0,0}, {"+123",4,123,0,0}, {"-123",4,-123,0,0}, {".123",4,0,123,-3}, {"+.123",5,0,123,-3}, {"-.123",5,0,-123,-3}, {".120",4,0,120,-3}, {"+.120",5,0,120,-3}, {"-.120",5,0,-120,-3}, {"123.",4,123,0,0},{"+123.",5,123,0,0},{"-123.",5,-123,0,0}, {"123.0",5,123,0,-1},{"+123.0",6,123,0,-1},{"-123.0",6,-123,0,-1}, {"23.45",5,23,45,-2},{"+23.45",6,23,45,-2},{"-23.45",6,-23,-45,-2}, {"23.40",5,23,40,-2},{"+23.40",6,23,40,-2},{"-23.40",6,-23,-40,-2}, }; for(size_t i=0; i<sizeof(chk_tab)/sizeof(ChkSmp2<NumT>); ++i) { chk_tab[i].verify(); } WyRet r; NumT res1,res2; const char* endptr; // check error { const char s1[]="a"; int frdig=100; res1=res2=100; if((r=Wy::wy_strnum2(res1,res2,frdig,&endptr,s1,sizeof(s1)-1))!=Wym_ENOENT) { WY_THROW(r); } if(endptr-s1!=0) { WY_THROW( WyRet() ); } if(res1!=NumT(0)) { WY_THROW( WyRet() ); } if(res2!=NumT(0)) { WY_THROW( WyRet() ); } if(frdig!=0) { WY_THROW( WyRet() ); } if((r=Wy::wy_strnum2(res1,res2,frdig,&endptr,"",0))!=Wym_ENOENT) { WY_THROW(r); } if(res1!=NumT(0)) { WY_THROW( WyRet() ); } if(res2!=NumT(0)) { WY_THROW( WyRet() ); } if(frdig!=0) { WY_THROW( WyRet() ); } } { const char s1[]="2a"; int frdig=100; res1=res2=100; if((r=Wy::wy_strnum2(res1,res2,frdig,&endptr,s1,sizeof(s1)-1))!=Wym_EBADMSG) { WY_THROW(r); } if(endptr-s1!=1) { WY_THROW( WyRet() ); } if(res1!=NumT(2)) { WY_THROW( WyRet() ); } if(res2!=NumT(0)) { WY_THROW( WyRet() ); } if(frdig!=0) { WY_THROW( WyRet() ); } } { const char s1[]="."; int frdig=100; res1=res2=100; if((r=Wy::wy_strnum2(res1,res2,frdig,&endptr,s1,sizeof(s1)-1))!=Wym_ENOENT) { WY_THROW(r); } if(endptr-s1!=0) { WY_THROW( WyRet() ); } if(res1!=NumT(0)) { WY_THROW( WyRet() ); } if(res2!=NumT(0)) { WY_THROW( WyRet() ); } if(frdig!=0) { WY_THROW( WyRet() ); } } { const char s1[]="+."; int frdig=100; res1=res2=100; if((r=Wy::wy_strnum2(res1,res2,frdig,&endptr,s1,sizeof(s1)-1))!=Wym_ENOENT) { WY_THROW(r); } if(endptr-s1!=0) { WY_THROW( WyRet() ); } if(res1!=NumT(0)) { WY_THROW( WyRet() ); } if(res2!=NumT(0)) { WY_THROW( WyRet() ); } if(frdig!=0) { WY_THROW( WyRet() ); } } { const char s1[]="-."; int frdig=100; res1=res2=100; if((r=Wy::wy_strnum2(res1,res2,frdig,&endptr,s1,sizeof(s1)-1))!=Wym_ENOENT) { WY_THROW(r); } if(endptr-s1!=0) { WY_THROW( WyRet() ); } if(res1!=NumT(0)) { WY_THROW( WyRet() ); } if(res2!=NumT(0)) { WY_THROW( WyRet() ); } if(frdig!=0) { WY_THROW( WyRet() ); } } { const char s1[]="-.+1"; int frdig=100; res1=res2=100; if((r=Wy::wy_strnum2(res1,res2,frdig,&endptr,s1,sizeof(s1)-1))!=Wym_ENOENT) { WY_THROW(r); } if(endptr-s1!=0) { WY_THROW( WyRet() ); } if(res1!=NumT(0)) { WY_THROW( WyRet() ); } if(res2!=NumT(0)) { WY_THROW( WyRet() ); } if(frdig!=0) { WY_THROW( WyRet() ); } } { const char s1[]=".x"; int frdig=100; res1=res2=100; if((r=Wy::wy_strnum2(res1,res2,frdig,&endptr,s1,sizeof(s1)-1))!=Wym_ENOENT) { WY_THROW(r); } if(endptr-s1!=0) { WY_THROW( WyRet() ); } if(res1!=NumT(0)) { WY_THROW( WyRet() ); } if(res2!=NumT(0)) { WY_THROW( WyRet() ); } if(frdig!=0) { WY_THROW( WyRet() ); } } { const char s1[]=".-1"; int frdig=100; res1=res2=100; if((r=Wy::wy_strnum2(res1,res2,frdig,&endptr,s1,sizeof(s1)-1))!=Wym_ENOENT) { WY_THROW(r); } if(endptr-s1!=0) { WY_THROW( WyRet() ); } if(res1!=NumT(0)) { WY_THROW( WyRet() ); } if(res2!=NumT(0)) { WY_THROW( WyRet() ); } if(frdig!=0) { WY_THROW( WyRet() ); } } { const char s1[]=".3x"; int frdig=100; res1=res2=100; if((r=Wy::wy_strnum2(res1,res2,frdig,&endptr,s1,sizeof(s1)-1))!=Wym_EBADMSG) { WY_THROW(r); } if(endptr-s1!=2) { WY_THROW( WyRet() ); } if(res1!=NumT(0)) { WY_THROW( WyRet() ); } if(res2!=NumT(3)) { WY_THROW( WyRet() ); } if(frdig!=-1) { WY_THROW( WyRet() ); } } { const char s1[]="+.3x"; int frdig=100; res1=res2=100; if((r=Wy::wy_strnum2(res1,res2,frdig,&endptr,s1,sizeof(s1)-1))!=Wym_EBADMSG) { WY_THROW(r); } if(endptr-s1!=3) { WY_THROW( WyRet() ); } if(res1!=NumT(0)) { WY_THROW( WyRet() ); } if(res2!=NumT(3)) { WY_THROW( WyRet() ); } if(frdig!=-1) { WY_THROW( WyRet() ); } } { const char s1[]="-.3x"; int frdig=100; res1=res2=100; if((r=Wy::wy_strnum2(res1,res2,frdig,&endptr,s1,sizeof(s1)-1))!=Wym_EBADMSG) { WY_THROW(r); } if(endptr-s1!=3) { WY_THROW( WyRet() ); } if(res1!=NumT(0)) { WY_THROW( WyRet() ); } if(res2!=NumT(-3)) { WY_THROW( WyRet() ); } if(frdig!=-1) { WY_THROW( WyRet() ); } } { const char s1[]="1.x"; int frdig=100; res1=res2=100; if((r=Wy::wy_strnum2(res1,res2,frdig,&endptr,s1,sizeof(s1)-1))!=Wym_EBADMSG) { WY_THROW(r); } if(endptr-s1!=2) { WY_THROW( WyRet() ); } if(res1!=NumT(1)) { WY_THROW( WyRet() ); } if(res2!=NumT(0)) { WY_THROW( WyRet() ); } if(frdig!=0) { WY_THROW( WyRet() ); } } { const char s1[]="+1.x"; int frdig=100; res1=res2=100; if((r=Wy::wy_strnum2(res1,res2,frdig,&endptr,s1,sizeof(s1)-1))!=Wym_EBADMSG) { WY_THROW(r); } if(endptr-s1!=3) { WY_THROW( WyRet() ); } if(res1!=NumT(1)) { WY_THROW( WyRet() ); } if(res2!=NumT(0)) { WY_THROW( WyRet() ); } if(frdig!=0) { WY_THROW( WyRet() ); } } { const char s1[]="-1.+"; int frdig=100; res1=res2=100; if((r=Wy::wy_strnum2(res1,res2,frdig,&endptr,s1,sizeof(s1)-1))!=Wym_EBADMSG) { WY_THROW(r); } if(endptr-s1!=3) { WY_THROW( WyRet() ); } if(res1!=NumT(-1)) { WY_THROW( WyRet() ); } if(res2!=NumT(0)) { WY_THROW( WyRet() ); } if(frdig!=0) { WY_THROW( WyRet() ); } } { const char s1[]="12.-34"; int frdig=100; res1=res2=100; if((r=Wy::wy_strnum2(res1,res2,frdig,&endptr,s1,sizeof(s1)-1))!=Wym_EBADMSG) { WY_THROW(r); } if(endptr-s1!=3) { WY_THROW( WyRet() ); } if(res1!=NumT(12)) { WY_THROW( WyRet() ); } if(res2!=NumT(0)) { WY_THROW( WyRet() ); } if(frdig!=0) { WY_THROW( WyRet() ); } }};template <typename NumT>static void ck_strnum3_typed(void){ // // Note: larger numbers not checked // static ChkSmp3<NumT> chk_tab[]={ // base sample {"0",1,0,0,0,0},{"+0",2,0,0,0,0},{"-0",2,0,0,0,0}, {".0",2,0,0,-1,0},{"+.0",3,0,0,-1,0},{"-.0",3,0,0,-1,0}, {".00",3,0,0,-2,0},{"+.00",4,0,0,-2,0},{"-.00",4,0,0,-2,0}, {"0.",2,0,0,0,0},{"+0.",3,0,0,0,0},{"-0.",3,0,0,0,0}, {"0.0",3,0,0,-1,0},{"+0.0",4,0,0,-1,0},{"-0.0",4,0,0,-1,0}, {"00.0",4,0,0,-1,0},{"+00.0",5,0,0,-1,0},{"-00.0",5,0,0,-1,0}, {"0.010",5,0,10,-3,0},{"+0.010",6,0,10,-3,0},{"-0.010",6,0,-10,-3,0}, {"123",3,123,0,0,0}, {"+123",4,123,0,0,0}, {"-123",4,-123,0,0,0}, {".123",4,0,123,-3,0}, {"+.123",5,0,123,-3,0}, {"-.123",5,0,-123,-3,0}, {".120",4,0,120,-3,0}, {"+.120",5,0,120,-3,0}, {"-.120",5,0,-120,-3,0}, {"123.",4,123,0,0,0},{"+123.",5,123,0,0,0},{"-123.",5,-123,0,0,0}, {"123.0",5,123,0,-1,0},{"+123.0",6,123,0,-1,0},{"-123.0",6,-123,0,-1,0}, {"23.45",5,23,45,-2,0},{"+23.45",6,23,45,-2,0},{"-23.45",6,-23,-45,-2,0}, {"23.40",5,23,40,-2,0},{"+23.40",6,23,40,-2,0},{"-23.40",6,-23,-40,-2,0}, // base sample + "e0" {"0e0",3,0,0,0,0},{"+0e0",4,0,0,0,0},{"-0e0",4,0,0,0,0}, {".0e0",4,0,0,-1,0},{"+.0e0",5,0,0,-1,0},{"-.0e0",5,0,0,-1,0}, {".00e0",5,0,0,-2,0},{"+.00e0",6,0,0,-2,0},{"-.00e0",6,0,0,-2,0}, {"0.e0",4,0,0,0,0},{"+0.e0",5,0,0,0,0},{"-0.e0",5,0,0,0,0}, {"00.0e0",6,0,0,-1,0},{"+00.0e0",7,0,0,-1,0},{"-00.0e0",7,0,0,-1,0}, {"0.0e0",5,0,0,-1,0},{"+0.0e0",6,0,0,-1,0},{"-0.0e0",6,0,0,-1,0}, {"0.010e0",7,0,10,-3,0},{"+0.010e0",8,0,10,-3,0},{"-0.010e0",8,0,-10,-3,0}, {"123e0",5,123,0,0,0}, {"+123e0",6,123,0,0,0}, {"-123e0",6,-123,0,0,0}, {".123e0",6,0,123,-3,0}, {"+.123e0",7,0,123,-3,0}, {"-.123e0",7,0,-123,-3,0}, {".120e0",6,0,120,-3,0}, {"+.120e0",7,0,120,-3,0}, {"-.120e0",7,0,-120,-3,0}, {"123.e0",6,123,0,0,0},{"+123.e0",7,123,0,0,0},{"-123.e0",7,-123,0,0,0}, {"123.0e0",7,123,0,-1,0},{"+123.0e0",8,123,0,-1,0},{"-123.0e0",8,-123,0,-1,0}, {"23.45e0",7,23,45,-2,0},{"+23.45e0",8,23,45,-2,0},{"-23.45e0",8,-23,-45,-2,0}, {"23.40e0",7,23,40,-2,0},{"+23.40e0",8,23,40,-2,0},{"-23.40e0",8,-23,-40,-2,0}, // base sample + "e+0" {"0e+0",4,0,0,0,0},{"+0e+0",5,0,0,0,0},{"-0e+0",5,0,0,0,0}, {".0e+0",5,0,0,-1,0},{"+.0e+0",6,0,0,-1,0},{"-.0e+0",6,0,0,-1,0}, {".00e+0",6,0,0,-2,0},{"+.00e+0",7,0,0,-2,0},{"-.00e+0",7,0,0,-2,0}, {"0.e+0",5,0,0,0,0},{"+0.e+0",6,0,0,0,0},{"-0.e+0",6,0,0,0,0}, {"0.0e+0",6,0,0,-1,0},{"+0.0e+0",7,0,0,-1,0},{"-0.0e+0",7,0,0,-1,0}, {"00.0e+0",7,0,0,-1,0},{"+00.0e+0",8,0,0,-1,0},{"-00.0e+0",8,0,0,-1,0}, {"0.010e+0",8,0,10,-3,0},{"+0.010e+0",9,0,10,-3,0},{"-0.010e+0",9,0,-10,-3,0}, {"123e+0",6,123,0,0,0}, {"+123e+0",7,123,0,0,0}, {"-123e+0",7,-123,0,0,0}, {".123e+0",7,0,123,-3,0}, {"+.123e+0",8,0,123,-3,0}, {"-.123e+0",8,0,-123,-3,0}, {".120e+0",7,0,120,-3,0}, {"+.120e+0",8,0,120,-3,0}, {"-.120e+0",8,0,-120,-3,0}, {"123.e+0",7,123,0,0,0},{"+123.e+0",8,123,0,0,0},{"-123.e+0",8,-123,0,0,0}, {"123.0e+0",8,123,0,-1,0},{"+123.0e+0",9,123,0,-1,0},{"-123.0e+0",9,-123,0,-1,0}, {"23.45e+0",8,23,45,-2,0},{"+23.45e+0",9,23,45,-2,0},{"-23.45e+0",9,-23,-45,-2,0}, {"23.40e+0",8,23,40,-2,0},{"+23.40e+0",9,23,40,-2,0},{"-23.40e+0",9,-23,-40,-2,0}, // base sample + "e-0" {"0e-0",4,0,0,0,0},{"+0e-0",5,0,0,0,0},{"-0e-0",5,0,0,0,0}, {".0e-0",5,0,0,-1,0},{"+.0e-0",6,0,0,-1,0},{"-.0e-0",6,0,0,-1,0}, {".00e-0",6,0,0,-2,0},{"+.00e-0",7,0,0,-2,0},{"-.00e-0",7,0,0,-2,0}, {"0.e-0",5,0,0,0,0},{"+0.e-0",6,0,0,0,0},{"-0.e-0",6,0,0,0,0}, {"0.0e-0",6,0,0,-1,0},{"+0.0e-0",7,0,0,-1,0},{"-0.0e-0",7,0,0,-1,0}, {"00.0e-0",7,0,0,-1,0},{"+00.0e-0",8,0,0,-1,0},{"-00.0e-0",8,0,0,-1,0}, {"0.010e-0",8,0,10,-3,0},{"+0.010e-0",9,0,10,-3,0},{"-0.010e-0",9,0,-10,-3,0}, {"123e-0",6,123,0,0,0}, {"+123e-0",7,123,0,0,0}, {"-123e-0",7,-123,0,0,0}, {".123e-0",7,0,123,-3,0}, {"+.123e-0",8,0,123,-3,0}, {"-.123e-0",8,0,-123,-3,0}, {".120e-0",7,0,120,-3,0}, {"+.120e-0",8,0,120,-3,0}, {"-.120e-0",8,0,-120,-3,0}, {"123.e-0",7,123,0,0,0},{"+123.e-0",8,123,0,0,0},{"-123.e-0",8,-123,0,0,0}, {"123.0e-0",8,123,0,-1,0},{"+123.0e-0",9,123,0,-1,0},{"-123.0e-0",9,-123,0,-1,0}, {"23.45e-0",8,23,45,-2,0},{"+23.45e-0",9,23,45,-2,0},{"-23.45e-0",9,-23,-45,-2,0}, {"23.40e-0",8,23,40,-2,0},{"+23.40e-0",9,23,40,-2,0},{"-23.40e-0",9,-23,-40,-2,0},
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -