OpenCores
URL https://opencores.org/ocsvn/scarts/scarts/trunk

Subversion Repositories scarts

[/] [scarts/] [trunk/] [toolchain/] [scarts-gcc/] [gcc-4.1.1/] [libstdc++-v3/] [testsuite/] [22_locale/] [num_get/] [get/] [char/] [12.cc] - Blame information for rev 19

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 19 jlechner
// 2003-12-22  Paolo Carlini  <pcarlini@suse.de>
2
 
3
// Copyright (C) 2003, 2004, 2005 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 2, 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 COPYING.  If not, write to the Free
18
// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
19
// USA.
20
 
21
// 22.2.2.1.1  num_get members
22
 
23
#include <locale>
24
#include <sstream>
25
#include <testsuite_hooks.h>
26
 
27
struct Punct1: std::numpunct<char>
28
{
29
  std::string do_grouping() const { return "\1"; }
30
  char do_thousands_sep() const { return '+'; }
31
  char do_decimal_point() const { return 'x'; }
32
};
33
 
34
struct Punct2: std::numpunct<char>
35
{
36
  std::string do_grouping() const { return "\1"; }
37
  char do_thousands_sep() const { return 'X'; }
38
  char do_decimal_point() const { return '-'; }
39
};
40
 
41
// http://gcc.gnu.org/ml/libstdc++/2003-12/msg00201.html
42
void test01()
43
{
44
  using namespace std;
45
  typedef istreambuf_iterator<char> iterator_type;
46
 
47
  bool test __attribute__((unused)) = true;
48
 
49
  istringstream iss1, iss2;
50
  iss1.imbue(locale(iss1.getloc(), new Punct1));
51
  iss2.imbue(locale(iss2.getloc(), new Punct2));
52
  const num_get<char>& ng1 = use_facet<num_get<char> >(iss1.getloc());
53
  const num_get<char>& ng2 = use_facet<num_get<char> >(iss2.getloc());
54
 
55
  ios_base::iostate err = ios_base::goodbit;
56
  iterator_type end;
57
  long l = 1l;
58
  long l1 = 0l;
59
  long l2 = 10l;
60
  long l3 = 1l;
61
  long l4 = 63l;
62
  double d = 0.0;
63
  double d1 = .4;
64
  double d2 = 0.0;
65
  double d3 = .1;
66
 
67
  iss1.str("+3");
68
  err = ios_base::goodbit;
69
  end = ng1.get(iss1.rdbuf(), 0, iss1, err, l);
70
  VERIFY( err == ios_base::failbit );
71
  VERIFY( *end == '+' );
72
 
73
  iss1.str("0x1");
74
  iss1.clear();
75
  err = ios_base::goodbit;
76
  end = ng1.get(iss1.rdbuf(), 0, iss1, err, l);
77
  VERIFY( err == ios_base::goodbit );
78
  VERIFY( *end == 'x' );
79
  VERIFY( l == l1 );
80
 
81
  iss1.str("0Xa");
82
  iss1.clear();
83
  iss1.unsetf(ios::basefield);
84
  err = ios_base::goodbit;
85
  end = ng1.get(iss1.rdbuf(), 0, iss1, err, l);
86
  VERIFY( err == ios_base::eofbit );
87
  VERIFY( l == l2 );
88
 
89
  iss1.str("0xa");
90
  iss1.clear();
91
  err = ios_base::goodbit;
92
  end = ng1.get(iss1.rdbuf(), 0, iss1, err, l);
93
  VERIFY( err == ios_base::goodbit );
94
  VERIFY( *end == 'x' );
95
  VERIFY( l == l1 );
96
 
97
  iss1.str("+5");
98
  iss1.clear();
99
  err = ios_base::goodbit;
100
  end = ng1.get(iss1.rdbuf(), 0, iss1, err, d);
101
  VERIFY( err == ios_base::failbit );
102
  VERIFY( *end == '+' );
103
 
104
  iss1.str("x4");
105
  iss1.clear();
106
  err = ios_base::goodbit;
107
  end = ng1.get(iss1.rdbuf(), 0, iss1, err, d);
108
  VERIFY( err == ios_base::eofbit );
109
  VERIFY( d == d1 );
110
 
111
  iss2.str("0001-");
112
  err = ios_base::goodbit;
113
  end = ng2.get(iss2.rdbuf(), 0, iss2, err, l);
114
  VERIFY( err == ios_base::goodbit );
115
  VERIFY( *end == '-' );
116
  VERIFY( l == l3 );
117
 
118
  iss2.str("-2");
119
  iss2.clear();
120
  err = ios_base::goodbit;
121
  end = ng2.get(iss2.rdbuf(), 0, iss2, err, l);
122
  VERIFY( err == ios_base::failbit );
123
  VERIFY( *end == '-' );
124
 
125
  iss2.str("0X1");
126
  iss2.clear();
127
  iss2.unsetf(ios::basefield);
128
  err = ios_base::goodbit;
129
  end = ng2.get(iss2.rdbuf(), 0, iss2, err, l);
130
  VERIFY( err == ios_base::failbit );
131
  VERIFY( *end == 'X' );
132
  VERIFY( l == l3 );
133
 
134
  iss2.str("000778");
135
  iss2.clear();
136
  err = ios_base::goodbit;
137
  end = ng2.get(iss2.rdbuf(), 0, iss2, err, l);
138
  VERIFY( err == ios_base::goodbit );
139
  VERIFY( *end == '8' );
140
  VERIFY( l == l4 );
141
 
142
  iss2.str("00X");
143
  iss2.clear();
144
  err = ios_base::goodbit;
145
  end = ng2.get(iss2.rdbuf(), 0, iss2, err, d);
146
  VERIFY( err == (ios_base::eofbit | ios_base::failbit) );
147
  VERIFY( d == d2 );
148
 
149
  iss2.str("-1");
150
  iss2.clear();
151
  err = ios_base::goodbit;
152
  end = ng2.get(iss2.rdbuf(), 0, iss2, err, d);
153
  VERIFY( err == ios_base::eofbit );
154
  VERIFY( d == d3 );
155
}
156
 
157
 
158
int main()
159
{
160
  test01();
161
  return 0;
162
}

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.