1// Copyright (C) 2006, 2009 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 19#include <iterator> 20#include <sstream> 21#include <algorithm> 22#include <testsuite_performance.h> 23 24// libstdc++/25482 25int main() 26{ 27 using namespace std; 28 using namespace __gnu_test; 29 30 typedef istreambuf_iterator<char> in_iterator_type; 31 typedef ostreambuf_iterator<char> out_iterator_type; 32 33 time_counter time; 34 resource_counter resource; 35 36 const char data[] = "Contrappunto dialettico alla mente"; 37 38 // istreambuf iterators -> ostreambuf iterator 39 { 40 istringstream iss(data); 41 in_iterator_type beg(iss); 42 in_iterator_type end; 43 44 ostringstream oss; 45 out_iterator_type out(oss); 46 47 start_counters(time, resource); 48 for (unsigned i = 0; i < 10000000; ++i) 49 { 50 copy(beg, end, out); 51 iss.seekg(0); 52 oss.seekp(0); 53 } 54 stop_counters(time, resource); 55 report_performance(__FILE__, "isb iters -> osb iter", time, resource); 56 clear_counters(time, resource); 57 } 58 59 // char array -> ostreambuf iterator 60 { 61 const char* beg = data; 62 const char* end = data + sizeof(data) - 1; 63 64 ostringstream oss; 65 out_iterator_type out(oss); 66 67 start_counters(time, resource); 68 for (unsigned i = 0; i < 10000000; ++i) 69 { 70 copy(beg, end, out); 71 oss.seekp(0); 72 } 73 stop_counters(time, resource); 74 report_performance(__FILE__, "pointers -> osb iter", time, resource); 75 clear_counters(time, resource); 76 } 77 78 // istreambuf iterators -> char array 79 { 80 istringstream iss(data); 81 in_iterator_type beg(iss); 82 in_iterator_type end; 83 84 char out[sizeof(data)]; 85 86 start_counters(time, resource); 87 for (unsigned i = 0; i < 10000000; ++i) 88 { 89 copy(beg, end, out); 90 iss.seekg(0); 91 } 92 stop_counters(time, resource); 93 report_performance(__FILE__, "isb iters -> pointer", time, resource); 94 clear_counters(time, resource); 95 } 96 97 return 0; 98} 99