offset_ptr_test.cpp

来自「Boost provides free peer-reviewed portab」· C++ 代码 · 共 193 行

CPP
193
字号
////////////////////////////////////////////////////////////////////////////////// (C) Copyright Ion Gaztanaga 2007. Distributed under the Boost// Software License, Version 1.0. (See accompanying file// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)//// See http://www.boost.org/libs/interprocess for documentation.////////////////////////////////////////////////////////////////////////////////#include <boost/interprocess/detail/config_begin.hpp>#include <boost/interprocess/offset_ptr.hpp>#include <boost/interprocess/detail/type_traits.hpp>using namespace boost::interprocess;bool test_types_and_convertions(){   typedef offset_ptr<int>                pint_t;   typedef offset_ptr<const int>          pcint_t;   typedef offset_ptr<volatile int>       pvint_t;   typedef offset_ptr<const volatile int> pcvint_t;   if(!detail::is_same<pint_t::value_type, int>::value)      return false;   if(!detail::is_same<pcint_t::value_type, const int>::value)      return false;   if(!detail::is_same<pvint_t::value_type, volatile int>::value)      return false;   if(!detail::is_same<pcvint_t::value_type, const volatile int>::value)      return false;   int dummy_int = 9;   {  pint_t pint(&dummy_int);   pcint_t  pcint(pint);      if(pcint.get()  != &dummy_int)   return false;  }   {  pint_t pint(&dummy_int);   pvint_t  pvint(pint);      if(pvint.get()  != &dummy_int)   return false;  }   {  pint_t pint(&dummy_int);   pcvint_t  pcvint(pint);      if(pcvint.get()  != &dummy_int)  return false;  }   {  pcint_t pcint(&dummy_int); pcvint_t  pcvint(pcint);         if(pcvint.get()  != &dummy_int)  return false;  }   {  pvint_t pvint(&dummy_int); pcvint_t  pcvint(pvint);      if(pcvint.get()  != &dummy_int)  return false;  }   pint_t   pint(0);   pcint_t  pcint(0);   pvint_t  pvint(0);   pcvint_t pcvint(0);      pint     = &dummy_int;   pcint    = &dummy_int;   pvint    = &dummy_int;   pcvint   = &dummy_int;   {   pcint  = pint;   if(pcint.get() != &dummy_int)   return false;  }   {   pvint  = pint;   if(pvint.get() != &dummy_int)   return false;  }   {   pcvint = pint;   if(pcvint.get() != &dummy_int)  return false;  }   {   pcvint = pcint;  if(pcvint.get() != &dummy_int)  return false;  }   {   pcvint = pvint;  if(pcvint.get() != &dummy_int)  return false;  }   if(!pint)      return false;   pint = 0;   if(pint)      return false;   return true;}bool test_arithmetic(){   typedef offset_ptr<int> pint_t;   const int NumValues = 5;   int values[NumValues];      //Initialize p   pint_t p = values;   if(p.get() != values)      return false;   //Initialize p + NumValues   pint_t pe = &values[NumValues];   if(pe == p)      return false;   if(pe.get() != &values[NumValues])      return false;   //ptr - ptr   if((pe - p) != NumValues)      return false;   //ptr - integer   if((pe - NumValues) != p)      return false;   //ptr + integer   if((p + NumValues) != pe)      return false;   //integer + ptr   if((NumValues + p) != pe)      return false;   //indexing   if(pint_t(&p[NumValues])   != pe)      return false;   if(pint_t(&pe[-NumValues]) != p)      return false;   //ptr -= integer   pint_t p0 = pe;   p0-= NumValues;   if(p != p0)      return false;   //ptr += integer   pint_t penew = p0;   penew += NumValues;   if(penew != pe)      return false;   //++ptr   penew = p0;   for(int j = 0; j != NumValues; ++j, ++penew);   if(penew != pe)      return false;   //--ptr   p0 = pe;   for(int j = 0; j != NumValues; ++j, --p0);   if(p != p0)      return false;   //ptr++   penew = p0;   for(int j = 0; j != NumValues; ++j){      pint_t p = penew;      if(p != penew++)         return false;   }   //ptr--   p0 = pe;   for(int j = 0; j != NumValues; ++j){      pint_t p = p0;      if(p != p0--)         return false;   }   return true;}bool test_comparison(){   typedef offset_ptr<int> pint_t;   const int NumValues = 5;   int values[NumValues];   //Initialize p   pint_t p = values;   if(p.get() != values)      return false;   //Initialize p + NumValues   pint_t pe = &values[NumValues];   if(pe == p)      return false;   if(pe.get() != &values[NumValues])      return false;   //operators   if(p == pe)      return false;   if(p != p)      return false;   if(!(p < pe))      return false;   if(!(p <= pe))      return false;   if(!(pe > p))      return false;   if(!(pe >= p))      return false;   return true;}int main(){   if(!test_types_and_convertions())      return 1;   if(!test_arithmetic())      return 1;   if(!test_comparison())      return 1;   return 0;}#include <boost/interprocess/detail/config_end.hpp>

⌨️ 快捷键说明

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