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

📄 ckn_strnum.cpp

📁 一个不错
💻 CPP
📖 第 1 页 / 共 2 页
字号:
/*  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 + -