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

📄 chk_sockaddrinet6.cpp

📁 一个不错
💻 CPP
📖 第 1 页 / 共 2 页
字号:
/* Copyright is licensed under GNU LGPL.                 by I.J.Wang 2005   Check WySockAddrINet6 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 "wysockaddrinet6.h"#include "wy_atdestroy.h"#include <memory>#include <iostream>#if WYSOCKADDRINET6_VERSION!=31#error Test code is for WYSOCKADDRINET6_VERSION 31#endifstatic bool equ(const WySockAddrINet6::IPAddr& a1, const ::in6_addr& a2){  return ::memcmp(&a1.wy_addr_ref(),&a2,sizeof(::in6_addr))==0;};static bool equ(const WySockAddrINet6& a1, const ::sockaddr_in6& a2){ if(a2.sin6_family!=AF_INET6) {   return(false); } if(a1.port()!=ntohs(a2.sin6_port)) {   return(false); } if(a1._flowinfo()!=ntohl(a2.sin6_flowinfo)) {   return(false); } if(a1._scope_id()!=ntohl(a2.sin6_scope_id)) {   return(false); } return ::memcmp(&a1.ip().wy_addr_ref(),&a2.sin6_addr,sizeof(::in6_addr))==0;};// Check WySockAddrINet6::IPAddr//static void chk_ipaddr(void){ WyRet r; // IPAddr(),IPAddr(const IPAddr&),IPAddr(const ::in6_addr&),.. {  WySockAddrINet6::IPAddr tmp1;  ::in6_addr in6( tmp1.c_addr() );  if(equ(tmp1,::in6addr_any)==false) {    WY_THROW( WyRet() );  }  if(equ(tmp1,in6)==false) {    WY_THROW( WyRet() );  }  if(tmp1.is_default()==false) {    WY_THROW( WyRet() );  }  WySockAddrINet6::IPAddr tmp2(tmp1);  if(equ(tmp2,::in6addr_any)==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() );  }  WySockAddrINet6::IPAddr tmp3(in6);  if(equ(tmp3,::in6addr_any)==false) {    WY_THROW( WyRet() );  }  if(tmp3!=tmp1) {    WY_THROW( WyRet() );  }  if(tmp3.is_default()==false) {    WY_THROW( WyRet() );  }  WySockAddrINet6::IPAddr tmp4("::");  if(equ(tmp4,::in6addr_any)==false) {    WY_THROW( WyRet() );  }  if(tmp4!=tmp1) {    WY_THROW( WyRet() );  }  if(tmp4.is_default()==false) {    WY_THROW( WyRet() );  }  WySockAddrINet6::IPAddr tmp5( WyStr("::") );  if(equ(tmp5,::in6addr_any)==false) {    WY_THROW( WyRet() );  }  if(tmp5!=tmp1) {    WY_THROW( WyRet() );  }  if(tmp5.is_default()==false) {    WY_THROW( WyRet() );  } } // notation {   WySockAddrINet6::IPAddr tmp;   WyStr str,str2;   if((r=tmp.notation(str))!=Ok) {     WY_THROW(r);   }   if(str!="::") {     WY_THROW( WyRet() );   }   if((r=tmp.notation(str2))!=Ok) {     WY_THROW(r);   }   if(str2!=str) {     WY_THROW(r);   }   if(Wy::wrd(tmp)!=str) {     WY_THROW( WyRet() );   }   WySockAddrINet6::IPAddr tmp2("1:2::3");   if((r=tmp2.notation(str))!=Ok) {     WY_THROW(r);   }   if(str!="1:2::3") {    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() );   } } // reset() {   const char* AName="::5";   const WySockAddrINet6::IPAddr Tmp1,Tmp2(AName);   WySockAddrINet6::IPAddr tmp;   ::in6_addr in6;   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() );   }   in6=Tmp2.c_addr();   tmp.reset(in6);   if(tmp!=in6) {     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() );   } } {   WyRet r;   const WySockAddrINet6::IPAddr Tmp1,Tmp2("::6");   WySockAddrINet6::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,str2;   if((r=Tmp2.notation(str))!=Ok) {     WY_THROW( WyRet() );   }   if(str!="::6") {     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() );   } } // operator = {   const WySockAddrINet6::IPAddr Tmp1,Tmp2("::6");   WySockAddrINet6::IPAddr tmp;   tmp=Tmp2;   if(tmp!=Tmp2) {     WY_THROW( WyRet() );   }   tmp=Tmp1;   if(tmp!=Tmp1) {     WY_THROW( WyRet() );   } } // operator ==/!= {   const WyStr IpAddr("::6");   const WySockAddrINet6::IPAddr Tmp1,Tmp2(IpAddr);   ::in6_addr InAddrAny=::in6addr_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(Tmp2==IpAddr) {   } else {     WY_THROW( WyRet() );   }   if(Tmp2!=IpAddr) {     WY_THROW( WyRet() );   }   if(Tmp2==IpAddr.c_str()) {   } else {     WY_THROW( WyRet() );   }   if(Tmp2!=IpAddr.c_str()) {     WY_THROW( WyRet() );   }   if(IpAddr==Tmp2) {   } else {     WY_THROW( WyRet() );   }   if(IpAddr!=Tmp2) {     WY_THROW( WyRet() );   }   if(IpAddr.c_str()==Tmp2) {   } else {     WY_THROW( WyRet() );   }   if(IpAddr.c_str()!=Tmp2) {     WY_THROW( WyRet() );   } } // chk error ==/!= (const char*) (const WyStr&) {  WySockAddrINet6::IPAddr addr;  if(addr==WyStr()) {    WY_THROW( WyRet() );  }  if(addr!=WyStr()) {  } else {    WY_THROW( WyRet() );  }  if(addr==(const char*)0) {    WY_THROW( WyRet() );  }  if(addr!=(const char*)0) {  } else {    WY_THROW( WyRet() );  }  if(WyStr()==addr) {    WY_THROW( WyRet() );  }  if(WyStr()!=addr) {  } else {    WY_THROW( WyRet() );  }  if((const char*)0==addr) {    WY_THROW( WyRet() );  }  if((const char*)0!=addr) {  } else {    WY_THROW( WyRet() );  } } // chk error {   try {     WySockAddrINet6::IPAddr tmp( WyStr("xxx") );     tmp.reset();          // supress unused warning     WY_THROW( WyRet() );   }   catch(const WySockAddrINet6::IPAddr::Reply& e) {     if(e!=Wym_EADDRNOTAVAIL) {       throw;     }     // FALLTHROUGH   };   try {     WySockAddrINet6::IPAddr tmp("xxx");     tmp.reset();          // supress unused warning     WY_THROW( WyRet() );   }   catch(const WySockAddrINet6::IPAddr::Reply& e) {     if(e!=Wym_EADDRNOTAVAIL) {       throw;     }     // FALLTHROUGH   };   {     WySockAddrINet6::IPAddr tmp;     if((r=tmp.reset("xxy"))!=Wym_EADDRNOTAVAIL) {       WY_THROW(r);     }     if((r=tmp.reset(WyStr("xxy")))!=Wym_EADDRNOTAVAIL) {       WY_THROW(r);     }   } } // chk move ctor {  const WySockAddrINet6::IPAddr TstIP("::5");  char raw_buf[2*sizeof(WySockAddrINet6::IPAddr)];  ::memset(raw_buf,0,sizeof(raw_buf));  WySockAddrINet6::IPAddr* const p1( reinterpret_cast<WySockAddrINet6::IPAddr*>(raw_buf) );  WySockAddrINet6::IPAddr* const p2(p1+1);  new(p1) WySockAddrINet6::IPAddr(TstIP);  if((p1->is_default()==true)||     (p1->c_addr()!=TstIP.c_addr()) ) {    p1->WySockAddrINet6::IPAddr::~IPAddr();    WY_THROW(r);  }  // move *p1 to p2  try {    new(p2) WySockAddrINet6::IPAddr(*p1,Wy::ByMove);  }  catch(...) {    p1->WySockAddrINet6::IPAddr::~IPAddr();    throw;  };  if((p2->is_default()==true)||     (p2->c_addr()!=TstIP.c_addr()) ) {    p2->WySockAddrINet6::IPAddr::~IPAddr();    WY_THROW(r);  }  p2->WySockAddrINet6::IPAddr::~IPAddr(); }};// Assert ff is default//static void assert_default(const WySockAddrINet6& ff){ static const WySockAddrINet6 Def_Obj; //WyRet r; 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.ip().is_default()==false) {   WY_THROW( WyRet() ); } if(ff.ip().c_addr()!=::in6addr_any) {   WY_THROW( WyRet() ); } if(ff.port()!=0) {   WY_THROW( WyRet() ); } if(ff._flowinfo()!=0) {   WY_THROW( WyRet() ); } if(ff._scope_id()!=0) {   WY_THROW( WyRet() ); }};static void assert_not_default(const WySockAddrINet6& ff){ static const WySockAddrINet6 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().is_default())) {   WY_THROW( WyRet() ); }};static void assert_equ(const WySockAddrINet6& a1,const WySockAddrINet6& a2){ if(a1!=a2) {   WY_THROW( WyRet() ); } if(a1.port()!=a2.port()) {   WY_THROW( WyRet() ); } if(a1.ip()!=a2.ip()) {   WY_THROW( WyRet() ); } if(a1._flowinfo()!=a2._flowinfo()) {   WY_THROW( WyRet() ); } if(a1._scope_id()!=a2._scope_id()) {   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 {   WySockAddrINet6 a0;   CHK_DEFAULT(a0);   WySockAddrINet6 a1(a0);   CHK_DEFAULT(a0);   CHK_DEFAULT(a1);   CHK_EQU(a0,a1);      WySockAddrINet6 a2("::1",2);   if(a2.is_default()) {     WY_THROW( WyRet() );   }   if(a2.port()!=2) {     WY_THROW( WyRet() );   }   if(a2.ip()!="::1") {     WY_THROW( WyRet() );   }   if(a2._flowinfo()!=0) {     WY_THROW( WyRet() );   }   if(a2._scope_id()!=0) {     WY_THROW( WyRet() );   }   WySockAddrINet6 a3((const char*)"1:2:3::4",9);   if(a3.is_default()) {     WY_THROW( WyRet() );   }   if(a3.ip().is_default()) {     WY_THROW( WyRet() );   }   if(a3.port()!=9) {     WY_THROW( WyRet() );   }   if(a3._flowinfo()!=0) {     WY_THROW( WyRet() );   }   if(a3._scope_id()!=0) {     WY_THROW( WyRet() );   }   WySockAddrINet6 a4(a3);   CHK_EQU(a3,a4); } // chk ops(const ::sockaddr_in6&) {   struct ::sockaddr_in6 saddr;   const uint16_t PortNum=2467;   const ::in6_addr IP6={{{1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}}};   saddr.sin6_family=AF_INET6;   saddr.sin6_addr=IP6;   saddr.sin6_port=PortNum;   saddr.sin6_flowinfo=35;   saddr.sin6_scope_id=53;   WySockAddrINet6 tmp(saddr);   if(equ(tmp,saddr)==false) {     WY_THROW( WyRet() );   }   WySockAddrINet6 tmp2;   CHK_DEFAULT(tmp2);   tmp2.reset(saddr);   if(equ(tmp2,saddr)==false) {     WY_THROW( WyRet() );   }   CHK_EQU(tmp,tmp2);   WySockAddrINet6 tmp3;   CHK_DEFAULT(tmp3);   tmp3=saddr;   if(equ(tmp3,saddr)==false) {     WY_THROW( WyRet() );   }   CHK_EQU(tmp2,tmp3);   if(tmp3==saddr) {   } else {     WY_THROW( WyRet() );   }

⌨️ 快捷键说明

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