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 + -
显示快捷键?