1// Copyright (C) 2004-2015 Free Software Foundation, Inc. 2// 3// This file is part of the GNU ISO C++ Library. This library is free 4// software; you can redistribute it and/or modify it under the 5// terms of the GNU General Public License as published by the 6// Free Software Foundation; either version 3, or (at your option) 7// any later version. 8 9// This library is distributed in the hope that it will be useful, 10// but WITHOUT ANY WARRANTY; without even the implied warranty of 11// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12// GNU General Public License for more details. 13 14// You should have received a copy of the GNU General Public License along 15// with this library; see the file COPYING3. If not see 16// <http://www.gnu.org/licenses/>. 17 18// 21.3.7.9 inserters and extractors 19 20// { dg-options "-DMAX_SIZE=466" { target simulator } } 21 22#ifndef MAX_SIZE 23#define MAX_SIZE 666 24#endif 25 26#include <istream> 27#include <string> 28#include <fstream> 29#include <cstdlib> 30#include <testsuite_hooks.h> 31 32using namespace std; 33 34wstring prepare(wstring::size_type len, unsigned nchunks) 35{ 36 wstring ret; 37 for (unsigned i = 0; i < nchunks; ++i) 38 { 39 for (wstring::size_type j = 0; j < len; ++j) 40 ret.push_back(L'a' + rand() % 26); 41 len *= 2; 42 ret.push_back(L' '); 43 } 44 return ret; 45} 46 47void check(wistream& stream, const wstring& str, unsigned nchunks) 48{ 49 bool test __attribute__((unused)) = true; 50 51 wstring chunk; 52 wstring::size_type index = 0, index_new = 0; 53 unsigned n = 0; 54 55 while (stream >> chunk) 56 { 57 index_new = str.find(L' ', index); 58 VERIFY( !str.compare(index, index_new - index, chunk) ); 59 index = index_new + 1; 60 ++n; 61 } 62 VERIFY( stream.eof() ); 63 VERIFY( n == nchunks ); 64} 65 66// istream& operator>>(istream&, string&) 67void test01() 68{ 69 const char filename[] = "inserters_extractors-3.txt"; 70 71 const unsigned nchunks = 10; 72 const wstring data = prepare(MAX_SIZE, nchunks); 73 74 wofstream ofstrm; 75 ofstrm.open(filename); 76 ofstrm.write(data.data(), data.size()); 77 ofstrm.close(); 78 79 wifstream ifstrm; 80 ifstrm.open(filename); 81 check(ifstrm, data, nchunks); 82 ifstrm.close(); 83} 84 85int main() 86{ 87 test01(); 88 return 0; 89} 90