bufferstream_test.cpp

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

CPP
134
字号
////////////////////////////////////////////////////////////////////////////////// (C) Copyright Ion Gaztanaga 2006. 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/streams/bufferstream.hpp>#include <sstream>#include <cstring>using namespace boost::interprocess;//Force instantiations to catch compile-time errorstemplate class basic_bufferbuf<char>;template class basic_bufferstream<char>;template class basic_ibufferstream<char>;template class basic_obufferstream<char>;static int bufferstream_test(){   //Static big enough buffer   {      const int BufSize = 10001;      //This will be zero-initialized      static char buffer [BufSize];      bufferstream bufstream;;      std::stringstream std_stringstream;      std::string str1, str2, str3("testline:");      int number1, number2;      //Make sure we have null in the last byte      bufstream.buffer(buffer, BufSize-1);      for(int i = 0; i < 100; ++i){         bufstream         << "testline: " << i << std::endl;         std_stringstream  << "testline: " << i << std::endl;      }      if(std::strcmp(buffer, std_stringstream.str().c_str()) != 0){         return 1;      }      //We shouldn't have reached the end of the buffer writing      if(bufstream.bad()){         assert(0);         return 1;      }      bufstream.buffer(buffer, BufSize-1);      for(int i = 0; i < 100; ++i){         bufstream         >> str1 >> number1;         std_stringstream  >> str2 >> number2;         if((str1 != str2) || (str1 != str3)){            assert(0); return 1;           }         if((number1 != number2) || (number1 != i)){            assert(0); return 1;            }      }      //We shouldn't have reached the end of the buffer reading      if(bufstream.eof()){         assert(0);         return 1;      }   }   //Static small buffer. Check if buffer   //overflow protection works.   {      const int BufSize = 101;      //This will be zero-initialized      static char buffer [BufSize];      bufferstream bufstream;      std::stringstream std_stringstream;      std::string str1;      int number1;      //Make sure we have null in the last byte      bufstream.buffer(buffer, BufSize-1);      for(int i = 0; i < 100; ++i){         bufstream         << "testline: " << i << std::endl;         std_stringstream  << "testline: " << i << std::endl;      }           //Contents should be different      if(std::strcmp(buffer, std_stringstream.str().c_str()) == 0){         return 1;      }      //The stream shouldn't be in good health      if(bufstream.good()){         assert(0);         return 1;      }         //The bad flag should be active. This indicates overflow attempt      if(!bufstream.bad()){         assert(0);         return 1;      }      //Now let's test read overflow      bufstream.clear();      bufstream.buffer(buffer, BufSize-1);      for(int i = 0; i < 100; ++i){         bufstream         >> str1 >> number1;      }      //The stream shouldn't be in good health      if(bufstream.good()){         assert(0);         return 1;      }      //The eof flag indicates we have reached the end of the       //buffer while reading      if(!bufstream.eof()){         assert(0);         return 1;      }   }   return 0;}int main (){   if(bufferstream_test()==-1){      return 1;   }   return 0;}#include <boost/interprocess/detail/config_end.hpp>

⌨️ 快捷键说明

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