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

📄 ck_num.cpp

📁 一个不错
💻 CPP
📖 第 1 页 / 共 2 页
字号:
/* Copyright is licensed under GNU LGPL.                 by I.J.Wang 2004   Build: ck_num.o*///#include "wystr.h"#include "wynum.h"#include <limits>#include <cstdlib>#include "wymath.h"#include <math.h>    // for fabs#include <cstdio>    // for sscanf#include <iostream>#if WYLIB_VERSION!=31#error Test code is for WYLIB_VERSION 31#endifextern void ck_strnum(void);    // defined in ckn_strnum.cpptemplate <typename NumType>static void ck_uty(void){ WyRet r; // chk Wy::_strnum(...) {   NumType tnn;   const char s1[]="52";   const char* endptr;   tnn=7;   if((r=Wy::_strnum(tnn,0,"0",10))!=Ok) {     WY_THROW(r);   }   if(tnn!=NumType(0)) {     WY_THROW(r);   }   if((r=Wy::_strnum(tnn,NULL,WyCSeg("0",1),10))!=Ok) {     WY_THROW(r);   }   if(tnn!=NumType(0)) {     WY_THROW(r);   }   if((r=Wy::_strnum(tnn,&endptr,WyCSeg(s1,sizeof(s1)-1),16))!=Ok) {     WY_THROW(r);   }   if(endptr-s1!=sizeof(s1)-1) {     WY_THROW( WyRet() );   }   if(tnn!=NumType(0x52)) {     WY_THROW( WyRet() );   }   if((r=Wy::_strnum(tnn,&endptr,WyCSeg(s1,sizeof(s1)-1),0))!=Ok) {     WY_THROW(r);   }   if(endptr-s1!=sizeof(s1)-1) {     WY_THROW( WyRet() );   }   if(tnn!=NumType(52)) {     WY_THROW( WyRet() );   }   const char s2[]="0x041";   int radix;   radix=0;   if((r=Wy::_strnum(tnn,&endptr,WyCSeg(s2,sizeof(s2)-1),radix))!=Ok) {     WY_THROW(r);   }   if(endptr-s2!=sizeof(s2)-1) {     WY_THROW( WyRet() );   }   if(radix!=16) {     WY_THROW( WyRet() );   }   if(tnn!=NumType(0x41)) {     WY_THROW( WyRet() );   }   radix=0;   if((r=Wy::_strnum(tnn,&endptr,WyCSeg(s2+2,sizeof(s2)-3),radix))!=Ok) {     WY_THROW(r);   }   if(endptr-s2!=sizeof(s2)-1) {     WY_THROW( WyRet() );   }   if(radix!=8) {     WY_THROW( WyRet() );   }   if(tnn!=NumType(041)) {     WY_THROW( WyRet() );   }   radix=0;   tnn=99;   if((r=Wy::_strnum(tnn,&endptr,WyCSeg(s2,1),radix))!=Ok) {     WY_THROW(r);   }   if(endptr-s2!=1) {     WY_THROW( WyRet() );   }   if(radix!=10) {     WY_THROW( WyRet() );   }   if(tnn!=NumType(0)) {     WY_THROW( WyRet() );   }   radix=0;   tnn=99;   if((r=Wy::_strnum(tnn,&endptr,WyCSeg("00"),radix))!=Ok) {     WY_THROW(r);   }   if(radix!=8) {     WY_THROW( WyRet() );   }   if(tnn!=NumType(0)) {     WY_THROW( WyRet() );   }   radix=5;   if((r=Wy::_strnum(tnn,&endptr,WyCSeg(s2+2,sizeof(s2)-3),radix))!=Ok) {     WY_THROW(r);   }   if(endptr-s2!=sizeof(s2)-1) {     WY_THROW( WyRet() );   }   if(radix!=5) {     WY_THROW( WyRet() );   }   if(tnn!=NumType(21)) {     WY_THROW( WyRet() );   }    if(std::numeric_limits<NumType>::is_signed) {     const char ns1[]="-52";     if((r=Wy::_strnum(tnn,0,WyCSeg("-0",2),10))!=Ok) {       WY_THROW(r);     }     if(tnn!=NumType(0)) {       WY_THROW(r);     }     if((r=Wy::_strnum(tnn,&endptr,WyCSeg(ns1,sizeof(ns1)-1),10))!=Ok) {       WY_THROW(r);     }     if(endptr-ns1!=sizeof(ns1)-1) {       WY_THROW( WyRet() );     }     if(tnn!=NumType(-52)) {       WY_THROW( WyRet() );     }     const char ns2[]="-0x041";     radix=0;     if((r=Wy::_strnum(tnn,&endptr,WyCSeg(ns2,sizeof(ns2)-1),radix))!=Ok) {       WY_THROW(r);     }     if(endptr-ns2!=sizeof(ns2)-1) {       WY_THROW( WyRet() );     }     if(radix!=16) {       WY_THROW( WyRet() );     }     if(tnn!=NumType(-0x41)) {       WY_THROW( WyRet() );     }       const char ns3[]="-041";     radix=0;     if((r=Wy::_strnum(tnn,&endptr,WyCSeg(ns3,sizeof(ns3)-1),radix))!=Ok) {       WY_THROW(r);     }     if(endptr-ns3!=sizeof(ns3)-1) {       WY_THROW( WyRet() );     }     if(radix!=8) {       WY_THROW( WyRet() );     }     if(tnn!=NumType(-041)) {       WY_THROW( WyRet() );     }       const char ns4[]="-41";     radix=5;     if((r=Wy::_strnum(tnn,&endptr,WyCSeg(ns4,sizeof(ns4)-1),radix))!=Ok) {       WY_THROW(r);     }     if(endptr-ns4!=sizeof(ns4)-1) {       WY_THROW( WyRet() );     }     if(radix!=5) {       WY_THROW( WyRet() );     }     if(tnn!=NumType(-21)) {       WY_THROW( WyRet() );     }   } } // chk error Wy::_strnum(...) {   NumType tnn=3;   const char* buf=0;   const char* endptr=(const char*)1;   int radix;   try {     r=Wy::_strnum(tnn,&endptr,WyCSeg(buf,1),3);     WY_THROW(r);   }   catch(const WyCSeg::Reply& e) {     if(e!=Wym_EFAULT) {       WY_THROW( WyRet(e) );     }     // FALLTHROUGH   };   buf="73!";   tnn=99;   if((r=Wy::_strnum(tnn,&endptr,WyCSeg(buf,2),1))!=Wym_EINVAL) {     WY_THROW(r);   }   if(endptr-buf!=0) {     WY_THROW( WyRet() );   }   if(tnn!=0) {     WY_THROW( WyRet() );   }   tnn=99;   if((r=Wy::_strnum(tnn,&endptr,WyCSeg(buf,2),37))!=Wym_EINVAL) {     WY_THROW(r);   }   if(endptr-buf!=0) {     WY_THROW( WyRet() );   }   if(tnn!=0) {     WY_THROW( WyRet() );   }   tnn=99;   if((r=Wy::_strnum(tnn,&endptr,WyCSeg(buf,3),10))!=Wym_EBADMSG) {     WY_THROW(r);   }   if(endptr-buf!=2) {     WY_THROW( WyRet() );   }   if(tnn!=73) {     WY_THROW( WyRet() );   }   buf="+";   tnn=99;   if((r=Wy::_strnum(tnn,&endptr,WyCSeg(buf,1),2))!=Wym_ENOENT) {     WY_THROW(r);   }   if(endptr-buf!=0) {     WY_THROW( WyRet() );   }   if(tnn!=0) {     WY_THROW( WyRet() );   }   buf="0xx";   tnn=99;   if((r=Wy::_strnum(tnn,&endptr,WyCSeg(buf,3),0))!=Wym_EBADMSG) {     WY_THROW(r);   }   if(endptr-buf!=1) {     WY_THROW( WyRet() );   }   if(tnn!=0) {     WY_THROW( WyRet() );   }   tnn=99;   if((r=Wy::_strnum(tnn,&endptr,WyCSeg(buf,3),16))!=Wym_EBADMSG) {     WY_THROW(r);   }   if(endptr-buf!=1) {     WY_THROW( WyRet() );   }   if(tnn!=0) {     WY_THROW( WyRet() );   }   buf="0xg";   tnn=99;   if((r=Wy::_strnum(tnn,&endptr,WyCSeg(buf,3),0))!=Wym_EBADMSG) {     WY_THROW(r);   }   if(endptr-buf!=1) {     WY_THROW( WyRet() );   }   if(tnn!=0) {     WY_THROW( WyRet() );   }   tnn=99;   if((r=Wy::_strnum(tnn,&endptr,WyCSeg(buf,3),16))!=Wym_EBADMSG) {     WY_THROW(r);   }   if(endptr-buf!=1) {     WY_THROW( WyRet() );   }   if(tnn!=0) {     WY_THROW( WyRet() );   }   buf="0xx";   radix=0;   tnn=99;   if((r=Wy::_strnum(tnn,&endptr,WyCSeg(buf,3),radix))!=Wym_EBADMSG) {     WY_THROW(r);   }   if(endptr-buf!=1) {     WY_THROW( WyRet() );   }   if(tnn!=0) {     WY_THROW( WyRet() );   }   radix=0;   tnn=99;   if((r=Wy::_strnum(tnn,&endptr,WyCSeg(buf,3),radix))!=Wym_EBADMSG) {     WY_THROW(r);   }   if(endptr-buf!=1) {     WY_THROW( WyRet() );   }   if(tnn!=0) {     WY_THROW( WyRet() );   }   radix=16;   if((r=Wy::_strnum(tnn,&endptr,WyCSeg(buf,3),radix))!=Wym_EBADMSG) {     WY_THROW(r);   }   if(endptr-buf!=1) {     WY_THROW( WyRet() );   }   if(tnn!=0) {     WY_THROW( WyRet() );   }   if(radix!=16) {     WY_THROW( WyRet() );   }   buf="0xg";   radix=0;   tnn=99;   if((r=Wy::_strnum(tnn,&endptr,WyCSeg(buf,3),radix))!=Wym_EBADMSG) {     WY_THROW(r);   }   if(endptr-buf!=1) {     WY_THROW( WyRet() );   }   if(tnn!=0) {     WY_THROW( WyRet() );   }   tnn=99;   radix=0;   if((r=Wy::_strnum(tnn,&endptr,WyCSeg(buf,3),radix))!=Wym_EBADMSG) {     WY_THROW(r);   }   if(endptr-buf!=1) {     WY_THROW( WyRet() );   }   if(tnn!=0) {     WY_THROW( WyRet() );   }   radix=0;   if((r=Wy::_strnum(tnn,&endptr,WyCSeg(buf,3),radix))!=Wym_EBADMSG) {     WY_THROW(r);   }   if(endptr-buf!=1) {     WY_THROW( WyRet() );   }   if(tnn!=0) {     WY_THROW( WyRet() );   }   radix=16;   if((r=Wy::_strnum(tnn,&endptr,WyCSeg(buf,3),radix))!=Wym_EBADMSG) {     WY_THROW(r);   }   if(endptr-buf!=1) {     WY_THROW( WyRet() );   }   if(tnn!=0) {     WY_THROW( WyRet() );   }   if(radix!=16) {     WY_THROW( WyRet() );   }   buf="0xfg";   tnn=99;   if((r=Wy::_strnum(tnn,&endptr,WyCSeg(buf,4),16))!=Wym_EBADMSG) {     WY_THROW(r);   }   if(endptr-buf!=3) {     WY_THROW( WyRet() );   }   if(tnn!=0xf) {     WY_THROW( WyRet() );   }   if(radix!=16) {     WY_THROW( WyRet() );   }   if((r=Wy::_strnum(tnn,&endptr,WyCSeg("fffffffffffffffffffffff"),16))!=Wym_ERANGE) {     WY_THROW(r);   }   if(endptr-buf<(int)(2*sizeof(NumType))) {     WY_THROW( WyRet() );   }   if(tnn<15) {     WY_THROW( WyRet() );   }   if(std::numeric_limits<NumType>::is_signed) {     buf=(const char*)0;     tnn=4;     try {       r=Wy::_strnum(tnn,&endptr,WyCSeg(buf,1),3);       WY_THROW(r);     }     catch(const WyCSeg::Reply& e) {       if(e!=Wym_EFAULT) {         WY_THROW( WyRet(e) );       }       // FALLTHROUGH     };       buf="-7";     tnn=99;     if((r=Wy::_strnum(tnn,&endptr,WyCSeg(buf,2),37))!=Wym_EINVAL) {       WY_THROW(r);     }     if(endptr-buf!=0) {       WY_THROW( WyRet() );     }     if(tnn!=0) {       WY_THROW( WyRet() );     }     tnn=99;     if((r=Wy::_strnum(tnn,&endptr,WyCSeg(buf,3),8))!=Wym_EBADMSG) {       WY_THROW(r);     }     if(endptr-buf!=2) {       WY_THROW( WyRet() );     }     if(tnn!=NumType(-7)) {       WY_THROW( WyRet() );     }     tnn=99;     if((r=Wy::_strnum(tnn,&endptr,WyCSeg(buf,2),1))!=Wym_EINVAL) {       WY_THROW(r);     }     if(endptr-buf!=0) {       WY_THROW( WyRet() );     }     if(tnn!=0) {       WY_THROW( WyRet() );     }     buf="-0xx";     tnn=99;     if((r=Wy::_strnum(tnn,&endptr,WyCSeg(buf,4),0))!=Wym_EBADMSG) {       WY_THROW(r);     }     if(endptr-buf!=2) {       WY_THROW( WyRet() );     }     if(tnn!=0) {       WY_THROW( WyRet() );     }     tnn=99;     if((r=Wy::_strnum(tnn,&endptr,WyCSeg(buf,4),16))!=Wym_EBADMSG) {       WY_THROW(r);     }     if(endptr-buf!=2) {       WY_THROW( WyRet() );     }     if(tnn!=0) {       WY_THROW( WyRet() );     }       buf="-0xg";     tnn=99;     if((r=Wy::_strnum(tnn,&endptr,WyCSeg(buf,4),0))!=Wym_EBADMSG) {       WY_THROW(r);     }     if(endptr-buf!=2) {       WY_THROW( WyRet() );     }     if(tnn!=0) {       WY_THROW( WyRet() );     }     tnn=99;     if((r=Wy::_strnum(tnn,&endptr,WyCSeg(buf,4),16))!=Wym_EBADMSG) {       WY_THROW(r);     }     if(endptr-buf!=2) {       WY_THROW( WyRet() );     }     if(tnn!=0) {       WY_THROW( WyRet() );     }       buf="-0xx";     radix=0;     tnn=99;     if((r=Wy::_strnum(tnn,&endptr,WyCSeg(buf,4),radix))!=Wym_EBADMSG) {       WY_THROW(r);     }     if(endptr-buf!=2) {       WY_THROW( WyRet() );     }     if(tnn!=0) {       WY_THROW( WyRet() );     }     radix=0;     tnn=99;     if((r=Wy::_strnum(tnn,&endptr,WyCSeg(buf,4),radix))!=Wym_EBADMSG) {       WY_THROW(r);     }     if(endptr-buf!=2) {       WY_THROW( WyRet() );     }     if(tnn!=0) {       WY_THROW( WyRet() );     }     radix=16;     if((r=Wy::_strnum(tnn,&endptr,WyCSeg(buf,4),radix))!=Wym_EBADMSG) {       WY_THROW(r);     }     if(endptr-buf!=2) {       WY_THROW( WyRet() );     }     if(tnn!=0) {       WY_THROW( WyRet() );     }     if(radix!=16) {       WY_THROW( WyRet() );     }       buf="-0xg";     radix=0;     tnn=99;     if((r=Wy::_strnum(tnn,&endptr,WyCSeg(buf,4),radix))!=Wym_EBADMSG) {       WY_THROW(r);     }     if(endptr-buf!=2) {       WY_THROW( WyRet() );     }     if(tnn!=0) {       WY_THROW( WyRet() );     }     tnn=99;     radix=0;     if((r=Wy::_strnum(tnn,&endptr,WyCSeg(buf,4),radix))!=Wym_EBADMSG) {       WY_THROW(r);     }     if(endptr-buf!=2) {       WY_THROW( WyRet() );     }     if(tnn!=0) {       WY_THROW( WyRet() );     }     radix=0;     if((r=Wy::_strnum(tnn,&endptr,WyCSeg(buf,4),radix))!=Wym_EBADMSG) {       WY_THROW(r);     }     if(endptr-buf!=2) {       WY_THROW( WyRet() );     }     if(tnn!=0) {       WY_THROW( WyRet() );     }     radix=16;     if((r=Wy::_strnum(tnn,&endptr,WyCSeg(buf,4),radix))!=Wym_EBADMSG) {       WY_THROW(r);     }     if(endptr-buf!=2) {       WY_THROW( WyRet() );     }     if(tnn!=0) {       WY_THROW( WyRet() );     }     if(radix!=16) {       WY_THROW( WyRet() );     }       buf="-0xfg";     tnn=99;     if((r=Wy::_strnum(tnn,&endptr,WyCSeg(buf,5),16))!=Wym_EBADMSG) {       WY_THROW(r);     }     if(endptr-buf!=4) {       WY_THROW( WyRet() );     }     if(tnn+0xf!=0) {          // compiler complains "tnn!=-0xf"       WY_THROW( WyRet() );     }     if(radix!=16) {       WY_THROW( WyRet() );     }     if((r=Wy::_strnum(tnn,&endptr,WyCSeg("-fffffffffffffffffffffff"),16))!=Wym_ERANGE) {       WY_THROW(r);     }     if(endptr-buf<(int)(2*sizeof(NumType))) {       WY_THROW( WyRet() );     }     if(tnn>0) {       WY_THROW( WyRet() );     }   } }};template <typename NumT>static void ck_sqrt(void){ if(std::numeric_limits<NumT>::is_signed) {   return; } if(Wy::_sqrt(NumT(0))!=0) {   WY_THROW( WyRet() ); } if(Wy::_sqrt(NumT(1))!=1) {   WY_THROW( WyRet() ); }

⌨️ 快捷键说明

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