Remove old autovect-branch by moving to "dead" directory.
[official-gcc.git] / old-autovect-branch / libstdc++-v3 / testsuite / 22_locale / codecvt / in / wchar_t / 4.cc
blob65b9a7b38c7f973e678f7803571badd92a4b4f3a
1 // { dg-require-namedlocale "" }
3 // 2003-02-06 Petur Runolfsson <peturr02@ru.is>
5 // Copyright (C) 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.
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.
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.
23 // 22.2.1.5 - Template class codecvt [lib.locale.codecvt]
25 #include <locale>
26 #include <testsuite_hooks.h>
28 // Need to explicitly set the state(mbstate_t) to zero.
29 // How to do this is not specified by the ISO C99 standard, so we
30 // might need to add some operators to make the intuiative case
31 // work:
32 // w_codecvt::state_type state00;
33 // state00 = 0;
34 // or, can use this explicit "C" initialization:
35 // w_codecvt::state_type state01 = {0, 0};
36 // .. except Ulrich says: Use memset. Always use memset. Feel the force...
37 void
38 zero_state(std::mbstate_t& state)
39 { std::memset(&state, 0, sizeof(std::mbstate_t)); }
41 // Required instantiation
42 // codecvt<wchar_t, char, mbstate_t>
44 // Baseline test for UTF-8. Converts a selection of characters into
45 // an array that is known to be of the exact needed size.
46 void test04()
48 using namespace std;
49 typedef codecvt<wchar_t, char, mbstate_t> w_codecvt;
50 typedef codecvt_base::result result;
51 typedef wchar_t int_type;
52 typedef char ext_type;
53 typedef char_traits<wchar_t> int_traits;
55 bool test __attribute__((unused)) = true;
56 const ext_type* e_lit =
57 "\x1\x2\x3\x4\x5\x6\x7\x8\x9\xa\xb\xc\xd\xe\xf\x10\x11\x12\x13"
58 "\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f\x20!\"#$%&"
59 "'()*+,-./0123456789:;<=>?@}~\x7f\xc2\x80\xc2\x81\xc2\x82\xc2"
60 "\x83\xc2\x84\xc2\x85\xc2\x86\xc2\x87\xc2\x88\xc2\x89\xc2\x8a"
61 "\xc2\x8b\xc2\x8c\xc2\x8d\xc2\x8e\xc2\x8f\xc2\x90\xc2\x91\xc2"
62 "\x92\xc2\x93\xc2\x94\xc2\x95\xc2\x96\xc2\x97\xc2\x98\xc2\x99"
63 "\xc2\x9a\xc2\x9b\xc2\x9c\xc3\xba\xc3\xbb\xc3\xbc\xc3\xbd\xc3"
64 "\xbe\xc3\xbf\xc4\x80\xc4\x81\xc4\x82\xc4\x83\xc4\x84\xc4\x85"
65 "\xc4\x86\xc4\x87\xc4\x88\xc4\x89\xc4\x8a\xc4\x8b\xc4\x8c\xc4"
66 "\x8d\xc4\x8e\xc4\x8f\xc4\x90\xc4\x91\xc4\x92\xc4\x93\xc4\x94"
67 "\xc4\x95\xc4\x96\xc4\x97\xc4\x98\xc4\x99\xdf\xb8\xdf\xb9\xdf"
68 "\xba\xdf\xbb\xdf\xbc\xdf\xbd\xdf\xbe\xdf\xbf\xe0\xa0\x80\xe0"
69 "\xa0\x81\xe0\xa0\x82\xe0\xa0\x83\xe0\xa0\x84\xe0\xa0\x85\xe0"
70 "\xa0\x86\xe0\xa0\x87\xe0\xa0\x88\xe0\xa0\x89\xe0\xa0\x8a\xe0"
71 "\xa0\x8b\xe0\xa0\x8c\xe0\xa0\x8d\xe0\xa0\x8e\xe0\xa0\x8f\xe0"
72 "\xa0\x90\xe0\xa0\x91\xe0\xa0\x92\xe0\xa0\x93\xe0\xa0\x94\xe0"
73 "\xa0\x95\xe0\xa0\x96\xe0\xa0\x97\x1\x2\x4\x8\x10\x20@\xc2\x80"
74 "\xc4\x80\xc8\x80\xd0\x80\xe0\xa0\x80\xe1\x80\x80\xe2\x80\x80"
75 "\xe4\x80\x80\xe8\x80\x80\xf0\x90\x80\x80\xf0\xa0\x80\x80\xf1"
76 "\x80\x80\x80\xf2\x80\x80\x80\xf4\x80\x80\x80\xf8\x88\x80\x80"
77 "\x80\xf8\x90\x80\x80\x80\xf8\xa0\x80\x80\x80\xf9\x80\x80\x80"
78 "\x80\xfa\x80\x80\x80\x80\xfc\x84\x80\x80\x80\x80\xfc\x88\x80"
79 "\x80\x80\x80\xfc\x90\x80\x80\x80\x80\xfc\xa0\x80\x80\x80\x80"
80 "\xfd\x80\x80\x80\x80\x80";
82 const ext_type* efrom_next;
83 const int_type i_lit[] = {
84 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9, 0xa, 0xb, 0xc,
85 0xd, 0xe, 0xf, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
86 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, L'!',
87 L'"', L'#', L'$', L'%', L'&', L'\'', L'(', L')', L'*', L'+',
88 L',', L'-', L'.', L'/', L'0', L'1', L'2', L'3', L'4', L'5',
89 L'6', L'7', L'8', L'9', L':', L';', L'<', L'=', L'>', L'?',
90 L'@', L'}', L'~', 0x7f, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85,
91 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
92 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99,
93 0x9a, 0x9b, 0x9c, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff, 0x100,
94 0x101, 0x102, 0x103, 0x104, 0x105, 0x106, 0x107, 0x108, 0x109,
95 0x10a, 0x10b, 0x10c, 0x10d, 0x10e, 0x10f, 0x110, 0x111, 0x112,
96 0x113, 0x114, 0x115, 0x116, 0x117, 0x118, 0x119, 0x7f8, 0x7f9,
97 0x7fa, 0x7fb, 0x7fc, 0x7fd, 0x7fe, 0x7ff, 0x800, 0x801, 0x802,
98 0x803, 0x804, 0x805, 0x806, 0x807, 0x808, 0x809, 0x80a, 0x80b,
99 0x80c, 0x80d, 0x80e, 0x80f, 0x810, 0x811, 0x812, 0x813, 0x814,
100 0x815, 0x816, 0x817, 0x1, 0x2, 0x4, 0x8, 0x10, 0x20, L'@',
101 0x80, 0x100, 0x200, 0x400, 0x800, 0x1000, 0x2000, 0x4000, 0x8000,
102 0x10000, 0x20000, 0x40000, 0x80000, 0x100000, 0x200000, 0x400000,
103 0x800000, 0x1000000, 0x2000000, 0x4000000, 0x8000000, 0x10000000,
104 0x20000000, 0x40000000, 0x0
107 int esize = strlen(e_lit);
108 int isize = wcslen(i_lit);
109 int_type* i_arr = new int_type[esize + 1];
110 int_type* i_ref = new int_type[esize + 1];
111 wmemset(i_arr, 0xdeadbeef, esize + 1);
112 wmemset(i_ref, 0xdeadbeef, esize + 1);
113 int_type* ito_next;
115 locale loc = locale("en_US.UTF-8");
116 locale::global(loc);
117 const w_codecvt* cvt = &use_facet<w_codecvt>(loc);
119 // in
120 w_codecvt::state_type state01;
121 zero_state(state01);
122 result r1 = cvt->in(state01, e_lit, e_lit + esize, efrom_next,
123 i_arr, i_arr + isize, ito_next);
124 VERIFY( r1 == codecvt_base::ok );
125 VERIFY( efrom_next == e_lit + esize );
126 VERIFY( ito_next == i_arr + isize );
127 VERIFY( !int_traits::compare(i_arr, i_lit, isize) );
128 VERIFY( !int_traits::compare(ito_next, i_ref, esize + 1 - isize) );
130 delete [] i_arr;
131 delete [] i_ref;
134 int main ()
136 test04();
137 return 0;