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/] [5.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 <cstring>
27
#include <cstdlib>
28
#include <locale>
29
#include <stdexcept>
30
#include <testsuite_hooks.h>
31
 
32
// More tests for locale("") == POSIX locale::name. 
33
void test04()
34
{
35
  bool test __attribute__((unused)) = true;
36
  using namespace std;
37
 
38
#ifdef _GLIBCXX_HAVE_SETENV
39
 
40
  const char* LANG_orig = getenv("LANG") ? strdup(getenv("LANG")) : "";
41
  const char* LC_ALL_orig = getenv("LC_ALL") ? strdup(getenv("LC_ALL")) : "";
42
  const char* LC_CTYPE_orig =
43
    getenv("LC_CTYPE") ? strdup(getenv("LC_CTYPE")) : "";
44
  const char* LC_NUMERIC_orig =
45
    getenv("LC_NUMERIC") ? strdup(getenv("LC_NUMERIC")) : "";
46
  const char* LC_TIME_orig =
47
    getenv("LC_TIME") ? strdup(getenv("LC_TIME")) : "";
48
  const char* LC_COLLATE_orig =
49
    getenv("LC_COLLATE") ? strdup(getenv("LC_COLLATE")) : "";
50
  const char* LC_MONETARY_orig =
51
    getenv("LC_MONETARY") ? strdup(getenv("LC_MONETARY")) : "";
52
  const char* LC_MESSAGES_orig =
53
    getenv("LC_MESSAGES") ? strdup(getenv("LC_MESSAGES")) : "";
54
#if _GLIBCXX_NUM_CATEGORIES
55
  const char* LC_PAPER_orig =
56
    getenv("LC_PAPER") ? strdup(getenv("LC_PAPER")) : "";
57
  const char* LC_NAME_orig =
58
    getenv("LC_NAME") ? strdup(getenv("LC_NAME")) : "";
59
  const char* LC_ADDRESS_orig =
60
    getenv("LC_ADDRESS") ? strdup(getenv("LC_ADDRESS")) : "";
61
  const char* LC_TELEPHONE_orig =
62
    getenv("LC_TELEPHONE") ? strdup(getenv("LC_TELEPHONE")) : "";
63
  const char* LC_MEASUREMENT_orig =
64
    getenv("LC_MEASUREMENT") ? strdup(getenv("LC_MEASUREMENT")) : "";
65
  const char* LC_IDENTIFICATION_orig =
66
    getenv("LC_IDENTIFICATION") ? strdup(getenv("LC_IDENTIFICATION")) : "";
67
#endif
68
 
69
  // Check that a "POSIX" LC_ALL is equivalent to "C".
70
  if (!setenv("LC_ALL", "POSIX", 1))
71
    {
72
      locale loc = locale("");
73
      VERIFY( loc.name() == "C" );
74
    }
75
  setenv("LC_ALL", "", 1);
76
 
77
  // Check that a "en_PH" LC_ALL is equivalent to "en_PH".
78
  if (!setenv("LC_ALL", "en_PH", 1))
79
    {
80
      locale loc = locale("");
81
      VERIFY( loc.name() == "en_PH" );
82
    }
83
  setenv("LC_ALL", "", 1);
84
 
85
  // Explicit check that LC_ALL sets regardless of LC_* and LANG.
86
  if (!setenv("LANG", "es_MX", 1) && !setenv("LC_COLLATE", "de_DE", 1))
87
    {
88
      if (!setenv("LC_ALL", "en_PH", 1))
89
        {
90
          locale loc = locale("");
91
          VERIFY( loc.name() == "en_PH" );
92
        }
93
      setenv("LC_ALL", "", 1);
94
      setenv("LANG", LANG_orig ? LANG_orig : "", 1);
95
      setenv("LC_COLLATE", LC_COLLATE_orig ? LC_COLLATE_orig : "", 1);
96
    }
97
 
98
  // NB: LANG checks all LC_* macro settings. As such, all LC_* macros
99
  // must be cleared for these tests, and then restored.
100
  setenv("LC_ALL", "", 1);
101
  setenv("LC_CTYPE", "", 1);
102
  setenv("LC_NUMERIC", "", 1);
103
  setenv("LC_TIME", "", 1);
104
  setenv("LC_COLLATE", "", 1);
105
  setenv("LC_MONETARY", "", 1);
106
  setenv("LC_MESSAGES", "", 1);
107
#if _GLIBCXX_NUM_CATEGORIES
108
  setenv("LC_PAPER", "", 1);
109
  setenv("LC_NAME", "", 1);
110
  setenv("LC_ADDRESS", "", 1);
111
  setenv("LC_TELEPHONE", "", 1);
112
  setenv("LC_MEASUREMENT", "", 1);
113
  setenv("LC_IDENTIFICATION", "", 1);
114
#endif
115
 
116
  // Check the default set by LANG.
117
  if (!setenv("LANG", "fr_FR", 1))
118
    {
119
      locale loc = locale("");
120
      VERIFY( loc.name() == "fr_FR" );
121
    }
122
 
123
  // Check that a "POSIX" LANG is equivalent to "C".
124
  if (!setenv("LANG", "POSIX", 1))
125
    {
126
      locale loc("");
127
      VERIFY( loc.name() == "C" );
128
    }
129
 
130
  // Setting a category in the "C" default.
131
  if (!setenv("LC_COLLATE", "de_DE", 1))
132
    {
133
      locale loc = locale("");
134
 
135
#if _GLIBCXX_NUM_CATEGORIES
136
      VERIFY( loc.name() == "LC_CTYPE=C;LC_NUMERIC=C;LC_TIME=C;"
137
              "LC_COLLATE=de_DE;LC_MONETARY=C;LC_MESSAGES=C;LC_PAPER=C;"
138
              "LC_NAME=C;LC_ADDRESS=C;LC_TELEPHONE=C;LC_MEASUREMENT=C;"
139
              "LC_IDENTIFICATION=C" );
140
#else
141
      VERIFY( loc.name() == "LC_CTYPE=C;LC_NUMERIC=C;LC_TIME=C;"
142
              "LC_COLLATE=de_DE;LC_MONETARY=C;LC_MESSAGES=C" );
143
#endif
144
    }
145
 
146
  // Changing the LANG default while LC_COLLATE is set.
147
  if (!setenv("LANG", "fr_FR", 1))
148
    {
149
      locale loc = locale("");
150
#if _GLIBCXX_NUM_CATEGORIES
151
      VERIFY( loc.name() == "LC_CTYPE=fr_FR;LC_NUMERIC=fr_FR;"
152
              "LC_TIME=fr_FR;LC_COLLATE=de_DE;LC_MONETARY=fr_FR;"
153
              "LC_MESSAGES=fr_FR;LC_PAPER=fr_FR;LC_NAME=fr_FR;"
154
              "LC_ADDRESS=fr_FR;LC_TELEPHONE=fr_FR;LC_MEASUREMENT=fr_FR;"
155
              "LC_IDENTIFICATION=fr_FR" );
156
#else
157
      VERIFY( loc.name() == "LC_CTYPE=fr_FR;LC_NUMERIC=fr_FR;"
158
              "LC_TIME=fr_FR;LC_COLLATE=de_DE;LC_MONETARY=fr_FR;"
159
              "LC_MESSAGES=fr_FR" );
160
#endif
161
    }
162
 
163
  // Changing another (C only) category.
164
#if _GLIBCXX_NUM_CATEGORIES
165
  if (!setenv("LC_IDENTIFICATION", "it_IT", 1))
166
    {
167
      locale loc = locale("");
168
      VERIFY( loc.name() == "LC_CTYPE=fr_FR;LC_NUMERIC=fr_FR;"
169
              "LC_TIME=fr_FR;LC_COLLATE=de_DE;LC_MONETARY=fr_FR;"
170
              "LC_MESSAGES=fr_FR;LC_PAPER=fr_FR;LC_NAME=fr_FR;"
171
              "LC_ADDRESS=fr_FR;LC_TELEPHONE=fr_FR;LC_MEASUREMENT=fr_FR;"
172
              "LC_IDENTIFICATION=it_IT" );
173
    }
174
#endif
175
 
176
  // Restore the environment.
177
  setenv("LANG", LANG_orig ? LANG_orig : "", 1);
178
  setenv("LC_ALL", LC_ALL_orig ? LC_ALL_orig : "", 1);
179
  setenv("LC_CTYPE", LC_CTYPE_orig ? LC_CTYPE_orig : "", 1);
180
  setenv("LC_NUMERIC", LC_NUMERIC_orig ? LC_NUMERIC_orig : "", 1);
181
  setenv("LC_TIME", LC_TIME_orig ? LC_TIME_orig : "", 1);
182
  setenv("LC_COLLATE", LC_COLLATE_orig ? LC_COLLATE_orig : "", 1);
183
  setenv("LC_MONETARY", LC_MONETARY_orig ? LC_MONETARY_orig : "", 1);
184
  setenv("LC_MESSAGES", LC_MESSAGES_orig ? LC_MESSAGES_orig : "", 1);
185
#if _GLIBCXX_NUM_CATEGORIES
186
  setenv("LC_PAPER", LC_PAPER_orig ? LC_PAPER_orig : "", 1);
187
  setenv("LC_NAME", LC_NAME_orig ? LC_NAME_orig : "", 1);
188
  setenv("LC_ADDRESS", LC_ADDRESS_orig ? LC_ADDRESS_orig : "", 1);
189
  setenv("LC_TELEPHONE", LC_TELEPHONE_orig ? LC_TELEPHONE_orig : "", 1);
190
  setenv("LC_MEASUREMENT", LC_MEASUREMENT_orig ? LC_MEASUREMENT_orig : "", 1);
191
  setenv("LC_IDENTIFICATION",
192
         LC_IDENTIFICATION_orig ? LC_IDENTIFICATION_orig : "", 1);
193
#endif
194
 
195
#endif
196
}
197
 
198
int main()
199
{
200
  test04();
201
  return 0;
202
}

powered by: WebSVN 2.1.0

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