1// 1999-07-26 bkoz 2 3// Copyright (C) 1999-2015 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 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 COPYING3. If not see 18// <http://www.gnu.org/licenses/>. 19 20// 27.6.1.2.3 character extractors 21 22#include <istream> 23#include <sstream> 24#include <testsuite_hooks.h> 25 26void test01() 27{ 28 bool test __attribute__((unused)) = true; 29 std::string str_01; 30 const std::string str_02("coltrane playing 'softly as a morning sunrise'"); 31 const std::string str_03("coltrane"); 32 33 std::stringbuf isbuf_01(std::ios_base::in); 34 std::stringbuf isbuf_02(str_02, std::ios_base::in); 35 std::istream is_01(0); 36 std::istream is_02(&isbuf_02); 37 38 std::ios_base::iostate state1, state2, statefail; 39 statefail = std::ios_base::failbit; 40 41 // template<_CharT, _Traits> 42 // basic_istream& operator>>(istream&, _CharT*) 43 int n = 20; 44 char array1[n]; 45 typedef std::ios::traits_type ctraits_type; 46 47 // testing with width() control enabled. 48 is_02.width(8); 49 state1 = is_02.rdstate(); 50 is_02 >> array1; // should snake "coltran" 51 state2 = is_02.rdstate(); 52 VERIFY( state1 == state2 ); 53 VERIFY( !ctraits_type::compare(array1, "coltran", 7) ); 54 55 is_02.width(1); 56 state1 = is_02.rdstate(); 57 is_02 >> array1; // should snake nothing, set failbit 58 state2 = is_02.rdstate(); 59 VERIFY( state1 != state2 ); 60 VERIFY( state2 == statefail ); 61 VERIFY( array1[0] == '\0' ); 62 63 is_02.width(8); 64 is_02.clear(); 65 state1 = is_02.rdstate(); 66 VERIFY( !state1 ); 67 is_02 >> array1; // should snake "e" 68 state2 = is_02.rdstate(); 69 VERIFY( state1 == state2 ); 70 VERIFY( !ctraits_type::compare(array1, "e", 1) ); 71 72 // testing for correct exception setting 73 const std::string str_04(" impulse!!"); 74 std::stringbuf isbuf_03(str_04, std::ios_base::in); 75 std::stringbuf isbuf_04(str_04, std::ios_base::in); 76 std::istream is_03(&isbuf_03); 77 std::istream is_04(&isbuf_04); 78 79 is_03 >> array1; 80 VERIFY( !ctraits_type::compare(array1,"impulse!!", 10) ); 81 VERIFY( is_03.rdstate() == std::ios_base::eofbit ); 82 83 is_04.width(9); 84 is_04 >> array1; 85 VERIFY( ! std::ios::traits_type::compare(array1,"impulse!", 9) ); 86 VERIFY( !is_04.rdstate() ); 87} 88 89int main() 90{ 91 test01(); 92 return 0; 93} 94