1// 2001-04-30 Benjamin Kosnik <bkoz@redhat.com> 2 3// Copyright (C) 2001 Free Software Foundation, Inc. 4// 5// This file is part of the GNU ISO C++ Library. This library is free 6// software; you can redistribute it and/or modify it under the 7// terms of the GNU General Public License as published by the 8// Free Software Foundation; either version 2, or (at your option) 9// any later version. 10 11// This library is distributed in the hope that it will be useful, 12// but WITHOUT ANY WARRANTY; without even the implied warranty of 13// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14// GNU General Public License for more details. 15 16// You should have received a copy of the GNU General Public License along 17// with this library; see the file COPYING. If not, write to the Free 18// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, 19// USA. 20 21// 24.5.4 template class ostreambuf_iterator 22 23#include <sstream> 24#include <iterator> 25#include <testsuite_hooks.h> 26 27void test01() 28{ 29 using namespace std; 30 31 // Check for required base class. 32 typedef ostreambuf_iterator<char> test_iterator; 33 typedef iterator<output_iterator_tag, void, void, void, void> base_iterator; 34 ostringstream osstream("this tag"); 35 test_iterator r_it(osstream); 36 base_iterator* base = &r_it; 37 38 // Check for required typedefs 39 typedef test_iterator::value_type value_type; 40 typedef test_iterator::difference_type difference_type; 41 typedef test_iterator::pointer pointer; 42 typedef test_iterator::reference reference; 43 typedef test_iterator::iterator_category iteratory_category; 44 45 typedef test_iterator::char_type char_type; 46 typedef test_iterator::traits_type traits_type; 47 typedef test_iterator::ostream_type ostream_type; 48 typedef test_iterator::streambuf_type streambuf_type; 49} 50 51bool test02(void) 52{ 53 typedef std::ostreambuf_iterator<char> costreambuf_iter; 54 typedef costreambuf_iter::streambuf_type cstreambuf_type; 55 bool test = true; 56 const char slit01[] = "playa hermosa, liberia, guanacaste"; 57 const char slit02[] = "bodega bay, lost coast, california"; 58 std::string str01(slit01); 59 std::string str02(slit02); 60 std::string tmp; 61 std::stringbuf strbuf01; 62 std::stringbuf strbuf02(str01); 63 std::ostringstream ostrs00(str01); 64 std::ostringstream ostrs01(str01); 65 66 // ctor sanity checks 67 costreambuf_iter ostrb_it01(ostrs00); 68 VERIFY( !ostrb_it01.failed() ); 69 ostrb_it01++; 70 ++ostrb_it01; 71 VERIFY( !ostrb_it01.failed() ); 72 ostrb_it01 = 'a'; 73 VERIFY( !ostrb_it01.failed() ); 74 *ostrb_it01; 75 VERIFY( !ostrb_it01.failed() ); 76 77 costreambuf_iter ostrb_it02(NULL); 78 VERIFY( ostrb_it02.failed() ); 79 ostrb_it02++; 80 ++ostrb_it02; 81 VERIFY( ostrb_it02.failed() ); 82 *ostrb_it02; 83 VERIFY( ostrb_it02.failed() ); 84 ostrb_it02 = 'a'; 85 VERIFY( ostrb_it02.failed() ); 86 87 // charT operator*() const 88 // ostreambuf_iterator& operator++(); 89 // ostreambuf_iterator& operator++(int); 90 costreambuf_iter ostrb_it27(ostrs01); 91 VERIFY( !ostrb_it27.failed() ); 92 int j = str02.size(); 93 for (int i = 0; i < j; ++i) 94 ostrb_it27 = str02[i]; 95 VERIFY( !ostrb_it27.failed() ); 96 tmp = ostrs01.str(); 97 VERIFY ( tmp != str01 ); 98 VERIFY ( tmp == str02 ); 99 100 costreambuf_iter ostrb_it28(ostrs00); 101 VERIFY( !ostrb_it28.failed() ); 102 j = ostrs00.str().size(); 103 for (int i = 0; i < j + 2; ++i) 104 ostrb_it28 = 'b'; 105 VERIFY( !ostrb_it28.failed() ); 106 tmp = ostrs00.str(); 107 VERIFY ( tmp != str01 ); 108 VERIFY ( tmp != str02 ); 109 110#ifdef DEBUG_ASSERT 111 assert(test); 112#endif 113 114 return test; 115} 116 117int main() 118{ 119 test01(); 120 test02(); 121 122 return 0; 123} 124