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/] [locale/] [cons/] [5.cc] - Blame information for rev 19

Details | Compare with Previous | View Log

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

powered by: WebSVN 2.1.0

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