1// 981208 bkoz test functionality of basic_stringbuf for char_type == char 2 3// Copyright (C) 1997-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#include <sstream> 21#include <testsuite_hooks.h> 22 23std::string str_01("mykonos. . . or what?"); 24std::string str_02("paris, or sainte-maxime?"); 25std::string str_03; 26std::stringbuf strb_01(str_01); 27std::stringbuf strb_02(str_02, std::ios_base::in); 28std::stringbuf strb_03(str_03, std::ios_base::out); 29 30// test overloaded virtual functions 31void test04() 32{ 33 bool test __attribute__((unused)) = true; 34 std::streamsize strmsz_1, strmsz_2; 35 typedef std::stringbuf::int_type int_type; 36 typedef std::stringbuf::traits_type traits_type; 37 38 // GET 39 strb_01.in_avail(); 40 strb_02.in_avail(); 41 strb_03.in_avail(); 42 43 int_type c1 = strb_01.sbumpc(); 44 int_type c2 = strb_02.sbumpc(); 45 strb_01.sbumpc(); 46 int_type c4 = strb_02.sbumpc(); 47 strb_03.sbumpc(); 48 49 // int_type sgetc() 50 // if read_cur not avail, return uflow(), else return *read_cur 51 int_type c6 = strb_01.sgetc(); 52 int_type c7 = strb_02.sgetc(); 53 strb_01.sgetc(); 54 strb_02.sgetc(); 55 strb_03.sgetc(); 56 57 // int_type snextc() 58 // calls sbumpc and if sbumpc != eof, return sgetc 59 c6 = strb_01.snextc(); 60 c7 = strb_02.snextc(); 61 strb_03.snextc(); 62 63 // streamsize sgetn(char_type *s, streamsize n) 64 // streamsize xsgetn(char_type *s, streamsize n) 65 // assign up to n chars to s from input sequence, indexing in_cur as 66 // approp and returning the number of chars assigned 67 strmsz_1 = strb_01.in_avail(); 68 strmsz_2 = strb_02.in_avail(); 69 test = strmsz_1 != strmsz_2; 70 VERIFY( strmsz_1 != static_cast<std::streamsize>(str_01.length()) ); 71 // because now we've moved into string 72 VERIFY( strmsz_2 != static_cast<std::streamsize>(str_02.length()) ); 73 char carray1[11] = ""; 74 strmsz_1 = strb_01.sgetn(carray1, 10); 75 char carray2[20] = ""; 76 strmsz_2 = strb_02.sgetn(carray2, 10); 77 VERIFY( strmsz_1 == strmsz_2 ); 78 VERIFY( strmsz_1 == 10 ); 79 c1 = strb_01.sgetc(); 80 c2 = strb_02.sgetc(); 81 VERIFY( c6 == c1 ); //just by co-incidence both o's 82 VERIFY( c7 != c2 ); // n != i 83 VERIFY( c1 == traits_type::to_int_type(str_01[13]) ); 84 VERIFY( c2 == traits_type::to_int_type(str_02[13]) ); //should equal fourteenth letter at this point 85 strmsz_1 = strb_03.sgetn(carray1, 10); 86 VERIFY( !strmsz_1 ); //zero 87 strmsz_1 = strb_02.in_avail(); 88 strmsz_2 = strb_02.sgetn(carray2, strmsz_1 + 5); 89 VERIFY( strmsz_1 == strmsz_2 ); //write off the end 90 c4 = strb_02.sgetc(); // should be EOF 91 VERIFY( c4 == traits_type::eof() ); 92} 93 94int main() 95{ 96 test04(); 97 return 0; 98} 99 100 101 102// more candy!!! 103