1 |
19 |
jlechner |
// 981208 bkoz test functionality of basic_stringbuf for char_type == wchar_t
|
2 |
|
|
|
3 |
|
|
// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004
|
4 |
|
|
// Free Software Foundation, Inc.
|
5 |
|
|
//
|
6 |
|
|
// This file is part of the GNU ISO C++ Library. This library is free
|
7 |
|
|
// software; you can redistribute it and/or modify it under the
|
8 |
|
|
// terms of the GNU General Public License as published by the
|
9 |
|
|
// Free Software Foundation; either version 2, or (at your option)
|
10 |
|
|
// any later version.
|
11 |
|
|
|
12 |
|
|
// This library is distributed in the hope that it will be useful,
|
13 |
|
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
14 |
|
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
15 |
|
|
// GNU General Public License for more details.
|
16 |
|
|
|
17 |
|
|
// You should have received a copy of the GNU General Public License along
|
18 |
|
|
// with this library; see the file COPYING. If not, write to the Free
|
19 |
|
|
// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
|
20 |
|
|
// USA.
|
21 |
|
|
|
22 |
|
|
#include <sstream>
|
23 |
|
|
#include <testsuite_hooks.h>
|
24 |
|
|
|
25 |
|
|
std::wstring str_01(L"mykonos. . . or what?");
|
26 |
|
|
std::wstringbuf strb_01(str_01);
|
27 |
|
|
|
28 |
|
|
// test overloaded virtual functions
|
29 |
|
|
void test04()
|
30 |
|
|
{
|
31 |
|
|
bool test __attribute__((unused)) = true;
|
32 |
|
|
std::wstring str_tmp;
|
33 |
|
|
std::streamsize strmsz_1, strmsz_2;
|
34 |
|
|
typedef std::wstringbuf::int_type int_type;
|
35 |
|
|
typedef std::wstringbuf::traits_type traits_type;
|
36 |
|
|
typedef std::wstringbuf::pos_type pos_type;
|
37 |
|
|
typedef std::wstringbuf::off_type off_type;
|
38 |
|
|
|
39 |
|
|
int_type c1 = strb_01.sbumpc();
|
40 |
|
|
int_type c2, c3;
|
41 |
|
|
|
42 |
|
|
// BUFFER MANAGEMENT & POSITIONING
|
43 |
|
|
|
44 |
|
|
// seekoff
|
45 |
|
|
// pubseekoff(off_type off, ios_base::seekdir way, ios_base::openmode which)
|
46 |
|
|
// alters the stream position to off
|
47 |
|
|
pos_type pt_1(off_type(-1));
|
48 |
|
|
pos_type pt_2(off_type(0));
|
49 |
|
|
off_type off_1 = 0;
|
50 |
|
|
off_type off_2 = 0;
|
51 |
|
|
strb_01.str(str_01); //in|out ("mykonos. . . or what?");
|
52 |
|
|
|
53 |
|
|
//IN|OUT
|
54 |
|
|
//beg
|
55 |
|
|
pt_1 = strb_01.pubseekoff(2, std::ios_base::beg);
|
56 |
|
|
off_1 = off_type(pt_1);
|
57 |
|
|
VERIFY( off_1 >= 0 );
|
58 |
|
|
c1 = strb_01.snextc(); //current in pointer +1
|
59 |
|
|
VERIFY( c1 == L'o' );
|
60 |
|
|
c2 = strb_01.sputc(L'x'); //test current out pointer
|
61 |
|
|
str_tmp = std::wstring(L"myxonos. . . or what?");
|
62 |
|
|
VERIFY( strb_01.str() == str_tmp );
|
63 |
|
|
//cur
|
64 |
|
|
pt_1 = strb_01.pubseekoff(2, std::ios_base::cur);
|
65 |
|
|
off_1 = off_type(pt_1);
|
66 |
|
|
VERIFY( off_1 == -1 ); // can't seekoff for in and out + cur in sstreams
|
67 |
|
|
pt_1 = strb_01.pubseekoff(2, std::ios_base::cur, std::ios_base::in);
|
68 |
|
|
off_1 = off_type(pt_1);
|
69 |
|
|
pt_2 = strb_01.pubseekoff(2, std::ios_base::cur, std::ios_base::in);
|
70 |
|
|
off_2 = off_type(pt_2);
|
71 |
|
|
VERIFY( off_2 == off_1 + 2 );
|
72 |
|
|
c1 = strb_01.snextc(); //current in pointer + 1
|
73 |
|
|
VERIFY( c1 == L' ' );
|
74 |
|
|
c2 = strb_01.sputc(L'x'); //test current out pointer
|
75 |
|
|
str_tmp = std::wstring(L"myxxnos. . . or what?");
|
76 |
|
|
VERIFY( strb_01.str() == str_tmp );
|
77 |
|
|
//end
|
78 |
|
|
pt_2 = strb_01.pubseekoff(2, std::ios_base::end);
|
79 |
|
|
off_1 = off_type(pt_2);
|
80 |
|
|
VERIFY( off_1 == -1 ); // not a valid position
|
81 |
|
|
VERIFY( strb_01.str() == str_tmp );
|
82 |
|
|
// end part two (from the filebuf tests)
|
83 |
|
|
strb_01.pubseekoff(0, std::ios_base::end);
|
84 |
|
|
strmsz_1 = strb_01.in_avail(); // 0 cuz at the end
|
85 |
|
|
c1 = strb_01.sgetc();
|
86 |
|
|
c2 = strb_01.sungetc();
|
87 |
|
|
strmsz_2 = strb_01.in_avail(); // 1
|
88 |
|
|
c3 = strb_01.sgetc();
|
89 |
|
|
VERIFY( c1 != c2 );
|
90 |
|
|
VERIFY( strmsz_2 != strmsz_1 );
|
91 |
|
|
VERIFY( strmsz_2 == 1 );
|
92 |
|
|
// end part three
|
93 |
|
|
strmsz_1 = strb_01.str().size();
|
94 |
|
|
strmsz_2 = strb_01.sputn(L" ravi shankar meets carlos santana in LoHa", 90);
|
95 |
|
|
strb_01.pubseekoff(0, std::ios_base::end);
|
96 |
|
|
strb_01.sputc(L'<');
|
97 |
|
|
str_tmp = strb_01.str();
|
98 |
|
|
VERIFY(static_cast<std::streamsize>(str_tmp.size()) == strmsz_1 + strmsz_2 + 1);
|
99 |
|
|
// IN
|
100 |
|
|
// OUT
|
101 |
|
|
}
|
102 |
|
|
|
103 |
|
|
int main()
|
104 |
|
|
{
|
105 |
|
|
test04();
|
106 |
|
|
return 0;
|
107 |
|
|
}
|
108 |
|
|
|
109 |
|
|
|
110 |
|
|
|
111 |
|
|
// more candy!!!
|