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

Subversion Repositories openrisc

[/] [openrisc/] [tags/] [gnu-src/] [gcc-4.5.1/] [gcc-4.5.1-or32-1.0rc4/] [libstdc++-v3/] [testsuite/] [22_locale/] [locale/] [cons/] [2.cc] - Blame information for rev 519

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 424 jeremybenn
// { dg-require-namedlocale "" }
2
 
3
// 2000-09-13 Benjamin Kosnik <bkoz@redhat.com>
4
 
5
// Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2009
6
// Free Software Foundation
7
//
8
// This file is part of the GNU ISO C++ Library.  This library is free
9
// software; you can redistribute it and/or modify it under the
10
// terms of the GNU General Public License as published by the
11
// Free Software Foundation; either version 3, or (at your option)
12
// any later version.
13
 
14
// This library is distributed in the hope that it will be useful,
15
// but WITHOUT ANY WARRANTY; without even the implied warranty of
16
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17
// GNU General Public License for more details.
18
 
19
// You should have received a copy of the GNU General Public License along
20
// with this library; see the file COPYING3.  If not see
21
// <http://www.gnu.org/licenses/>.
22
 
23
// 22.1.1.2 locale constructors and destructors [lib.locale.cons]
24
 
25
#include <cwchar> // for mbstate_t
26
#include <locale>
27
#include <stdexcept>
28
#include <typeinfo>
29
#include <testsuite_hooks.h>
30
 
31
typedef std::codecvt<char, char, std::mbstate_t>              c_codecvt;
32
 
33
#ifdef _GLIBCXX_USE_WCHAR_T
34
typedef std::codecvt<wchar_t, char, std::mbstate_t>           w_codecvt;
35
#endif
36
 
37
class gnu_codecvt: public c_codecvt { };
38
 
39
class gnu_facet: public std::locale::facet
40
{
41
public:
42
  static std::locale::id id;
43
};
44
 
45
std::locale::id gnu_facet::id;
46
 
