1// 2006-03-20  Paolo Carlini  <pcarlini@suse.de>
2
3// Copyright (C) 2006, 2009 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 3, 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 Pred 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 COPYING3.  If not see
18// <http://www.gnu.org/licenses/>.
19
20#include <iterator>
21#include <sstream>
22#include <algorithm>
23#include <testsuite_hooks.h>
24
25// In the occasion of libstdc++/25482
26void test01()
27{
28  bool test __attribute__((unused)) = true;
29  using namespace std;
30
31  typedef istreambuf_iterator<char> in_iterator_type;
32  typedef ostreambuf_iterator<char> out_iterator_type;
33
34  const char data1[] = "Drei Phantasien nach Friedrich Holderlin";
35  const string str1(data1);
36  istringstream iss1(str1);
37  in_iterator_type beg1(iss1);
38  in_iterator_type end1;
39
40  ostringstream oss1;
41  out_iterator_type out1(oss1);
42
43  out1 = copy(beg1, beg1, out1);
44  VERIFY( oss1.str().empty() );
45
46  out1 = copy(end1, end1, out1);
47  VERIFY( oss1.str().empty() );
48
49  out1 = copy(beg1, end1, out1);
50  VERIFY( oss1.str() == str1 );
51  *out1 = 'x';
52  VERIFY( oss1.str() == str1 + 'x' );
53  oss1.str("");
54
55  iss1.seekg(0);
56  oss1.seekp(0);
57  oss1.str("");
58  out1 = copy(beg1, end1, out1);
59  VERIFY( oss1.str() == str1 );
60  *out1 = 'y';
61  VERIFY( oss1.str() == str1 + 'y' );
62  oss1.str("");
63  out1 = copy(beg1, end1, out1);
64  VERIFY( oss1.str() == "" );
65
66  iss1.seekg(0);
67  out1 = copy(beg1, end1, out1);
68  VERIFY( oss1.str() == str1 );
69}
70
71int main()
72{
73  test01();
74  return 0;
75}
76