📄 chk_sockaddrinet4.cpp
字号:
/* Copyright is licensed under GNU LGPL. by I.J.Wang 2003 Check WySockAddrINet4 public members Build: make chk_sockaddrlocal Note: Test data files should exist in the working directory Files may be created in the working directory and unlinked*/#include "wysockaddrinet4.h"#include "wy_atdestroy.h"#include <memory>#include <iostream>#if WYSOCKADDRINET_VERSION!=31#error Test code is for WYSOCKADDRINET_VERSION 31#endifstatic bool equ(const WySockAddrINet4::IPAddr& a1, const ::in_addr& a2){ return ::memcmp(&a1.wy_addr_ref(),&a2,sizeof(::in_addr))==0;};// Check WySockAddrINet4::IPAddr//static void chk_ipaddr(void){ WyRet r; // IPAddr(),IPAddr(const IPAddr&),IPAddr(const ::in_addr&),.. { WySockAddrINet4::IPAddr tmp1; ::in_addr ina( tmp1.c_addr() ); if(ina.s_addr!=INADDR_ANY) { WY_THROW( WyRet() ); } if(equ(tmp1,ina)==false) { WY_THROW( WyRet() ); } if(tmp1.is_default()==false) { WY_THROW( WyRet() ); } WySockAddrINet4::IPAddr tmp2(tmp1); if(equ(tmp2,ina)==false) { WY_THROW( WyRet() ); } if(tmp1!=tmp2) { WY_THROW( WyRet() ); } if(tmp1==tmp2) { } else { WY_THROW( WyRet() ); } if(tmp2.is_default()==false) { WY_THROW( WyRet() ); } WySockAddrINet4::IPAddr tmp3(ina); if(equ(tmp3,ina)==false) { WY_THROW( WyRet() ); } if(tmp3!=tmp1) { WY_THROW( WyRet() ); } if(tmp3.is_default()==false) { WY_THROW( WyRet() ); } WySockAddrINet4::IPAddr tmp4("0.0.0.0"); if(equ(tmp4,ina)==false) { WY_THROW( WyRet() ); } if(tmp4!=tmp1) { WY_THROW( WyRet() ); } if(tmp4.is_default()==false) { WY_THROW( WyRet() ); } WySockAddrINet4::IPAddr tmp5( WyStr("0.0.0.0") ); if(equ(tmp5,ina)==false) { WY_THROW( WyRet() ); } if(tmp5!=tmp1) { WY_THROW( WyRet() ); } if(tmp5.is_default()==false) { WY_THROW( WyRet() ); } WySockAddrINet4::IPAddr tmp6(uint32_t(0)); if(equ(tmp6,ina)==false) { WY_THROW( WyRet() ); } if(tmp6!=tmp1) { WY_THROW( WyRet() ); } if(tmp6.is_default()==false) { WY_THROW( WyRet() ); } } // notation { WySockAddrINet4::IPAddr tmp; WyStr str,str2; if((r=tmp.notation(str))!=Ok) { WY_THROW(r); } if(str!="0.0.0.0") { WY_THROW( WyRet() ); } if((r=tmp.notation(str2))!=Ok) { WY_THROW(r); } if(str2!=str) { WY_THROW( WyRet() ); } if(Wy::wrd(tmp)!=str) { WY_THROW( WyRet() ); } WySockAddrINet4::IPAddr tmp2("1.2.3.4"); if((r=tmp2.notation(str))!=Ok) { WY_THROW(r); } if(str!="1.2.3.4") { WY_THROW( WyRet() ); } if((r=tmp2.notation(str2))!=Ok) { WY_THROW(r); } if(str2!=str) { WY_THROW( WyRet() ); } if(Wy::wrd(tmp2)!=str) { WY_THROW( WyRet() ); } WySockAddrINet4::IPAddr tmp3(uint32_t(0x1ff)); if((r=tmp3.notation(str))!=Ok) { WY_THROW(r); } if(str!="0.0.1.255") { WY_THROW( WyRet() ); } if((r=tmp3.notation(str2))!=Ok) { WY_THROW(r); } if(str2!=str) { WY_THROW( WyRet() ); } if(Wy::wrd(tmp3)!=str) { WY_THROW( WyRet() ); } } // reset() { const char* AName="2.3.4.5"; const WySockAddrINet4::IPAddr Tmp1,Tmp2(AName); WySockAddrINet4::IPAddr tmp; ::in_addr ina; tmp.reset(); if(tmp.is_default()==false) { WY_THROW( WyRet() ); } tmp.reset(Tmp1); if(tmp.is_default()==false) { WY_THROW( WyRet() ); } tmp.reset(Tmp2); if(tmp!=Tmp2) { WY_THROW( WyRet() ); } tmp.reset(); if(tmp.is_default()==false) { WY_THROW( WyRet() ); } ina=Tmp2.c_addr(); tmp.reset(ina); if(tmp!=ina) { WY_THROW( WyRet() ); } tmp.reset(AName); if(tmp.is_default()) { WY_THROW( WyRet() ); } if(tmp!=Tmp2) { WY_THROW( WyRet() ); } tmp.reset( WyStr(AName) ); if(tmp.is_default()) { WY_THROW( WyRet() ); } if(tmp!=Tmp2) { WY_THROW( WyRet() ); } tmp.reset(0x02030405); if(tmp.is_default()) { WY_THROW( WyRet() ); } if(tmp!=Tmp2) { WY_THROW( WyRet() ); } } { const WySockAddrINet4::IPAddr Tmp1,Tmp2("6.6.126.6"); WySockAddrINet4::IPAddr tmp1(Tmp1),tmp2(Tmp2); tmp1.swap(tmp2); if(tmp1!=Tmp2) { WY_THROW( WyRet() ); } if(tmp2!=Tmp1) { WY_THROW( WyRet() ); } tmp2.swap(tmp2); if(tmp2!=Tmp1) { WY_THROW( WyRet() ); } WyStr str; if((r=Tmp2.notation(str))!=Ok) { WY_THROW( WyRet() ); } if(str!="6.6.126.6") { WY_THROW( WyRet() ); } if(Wy::wrd(Tmp2)!=str) { WY_THROW( WyRet() ); } } { const WySockAddrINet4::IPAddr Tmp1,Tmp2("0.5.6.7"); WySockAddrINet4::IPAddr tmp; tmp=Tmp2; if(tmp!=Tmp2) { WY_THROW( WyRet() ); } tmp=Tmp1; if(tmp!=Tmp1) { WY_THROW( WyRet() ); } } // operator ==/!= { const WyStr IpStr("1.2.6.4"); const WySockAddrINet4::IPAddr Tmp1,Tmp2(IpStr); uint32_t InAddrAny=INADDR_ANY; if(Tmp2==Tmp2) { } else { WY_THROW( WyRet() ); } if(Tmp2!=Tmp2) { WY_THROW( WyRet() ); } if(InAddrAny==Tmp1) { } else { WY_THROW( WyRet() ); } if(InAddrAny!=Tmp1) { WY_THROW( WyRet() ); } if(IpStr==Tmp2) { } else { WY_THROW( WyRet() ); } if(IpStr!=Tmp2) { WY_THROW( WyRet() ); } if(IpStr.c_str()==Tmp2) { } else { WY_THROW( WyRet() ); } if(IpStr.c_str()!=Tmp2) { WY_THROW( WyRet() ); } } // chk error { try { WySockAddrINet4::IPAddr tmp("xxx"); tmp.reset(); // supress unused warning WY_THROW( WyRet() ); } catch(const WySockAddrINet4::IPAddr::Reply& e) { if(e!=Wym_EADDRNOTAVAIL) { throw; } // FALLTHROUGH }; }; // chk error { try { WySockAddrINet4::IPAddr tmp( WyStr("xxx") ); tmp.reset(); // supress unused warning WY_THROW( WyRet() ); } catch(const WySockAddrINet4::IPAddr::Reply& e) { if(e!=Wym_EADDRNOTAVAIL) { throw; } // FALLTHROUGH }; { WySockAddrINet4::IPAddr tmp; if((r=tmp.reset("xxy"))!=Wym_EADDRNOTAVAIL) { WY_THROW(r); } if((r=tmp.reset(WyStr("xxy")))!=Wym_EADDRNOTAVAIL) { WY_THROW(r); } } } // chk error ==/!= (const char*) { WySockAddrINet4::IPAddr tmp; if(tmp==(const char*)0) { WY_THROW( WyRet() ); } if(tmp!=(const char*)0) { } else { WY_THROW( WyRet() ); } } // chk error ==/!= (const WyStr&) { WySockAddrINet4::IPAddr tmp; if(tmp==WyStr()) { WY_THROW( WyRet() ); } if(tmp!=WyStr()) { } else { WY_THROW( WyRet() ); } if(tmp==(const char*)0) { WY_THROW( WyRet() ); } if(tmp!=(const char*)0) { } else { WY_THROW( WyRet() ); } } // chk error ==/!=( const WyStr&,WySockAddrINet4::IPAddr) { WySockAddrINet4::IPAddr tmp; if(WyStr()==tmp) { WY_THROW( WyRet() ); } if(WyStr()!=tmp) { } else { WY_THROW( WyRet() ); } if((const char*)0==tmp) { WY_THROW( WyRet() ); } if((const char*)0!=tmp) { } else { WY_THROW( WyRet() ); } } // chk _alloc not override { class T : public WySockAddrINet4 { } tmp; Wy_SockAddr* p=tmp._alloc(r); if(r!=Wym_ENOSYS) { if(r==Ok) { delete p; } WY_THROW(r); } } // chk move ctor { const uint32_t TstIP=0x1a2b3c4d; char raw_buf[2*sizeof(WySockAddrINet4::IPAddr)]; ::memset(raw_buf,0,sizeof(raw_buf)); WySockAddrINet4::IPAddr* const p1( reinterpret_cast<WySockAddrINet4::IPAddr*>(raw_buf) ); WySockAddrINet4::IPAddr* const p2(p1+1); new(p1) WySockAddrINet4::IPAddr(TstIP); if((p1->is_default()==true)|| (p1->c_addr().s_addr!=htonl(TstIP)) ) { p1->WySockAddrINet4::IPAddr::~IPAddr(); WY_THROW(r); } // move *p1 to p2 try { new(p2) WySockAddrINet4::IPAddr(*p1,Wy::ByMove); } catch(...) { p1->WySockAddrINet4::IPAddr::~IPAddr(); throw; }; if((p2->is_default()==true)|| (p2->c_addr().s_addr!=htonl(TstIP)) ) { p2->WySockAddrINet4::IPAddr::~IPAddr(); WY_THROW(r); } p2->WySockAddrINet4::IPAddr::~IPAddr(); }};// Assert ff is default//static void assert_default(const WySockAddrINet4& ff){ static const WySockAddrINet4 Def_Obj; if(ff.is_default()==false) { WY_THROW( WyRet() ); } if(ff!=Def_Obj) { WY_THROW( WyRet() ); } if(ff==Def_Obj) { } else { WY_THROW( WyRet() ); } if(ff.port()!=0) { WY_THROW( WyRet() ); } if(ff.ip()!=INADDR_ANY) { WY_THROW( WyRet() ); }};static void assert_not_default(const WySockAddrINet4& ff){ static const WySockAddrINet4 Def_Obj; if(ff.is_default()) { WY_THROW( WyRet() ); } if(ff==Def_Obj) { WY_THROW( WyRet() ); } if(ff!=Def_Obj) { } else { WY_THROW( WyRet() ); } if((ff.port()==0)&&(ff.ip()!=INADDR_ANY)) { WY_THROW( WyRet() ); } };static void assert_equ(const WySockAddrINet4& a1,const WySockAddrINet4& a2){ if(a1!=a2) { WY_THROW( WyRet() ); } if(a1.port()!=a2.port()) { WY_THROW( WyRet() ); } if(a1.ip()!=a2.ip()) { WY_THROW( WyRet() ); }};#define CHK_DEFAULT(p)\ try { assert_default(p); } catch(...) { WY_THROW( WyRet()); }#define CHK_NOT_DEFAULT(p)\ try { assert_not_default(p); } catch(...) { WY_THROW( WyRet()); }#define CHK_EQU(a1,a2)\ try { assert_equ((a1),(a2)); } catch(...) { WY_THROW( WyRet()); }// Check basic operations on default object//static void t1(void){ WyRet r; // constructor { WySockAddrINet4 a0; CHK_DEFAULT(a0); WySockAddrINet4 a1(a0); CHK_DEFAULT(a0); CHK_DEFAULT(a1); CHK_EQU(a0,a1); WySockAddrINet4 a2(1,2); if(a2.is_default()) { WY_THROW( WyRet() ); } if(a2.port()!=2) { WY_THROW( WyRet() ); } if(a2.ip()!=1) { WY_THROW( WyRet() ); } WySockAddrINet4 a3("1.2.3.4",9); if(a3.is_default()) { WY_THROW( WyRet() ); } if(a3.port()!=9) { WY_THROW( WyRet() ); } if(a3.ip()!=WySockAddrINet4::IPAddr(0x01020304)) {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -