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

📄 rope_test.cpp

📁 symbian 上的stl_port进过编译的。
💻 CPP
字号:
//Small header to get STLport numerous defines:#include <utility>#if defined (STLPORT) && !defined (_STLP_NO_EXTENSIONS)#  include <rope>#  if !defined (_STLP_USE_NO_IOSTREAMS)#    include <sstream>#  endif#endif#include "cppunit/cppunit_proxy.h"// #include <stdlib.h> // for rand etc#if defined (_STLP_USE_NAMESPACES)using namespace std;#endif//// TestCase class//class RopeTest : public CPPUNIT_NS::TestCase{  CPPUNIT_TEST_SUITE(RopeTest);#if !defined (STLPORT) || defined (_STLP_NO_EXTENSIONS) || defined (_STLP_USE_NO_IOSTREAMS)  CPPUNIT_IGNORE;#endif  CPPUNIT_TEST(io);#if defined (_STLP_USE_NO_IOSTREAMS)  CPPUNIT_STOP_IGNORE;#endif  CPPUNIT_TEST(find1);  CPPUNIT_TEST(find2);  CPPUNIT_TEST(construct_from_char);  CPPUNIT_TEST(bug_report);#if !defined (_STLP_MEMBER_TEMPLATES)  CPPUNIT_IGNORE;#endif  CPPUNIT_TEST(test_saved_rope_iterators);  CPPUNIT_TEST_SUITE_END();protected:  void io();  void find1();  void find2();  void construct_from_char();  void bug_report();  void test_saved_rope_iterators();};CPPUNIT_TEST_SUITE_REGISTRATION(RopeTest);//// tests implementation//void RopeTest::io(){#if defined (STLPORT) && !defined (_STLP_NO_EXTENSIONS) && !defined (_STLP_USE_NO_IOSTREAMS)   char const* cstr = "rope test string";  crope rstr(cstr);  {    ostringstream ostr;    ostr << rstr;    CPPUNIT_ASSERT( ostr );    CPPUNIT_ASSERT( ostr.str() == cstr );  }#endif}void RopeTest::find1(){#if defined (STLPORT) && !defined (_STLP_NO_EXTENSIONS)   crope r("Fuzzy Wuzzy was a bear");  crope::size_type n = r.find( "hair" );  CPPUNIT_ASSERT( n == crope::npos );  n = r.find("ear");  CPPUNIT_ASSERT( n == (r.size() - 3) );#endif}void RopeTest::find2(){#if defined (STLPORT) && !defined (_STLP_NO_EXTENSIONS)   crope r("Fuzzy Wuzzy was a bear");  crope::size_type n = r.find( 'e' );  CPPUNIT_ASSERT( n == (r.size() - 3) );#endif}void RopeTest::construct_from_char(){#if defined (STLPORT) && !defined (_STLP_NO_EXTENSIONS)   crope r('1');  char const* s = r.c_str();  CPPUNIT_ASSERT( '1' == s[0] && '\0' == s[1] );#endif}// Test used for a bug report from Peter Hercekvoid RopeTest::bug_report(){#if defined (STLPORT) && !defined (_STLP_NO_EXTENSIONS)   //first create a rope bigger than crope::_S_copy_max = 23  // so that any string addition is added to a new leaf  crope evilRope("12345678901234567890123_");  //crope* pSevenCharRope( new TRope("1234567") );  crope sevenCharRope0("12345678");  crope sevenCharRope1("1234567");  // add _Rope_RopeRep<c,a>::_S_alloc_granularity-1 = 7 characters  evilRope += "1234567"; // creates a new leaf  crope sevenCharRope2("1234567");  // add one more character to the leaf  evilRope += '8'; // here is the write beyond the allocated memory  CPPUNIT_ASSERT( strcmp(sevenCharRope2.c_str(), "1234567") == 0 );#endif}#if defined (STLPORT) && !defined (_STLP_NO_EXTENSIONS)const char str[] = "ilcpsklryvmcpjnbpbwllsrehfmxrkecwitrsglrexvtjmxypu\nbqfgxmuvgfajclfvenhyuhuorjosamibdnjdbeyhkbsomblto\uujdrbwcrrcgbflqpottpegrwvgajcrgwdlpgitydvhedtusip\pyvxsuvbvfenodqasajoyomgsqcpjlhbmdahyviuemkssdslde\besnnngpesdntrrvysuipywatpfoelthrowhfexlwdysvspwlk\fblfdf";crope create_rope( int len ){   int l = len/2;   crope result;   if(l <= 2)   {      static int j = 0;      for(int i = 0; i < len; ++i)      {         // char c = 'a' + rand() % ('z' - 'a');         result.append(1, /* c */ str[j++] );         j %= sizeof(str);      }   }   else   {      result = create_rope(len/2);      result.append(create_rope(len/2));   }   return result;}#endifvoid RopeTest::test_saved_rope_iterators(){#if defined (STLPORT) && !defined (_STLP_NO_EXTENSIONS) && \    defined (_STLP_MEMBER_TEMPLATES)   //   // Try and create a rope with a complex tree structure:   //   // srand(0);   crope r = create_rope(300);   string expected(r.begin(), r.end());   CPPUNIT_ASSERT(expected.size() == r.size());   CPPUNIT_ASSERT(equal(expected.begin(), expected.end(), r.begin()));   crope::const_iterator i(r.begin()), j(r.end());   int pos = 0;   while(i != j)   {      crope::const_iterator k;      // This initial read triggers the bug:      CPPUNIT_ASSERT(*i);      k = i;      int newpos = pos;      // Now make sure that i is incremented into the next leaf:      while(i != j)      {         CPPUNIT_ASSERT(*i == expected[newpos]);         ++i;         ++newpos;      }      // Back up from stored value and continue:      i = k;      ++i;      ++pos;   }#endif}

⌨️ 快捷键说明

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