1// 2006-06-16  Paolo Carlini  <pcarlini@suse.de>
2
3// Copyright (C) 2006, 2009  Free Software Foundation
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// 22.2.5.1.1 time_get members
21
22#include <locale>
23#include <sstream>
24#include <testsuite_hooks.h>
25
26// Check that the err argument is ignored by get_year.
27void test01()
28{
29  using namespace std;
30  bool test __attribute__((unused)) = true;
31
32  typedef string::const_iterator iter_type;
33  typedef time_get<char, iter_type> time_get_type;
34  const ios_base::iostate goodbit = ios_base::goodbit;
35  const ios_base::iostate eofbit = ios_base::eofbit;
36  const ios_base::iostate failbit = ios_base::failbit;
37  ios_base::iostate err = goodbit;
38  const locale loc_c = locale::classic();
39
40  // Create "C" time objects
41  const tm time_sanity = __gnu_test::test_tm(0, 0, 12, 26, 5, 97, 2, 0, 0);
42  tm tm0 = __gnu_test::test_tm(0, 0, 0, 0, 0, 0, 0, 0, 0);
43  tm tm1 = __gnu_test::test_tm(0, 0, 0, 0, 0, 0, 0, 0, 0);
44
45  istringstream iss;
46  iss.imbue(locale(loc_c, new time_get_type));
47
48  // Iterator advanced, state, output.
49  const time_get_type& tg = use_facet<time_get_type>(iss.getloc());
50
51  const string str0 = "1";
52  iter_type end0 = tg.get_year(str0.begin(), str0.end(), iss, err, &tm0);
53  VERIFY( err == (failbit | eofbit) );
54  VERIFY( tm0.tm_year == 0 );
55
56  const string str1 = "1997 ";
57  iter_type end1 = tg.get_year(str1.begin(), str1.end(), iss, err, &tm1);
58  VERIFY( err == (failbit | eofbit) );
59  VERIFY( tm1.tm_year == time_sanity.tm_year );
60  VERIFY( *end1 ==  ' ' );
61}
62
63int main()
64{
65  test01();
66  return 0;
67}
68