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

📄 istmit_test.cpp

📁 symbian 上的stl_port进过编译的。
💻 CPP
字号:
#include <algorithm>#if !defined (STLPORT) || !defined (_STLP_USE_NO_IOSTREAMS)#  include <sstream>#  include <functional>#  include <iterator>#  include <vector>#  include <string>#endif#include "cppunit/cppunit_proxy.h"#if !defined (STLPORT) || defined(_STLP_USE_NAMESPACES)using namespace std;#endif//// TestCase class//class IStreamIteratorTest : public CPPUNIT_NS::TestCase{  CPPUNIT_TEST_SUITE(IStreamIteratorTest);#if defined (STLPORT) && defined (_STLP_USE_NO_IOSTREAMS)  CPPUNIT_IGNORE;#endif  CPPUNIT_TEST(istmit1);#if !defined (STLPORT) || defined (_STLP_NO_EXTENSIONS)  CPPUNIT_IGNORE;#endif  CPPUNIT_TEST(copy_n_test);  CPPUNIT_TEST_SUITE_END();protected:  void istmit1();  void copy_n_test();};CPPUNIT_TEST_SUITE_REGISTRATION(IStreamIteratorTest);#if !defined (STLPORT) || !defined (_STLP_USE_NO_IOSTREAMS)#  if !defined (STLPORT) || !defined (_STLP_LIMITED_DEFAULT_TEMPLATES)typedef istream_iterator<char> istream_char_ite;typedef istream_iterator<int> istream_int_ite;typedef istream_iterator<string> istream_string_ite;#  elsetypedef istream_iterator<char, ptrdiff_t> istream_char_ite;typedef istream_iterator<int, ptrdiff_t> istream_int_ite;typedef istream_iterator<string, ptrdiff_t> istream_string_ite;#  endif#endif//// tests implementation//void IStreamIteratorTest::istmit1(){#if !defined (STLPORT) || !defined (_STLP_USE_NO_IOSTREAMS)  const char* buff = "MyString";  istringstream istr(buff);  char buffer[100];  size_t i = 0;  istr.unsetf(ios::skipws); // Disable white-space skipping.  istream_char_ite s(istr), meos;  while (!(s == meos)  &&  //*TY 01/10/1999 - added end of stream check  // NOTE operator!= should not be used here ifndef _STLP_FUNCTION_TMPL_PARTIAL_ORDER         (*s != '\n') &&         (i < sizeof(buffer) / sizeof(buffer[0]))) {  //*TY 07/28/98 - added index check    buffer[i++] = *s++;  }  buffer[i] = '\0'; // Null terminate buffer.  CPPUNIT_ASSERT(!strcmp(buffer, buff));  {    istringstream empty_istr;    CPPUNIT_ASSERT( istream_char_ite(empty_istr) == istream_char_ite() );  }#endif}void IStreamIteratorTest::copy_n_test(){#if defined (STLPORT) && !defined (_STLP_NO_EXTENSIONS) && !defined (_STLP_USE_NO_IOSTREAMS)  //This test check that no character is lost while reading the istream  //through a istream_iterator.  {    istringstream istr("aabbcd");    string chars;    istream_char_ite ite = copy_n(copy_n(istream_char_ite(istr),                                         2, back_inserter(chars)).first,                                  2, back_inserter(chars)).first;    CPPUNIT_ASSERT( chars == "aabb" );    copy_n(ite, 2, back_inserter(chars));    CPPUNIT_ASSERT( chars == "aabbcd" );  }  {    istringstream istr("11 22 AA BB 33 44 CC DD");    vector<int> ints;    vector<string> strings;    copy_n(istream_int_ite(istr), 2, back_inserter(ints));    CPPUNIT_ASSERT( ints.size() == 2 );    CPPUNIT_ASSERT( ints[0] == 11 );    CPPUNIT_ASSERT( ints[1] == 22 );    ints.clear();    istr.clear();    copy_n(istream_string_ite(istr), 2, back_inserter(strings));    CPPUNIT_ASSERT( strings.size() == 2 );    CPPUNIT_ASSERT( strings[0] == "AA" );    CPPUNIT_ASSERT( strings[1] == "BB" );    strings.clear();    istr.clear();    /* The following code cannot work, '33' is extracted as a string     * in the previous copy_n call, this value is returned in the pair     * returned by copy_n but is lost as this istream_iterator is not used.     * copy_n and istream_iterator can only be combined safely if:     * - you always extract the same type of istream_iterator and you always reuse     * the istream_iterator returned by copy_n (see previous test with "aabbcd")     * - you extract different type of object and no object is convertible to an other     * as in this current test when you extract int and string (when you extract ints     * again it fails as int can be converted to strings.     *    copy_n(istream_int_ite(istr), 2, back_inserter(ints));    CPPUNIT_ASSERT( ints.size() == 2 );    CPPUNIT_ASSERT( ints[0] == 33 );    CPPUNIT_ASSERT( ints[1] == 44 );    istr.clear();    copy_n(istream_string_ite(istr), 2, back_inserter(strings));    CPPUNIT_ASSERT( strings.size() == 2 );    CPPUNIT_ASSERT( strings[0] == "CC" );    CPPUNIT_ASSERT( strings[1] == "DD" );    */  }  {    istringstream is("1 2 3 4 5 6 7 8 9 10");    vector<int> ints;    istream_iterator<int> itr(is);    itr = copy_n(itr, 0, back_inserter(ints)).first;    CPPUNIT_ASSERT( ints.empty() );    itr = copy_n(itr, -1, back_inserter(ints)).first;    CPPUNIT_ASSERT( ints.empty() );    itr = copy_n(itr, 2, back_inserter(ints)).first;    CPPUNIT_ASSERT( ints.size() == 2 );    CPPUNIT_ASSERT( ints[0] == 1 );    CPPUNIT_ASSERT( ints[1] == 2 );    itr = copy_n(itr, 2, back_inserter(ints)).first;    CPPUNIT_ASSERT( ints.size() == 4 );    CPPUNIT_ASSERT( ints[2] == 3 );    CPPUNIT_ASSERT( ints[3] == 4 );    itr = copy_n(itr, 2, back_inserter(ints)).first;    CPPUNIT_ASSERT( ints.size() == 6 );    CPPUNIT_ASSERT( ints[4] == 5 );    CPPUNIT_ASSERT( ints[5] == 6 );  }#endif}

⌨️ 快捷键说明

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