1 // 2000-08-17 Benjamin Kosnik <bkoz@cygnus.com>
3 // Copyright (C) 2000, 2002 Free Software Foundation
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)
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.
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, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
21 // 22.2.1.5 - Template class codecvt [lib.locale.codecvt]
24 #include <testsuite_hooks.h>
26 // Required instantiation, degenerate conversion.
27 // codecvt<char, char, mbstate_t>
31 typedef codecvt_base::result result
;
32 typedef codecvt
<char, char, mbstate_t> c_codecvt
;
35 const char* c_lit
= "black pearl jasmine tea";
36 const char* from_next
;
38 char* c_arr
= new char[size
];
42 c_codecvt::state_type state
;
43 const c_codecvt
* cvt
= &use_facet
<c_codecvt
>(loc
);
46 result r1
= cvt
->in(state
, c_lit
, c_lit
+ size
, from_next
,
47 c_arr
, c_arr
+ size
, to_next
);
48 VERIFY( r1
== codecvt_base::noconv
);
49 VERIFY( !strcmp(c_arr
, c_lit
) );
50 VERIFY( from_next
== c_lit
);
51 VERIFY( to_next
== c_arr
);
54 result r2
= cvt
->out(state
, c_lit
, c_lit
+ size
, from_next
,
55 c_arr
, c_arr
+ size
, to_next
);
56 VERIFY( r2
== codecvt_base::noconv
);
57 VERIFY( !strcmp(c_arr
, c_lit
) );
58 VERIFY( from_next
== c_lit
);
59 VERIFY( to_next
== c_arr
);
63 result r3
= cvt
->unshift(state
, c_arr
, c_arr
+ size
, to_next
);
64 VERIFY( r3
== codecvt_base::noconv
);
65 VERIFY( !strcmp(c_arr
, c_lit
) );
66 VERIFY( to_next
== c_arr
);
68 int i
= cvt
->encoding();
71 VERIFY( cvt
->always_noconv() );
73 int j
= cvt
->length(state
, c_lit
, c_lit
+ size
, 5);
76 int k
= cvt
->max_length();
85 #ifdef _GLIBCPP_HAVE_SETENV
86 // Set the global locale to non-"C".
87 std::locale
loc_de("de_DE");
88 std::locale::global(loc_de
);
90 // Set LANG environment variable to de_DE.
91 const char* oldLANG
= getenv("LANG");
92 if (!setenv("LANG", "de_DE", 1))
95 setenv("LANG", oldLANG
? oldLANG
: "", 1);
100 // http://gcc.gnu.org/ml/libstdc++/2002-05/msg00038.html
105 std::string loc1
= setlocale(LC_ALL
, "ja_JP.eucjp");
107 std::string loc2
= setlocale(LC_ALL
, NULL
);
108 VERIFY( loc1
== loc2
);