// Copyright (C) 2004, 2009 Free Software Foundation
|
// Copyright (C) 2004, 2009 Free Software Foundation
|
//
|
//
|
// This file is part of the GNU ISO C++ Library. This library is free
|
// This file is part of the GNU ISO C++ Library. This library is free
|
// software; you can redistribute it and/or modify it under the
|
// software; you can redistribute it and/or modify it under the
|
// terms of the GNU General Public License as published by the
|
// terms of the GNU General Public License as published by the
|
// Free Software Foundation; either version 3, or (at your option)
|
// Free Software Foundation; either version 3, or (at your option)
|
// any later version.
|
// any later version.
|
|
|
// This library is distributed in the hope that it will be useful,
|
// This library is distributed in the hope that it will be useful,
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
// GNU General Public License for more details.
|
// GNU General Public License for more details.
|
|
|
// You should have received a copy of the GNU General Public License along
|
// You should have received a copy of the GNU General Public License along
|
// with this library; see the file COPYING3. If not see
|
// with this library; see the file COPYING3. If not see
|
// <http://www.gnu.org/licenses/>.
|
// <http://www.gnu.org/licenses/>.
|
|
|
// 27.6.1.3 unformatted input functions
|
// 27.6.1.3 unformatted input functions
|
// NB: ostream has a particular "seeks" category. Adopt this for istreams too.
|
// NB: ostream has a particular "seeks" category. Adopt this for istreams too.
|
// @require@ %-*.tst %-*.txt
|
// @require@ %-*.tst %-*.txt
|
// @diff@ %-*.tst %-*.txt
|
// @diff@ %-*.tst %-*.txt
|
|
|
|
// { dg-xfail-run-if "not supported on OR32 newlib" { or32-*-elf } }
|
|
|
#include <istream>
|
#include <istream>
|
#include <sstream>
|
#include <sstream>
|
#include <fstream>
|
#include <fstream>
|
#include <testsuite_hooks.h>
|
#include <testsuite_hooks.h>
|
|
|
// stringstreams
|
// stringstreams
|
void test05(void)
|
void test05(void)
|
{
|
{
|
typedef std::wistream::off_type off_type;
|
typedef std::wistream::off_type off_type;
|
|
|
bool test __attribute__((unused)) = true;
|
bool test __attribute__((unused)) = true;
|
std::wistream::pos_type pos01, pos02, pos03, pos04, pos05, pos06;
|
std::wistream::pos_type pos01, pos02, pos03, pos04, pos05, pos06;
|
std::ios_base::iostate state01, state02;
|
std::ios_base::iostate state01, state02;
|
const char str_lit01[] = "wistream_seeks-1.tst";
|
const char str_lit01[] = "wistream_seeks-1.tst";
|
std::wifstream if01(str_lit01);
|
std::wifstream if01(str_lit01);
|
std::wifstream if02(str_lit01);
|
std::wifstream if02(str_lit01);
|
std::wifstream if03(str_lit01);
|
std::wifstream if03(str_lit01);
|
VERIFY( if01.good() );
|
VERIFY( if01.good() );
|
VERIFY( if02.good() );
|
VERIFY( if02.good() );
|
VERIFY( if03.good() );
|
VERIFY( if03.good() );
|
|
|
std::wstringbuf strbuf01(std::ios_base::in | std::ios_base::out);
|
std::wstringbuf strbuf01(std::ios_base::in | std::ios_base::out);
|
if01 >> &strbuf01;
|
if01 >> &strbuf01;
|
// initialize stringbufs that are ios_base::out
|
// initialize stringbufs that are ios_base::out
|
std::wstringbuf strbuf03(strbuf01.str(), std::ios_base::out);
|
std::wstringbuf strbuf03(strbuf01.str(), std::ios_base::out);
|
// initialize stringbufs that are ios_base::in
|
// initialize stringbufs that are ios_base::in
|
std::wstringbuf strbuf02(strbuf01.str(), std::ios_base::in);
|
std::wstringbuf strbuf02(strbuf01.str(), std::ios_base::in);
|
|
|
std::wistream is01(&strbuf01);
|
std::wistream is01(&strbuf01);
|
std::wistream is02(&strbuf02);
|
std::wistream is02(&strbuf02);
|
std::wistream is03(&strbuf03);
|
std::wistream is03(&strbuf03);
|
|
|
// pos_type tellg()
|
// pos_type tellg()
|
// in | out
|
// in | out
|
pos01 = is01.tellg();
|
pos01 = is01.tellg();
|
pos02 = is01.tellg();
|
pos02 = is01.tellg();
|
VERIFY( pos01 == pos02 );
|
VERIFY( pos01 == pos02 );
|
|
|
// in
|
// in
|
pos03 = is02.tellg();
|
pos03 = is02.tellg();
|
pos04 = is02.tellg();
|
pos04 = is02.tellg();
|
VERIFY( pos03 == pos04 );
|
VERIFY( pos03 == pos04 );
|
|
|
// out
|
// out
|
pos05 = is03.tellg();
|
pos05 = is03.tellg();
|
pos06 = is03.tellg();
|
pos06 = is03.tellg();
|
VERIFY( pos05 == pos06 );
|
VERIFY( pos05 == pos06 );
|
|
|
// cur
|
// cur
|
// NB: see library issues list 136. It's the v-3 interp that seekg
|
// NB: see library issues list 136. It's the v-3 interp that seekg
|
// only sets the input buffer, or else istreams with buffers that
|
// only sets the input buffer, or else istreams with buffers that
|
// have _M_mode == ios_base::out will fail to have consistency
|
// have _M_mode == ios_base::out will fail to have consistency
|
// between seekg and tellg.
|
// between seekg and tellg.
|
state01 = is01.rdstate();
|
state01 = is01.rdstate();
|
is01.seekg(10, std::ios_base::cur);
|
is01.seekg(10, std::ios_base::cur);
|
state02 = is01.rdstate();
|
state02 = is01.rdstate();
|
pos01 = is01.tellg();
|
pos01 = is01.tellg();
|
VERIFY( pos01 == pos02 + off_type(10) );
|
VERIFY( pos01 == pos02 + off_type(10) );
|
VERIFY( state01 == state02 );
|
VERIFY( state01 == state02 );
|
pos02 = is01.tellg();
|
pos02 = is01.tellg();
|
VERIFY( pos02 == pos01 );
|
VERIFY( pos02 == pos01 );
|
}
|
}
|
|
|
int main()
|
int main()
|
{
|
{
|
test05();
|
test05();
|
return 0;
|
return 0;
|
}
|
}
|
|
|