OpenCores
URL https://opencores.org/ocsvn/openrisc_2011-10-31/openrisc_2011-10-31/trunk

Subversion Repositories openrisc_2011-10-31

[/] [openrisc/] [tags/] [gnu-src/] [gcc-4.5.1/] [gcc-4.5.1-or32-1.0rc3/] [libstdc++-v3/] [testsuite/] [22_locale/] [num_put/] [put/] [char/] [1.cc] - Blame information for rev 424

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 424 jeremybenn
// { dg-require-namedlocale "" }
2
 
3
// 2001-11-19 Benjamin Kosnik  <bkoz@redhat.com>
4
 
5
// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2009 Free Software Foundation
6
//
7
// This file is part of the GNU ISO C++ Library.  This library is free
8
// software; you can redistribute it and/or modify it under the
9
// terms of the GNU General Public License as published by the
10
// Free Software Foundation; either version 3, or (at your option)
11
// any later version.
12
 
13
// This library is distributed in the hope that it will be useful,
14
// but WITHOUT ANY WARRANTY; without even the implied warranty of
15
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16
// GNU General Public License for more details.
17
 
18
// You should have received a copy of the GNU General Public License along
19
// with this library; see the file COPYING3.  If not see
20
// <http://www.gnu.org/licenses/>.
21
 
22
// 22.2.2.2.1  num_put members
23
 
24
#include <locale>
25
#include <sstream>
26
#include <testsuite_hooks.h>
27
 
28
void test01()
29
{
30
  using namespace std;
31
  typedef ostreambuf_iterator<char> iterator_type;
32
 
33
  bool test __attribute__((unused)) = true;
34
 
35
  // basic construction
36
  locale loc_c = locale::classic();
37
  locale loc_de  = locale("de_DE");
38
  VERIFY( loc_c != loc_de );
39
 
40
  // cache the numpunct facets
41
  const numpunct<char>& numpunct_de = use_facet<numpunct<char> >(loc_de);
42
 
43
  // sanity check the data is correct.
44
  const string empty;
45
  string result1;
46
  string result2;
47
 
48
  bool b1 = true;
49
  bool b0 = false;
50
  unsigned long ul1 = 1294967294;
51
  double d1 =  1.7976931348623157e+308;
52
  double d2 = 2.2250738585072014e-308;
53
  long double ld1 = 1.7976931348623157e+308;
54
  long double ld2 = 2.2250738585072014e-308;
55
  const void* cv = &ld1;
56
 
57
  // cache the num_put facet
58
  ostringstream oss;
59
  oss.imbue(loc_de);
60
  const num_put<char>& np = use_facet<num_put<char> >(oss.getloc());
61
 
62
  // bool, simple
63
  iterator_type os_it00 = oss.rdbuf();
64
  iterator_type os_it01 = np.put(os_it00, oss, '+', b1);
65
  result1 = oss.str();
66
  VERIFY( result1 == "1" );
67
 
68
  oss.str(empty);
69
  np.put(oss.rdbuf(), oss, '+', b0);
70
  result2 = oss.str();
71
  VERIFY( result2 == "0" );
72
 
73
  // ... and one that does
74
  oss.imbue(loc_de);
75
  oss.str(empty);
76
  oss.clear();
77
  oss.width(20);
78
  oss.setf(ios_base::left, ios_base::adjustfield);
79
  np.put(oss.rdbuf(), oss, '+', ul1);
80
  result1 = oss.str();
81
  VERIFY( result1 == "1.294.967.294+++++++" );
82
 
83
  // double
84
  oss.str(empty);
85
  oss.clear();
86
  oss.width(20);
87
  oss.setf(ios_base::left, ios_base::adjustfield);
88
  np.put(oss.rdbuf(), oss, '+', d1);
89
  result1 = oss.str();
90
  VERIFY( result1 == "1,79769e+308++++++++" );
91
 
92
  oss.str(empty);
93
  oss.clear();
94
  oss.width(20);
95
  oss.setf(ios_base::right, ios_base::adjustfield);
96
  np.put(oss.rdbuf(), oss, '+', d2);
97
  result1 = oss.str();
98
  VERIFY( result1 == "++++++++2,22507e-308" );
99
 
100
  oss.str(empty);
101
  oss.clear();
102
  oss.width(20);
103
  oss.setf(ios_base::right, ios_base::adjustfield);
104
  oss.setf(ios_base::scientific, ios_base::floatfield);
105
  np.put(oss.rdbuf(), oss, '+', d2);
106
  result2 = oss.str();
107
  VERIFY( result2 == "+++++++2,225074e-308" );
108
 
109
  oss.str(empty);
110
  oss.clear();
111
  oss.width(20);
112
  oss.precision(10);
113
  oss.setf(ios_base::right, ios_base::adjustfield);
114
  oss.setf(ios_base::scientific, ios_base::floatfield);
115
  oss.setf(ios_base::uppercase);
116
  np.put(oss.rdbuf(), oss, '+', d2);
117
  result1 = oss.str();
118
  VERIFY( result1 == "+++2,2250738585E-308" );
119
 
120
  // long double
121
  oss.str(empty);
122
  oss.clear();
123
  np.put(oss.rdbuf(), oss, '+', ld1);
124
  result1 = oss.str();
125
  VERIFY( result1 == "1,7976931349E+308" );
126
 
127
  oss.str(empty);
128
  oss.clear();
129
  oss.precision(0);
130
  oss.setf(ios_base::fixed, ios_base::floatfield);
131
  np.put(oss.rdbuf(), oss, '+', ld2);
132
  result1 = oss.str();
133
  VERIFY( result1 == "0" );
134
 
135
  // const void*
136
  oss.str(empty);
137
  oss.clear();
138
  np.put(oss.rdbuf(), oss, '+', cv);
139
  result1 = oss.str();
140
  // No grouping characters.
141
  VERIFY( !char_traits<char>::find(result1.c_str(),
142
                                   result1.size(),
143
                                   numpunct_de.decimal_point()) );
144
  // Should contain an 'x'.
145
  VERIFY( result1.find('x') == 1 );
146
 
147
#ifdef _GLIBCXX_USE_LONG_LONG
148
  long long ll1 = 9223372036854775807LL;
149
 
150
  oss.str(empty);
151
  oss.clear();
152
  np.put(oss.rdbuf(), oss, '+', ll1);
153
  result1 = oss.str();
154
  VERIFY( result1 == "9.223.372.036.854.775.807" );
155
#endif
156
}
157
 
158
int main()
159
{
160
  test01();
161
  return 0;
162
}
163
 
164
 

powered by: WebSVN 2.1.0

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