47
void test01()
48
{
49
  using namespace std;
50
  bool test __attribute__((unused)) = true;
51
 
52
  // construct a locale object with the C facet
53
  const locale  loc01 = locale::classic();
54
 
55
  // 1
56
  // template <class Facet> locale(const locale& other, Facet* f)
57
  // construct a locale object with the specialized facet.
58
  locale loc02(locale::classic(), new gnu_codecvt);
59
  VERIFY( loc01 != loc02 );
60
  VERIFY( loc02.name() == "*" );
61
  try
62
    {
63
      VERIFY( has_facet<gnu_codecvt>(loc02) );
64
      VERIFY( has_facet<c_codecvt>(loc02) );
65
#ifdef _GLIBCXX_USE_WCHAR_T
66
      VERIFY( has_facet<w_codecvt>(loc02) );
67
#endif
68
    }
69
  catch(...)
70
    { VERIFY( false ); }
71
 
72
  try
73
    { use_facet<gnu_facet>(loc02); }
74
  catch(bad_cast& obj)
75
    { VERIFY( true ); }
76
  catch(...)
77
    { VERIFY( false ); }
78
 
79
  // 2
80
  // locale() throw()
81
  locale loc03;
82
  VERIFY( loc03 == loc01 );
83
  VERIFY( loc03.name() == "C" );
84
  locale loc04 = locale::global(loc02);
85
  locale loc05;
86
  VERIFY( loc05 != loc03 );
87
  VERIFY( loc05 == loc02 );
88
 
89
  // 3
90
  // explicit locale(const char* std_name)
91
  locale loc06 = locale("fr_FR");
92
  VERIFY( loc06 != loc01 );
93
  VERIFY( loc06 != loc02 );
94
  VERIFY( loc06.name() == "fr_FR");
95
  locale loc07("");
96
  VERIFY( loc07 != loc02 );
97
  VERIFY( loc07.name() != "" );
98
  try
99
    { locale loc08(static_cast<const char*>(NULL)); }
100
  catch(runtime_error& obj)
101
    { VERIFY( true ); }
102
  catch(...)
103
    { VERIFY( false ); }
104
 
105
  try
106
    { locale loc08("saturn_SUN*RA"); }
107
  catch(runtime_error& obj)
108
    { VERIFY( true ); }
109
  catch(...)
110
    { VERIFY( false ); }
111
 
112
  // 4
113
  // locale(const locale& other, const char* std_name, category)
114
  {
115
    // This is the same as 5 only use "C" for loc("C")
116
    locale loc09(loc06, "C", locale::ctype);
117
    VERIFY( loc09.name() != "fr_FR" );
118
    VERIFY( loc09.name() != "C" );
119
    VERIFY( loc09.name() != "*" );
120
    VERIFY( loc09 != loc01 );
121
    VERIFY( loc09 != loc06 );
122
 
123
    locale loc10(loc02, "C", locale::ctype);
124
    VERIFY( loc10.name() == "*" );
125
    VERIFY( loc10 != loc01 );   // As not named, even tho facets same...
126
    VERIFY( loc10 != loc02 );
127
 
128
    locale loc11(loc01, "C", locale::ctype);
129
    VERIFY( loc11.name() == "C" );
130
    VERIFY( loc11 == loc01 );
131
 
132
    try
133
      { locale loc12(loc01, static_cast<const char*>(NULL), locale::ctype); }
134
    catch(runtime_error& obj)
135
      { VERIFY( true ); }
136
    catch(...)
137
      { VERIFY( false ); }
138
 
139
    try
140
      { locale loc13(loc01, "localized by the wu-tang clan", locale::ctype); }
141
    catch(runtime_error& obj)
142
      { VERIFY( true ); }
143
    catch(...)
144
      { VERIFY( false ); }
145
 
146
    locale loc14(loc06, "C", locale::none);
147
    VERIFY( loc14.name() == "fr_FR" );
148
    VERIFY( loc14 == loc06 );
149
 
150
    locale loc15(loc06, "C", locale::collate );
151
    VERIFY( loc15.name() != "fr_FR" );
152
    VERIFY( loc15.name() != "C" );
153
    VERIFY( loc15.name() != "*" );
154
    VERIFY( loc15.name() != loc09.name() );
155
    VERIFY( loc15 != loc01 );
156
    VERIFY( loc15 != loc06 );
157
    VERIFY( loc15 != loc09 );
158
  }
159
 
160
  // 5
161
  // locale(const locale& other, const locale& one, category)
162
  {
163
    // This is the exact same as 4, with locale("C") for "C"
164
    locale loc09(loc06, loc01, locale::ctype);
165
    VERIFY( loc09.name() != "fr_FR" );
166
    VERIFY( loc09.name() != "C" );
167
    VERIFY( loc09.name() != "*" );
168
    VERIFY( loc09 != loc01 );
169
    VERIFY( loc09 != loc06 );
170
 
171
    locale loc10(loc02, loc01, locale::ctype);
172
    VERIFY( loc10.name() == "*" );
173
    VERIFY( loc10 != loc01 );   // As not named, even tho facets same...
174
    VERIFY( loc10 != loc02 );
175
 
176
    locale loc11(loc01, loc01, locale::ctype);
177
    VERIFY( loc11.name() == "C" );
178
    VERIFY( loc11 == loc01 );
179
 
180
    try
181
      { locale loc12(loc01, static_cast<const char*>(NULL), locale::ctype); }
182
    catch(runtime_error& obj)
183
      { VERIFY( true ); }
184
    catch(...)
185
      { VERIFY( false ); }
186
 
187
    try
188
      { locale loc13(loc01, locale("wu-tang clan"), locale::ctype); }
189
    catch(runtime_error& obj)
190
      { VERIFY( true ); }
191
    catch(...)
192
      { VERIFY( false ); }
193
 
194
    locale loc14(loc06, loc01, locale::none);
195
    VERIFY( loc14.name() == "fr_FR" );
196
    VERIFY( loc14 == loc06 );
197
 
198
    locale loc15(loc06, loc01, locale::collate);
199
    VERIFY( loc15.name() != "fr_FR" );
200
    VERIFY( loc15.name() != "C" );
201
    VERIFY( loc15.name() != "*" );
202
    VERIFY( loc15.name() != loc09.name() );
203
    VERIFY( loc15 != loc01 );
204
    VERIFY( loc15 != loc06 );
205
    VERIFY( loc15 != loc09 );
206
  }
207
}
208
 
209
int main()
210
{
211
  test01();
212
  return 0;
213
}

powered by: WebSVN 2.1.0

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