summaryrefslogtreecommitdiff
path: root/libstdc++-v3/testsuite/22_locale/ctype/narrow
diff options
context:
space:
mode:
Diffstat (limited to 'libstdc++-v3/testsuite/22_locale/ctype/narrow')
-rw-r--r--libstdc++-v3/testsuite/22_locale/ctype/narrow/char/1.cc60
-rw-r--r--libstdc++-v3/testsuite/22_locale/ctype/narrow/char/19955.cc97
-rw-r--r--libstdc++-v3/testsuite/22_locale/ctype/narrow/char/2.cc64
-rw-r--r--libstdc++-v3/testsuite/22_locale/ctype/narrow/char/wrapped_env.cc42
-rw-r--r--libstdc++-v3/testsuite/22_locale/ctype/narrow/char/wrapped_locale.cc42
-rw-r--r--libstdc++-v3/testsuite/22_locale/ctype/narrow/wchar_t/1.cc60
-rw-r--r--libstdc++-v3/testsuite/22_locale/ctype/narrow/wchar_t/2.cc64
-rw-r--r--libstdc++-v3/testsuite/22_locale/ctype/narrow/wchar_t/3.cc49
-rw-r--r--libstdc++-v3/testsuite/22_locale/ctype/narrow/wchar_t/wrapped_env.cc42
-rw-r--r--libstdc++-v3/testsuite/22_locale/ctype/narrow/wchar_t/wrapped_locale.cc42
10 files changed, 562 insertions, 0 deletions
diff --git a/libstdc++-v3/testsuite/22_locale/ctype/narrow/char/1.cc b/libstdc++-v3/testsuite/22_locale/ctype/narrow/char/1.cc
new file mode 100644
index 000000000..7ee104ae3
--- /dev/null
+++ b/libstdc++-v3/testsuite/22_locale/ctype/narrow/char/1.cc
@@ -0,0 +1,60 @@
+// 2002-05-24 bkoz
+
+// Copyright (C) 2002, 2003, 2009 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+
+// 22.2.1.3.2 ctype<char> members
+
+#include <locale>
+#include <vector>
+#include <testsuite_hooks.h>
+
+// libstdc++/6701
+void test01()
+{
+ using namespace std;
+ typedef char wide_type;
+
+ bool test __attribute__((unused)) = true;
+ const char dfault = '?';
+ const locale loc_c = locale::classic();
+ const ctype<wide_type>& ctype_c = use_facet<ctype<wide_type> >(loc_c);
+
+ basic_string<wide_type> wide("wibble");
+ basic_string<char> narrow("wibble");
+ vector<char> narrow_chars(wide.length() + 1);
+
+ // narrow(charT c, char dfault) const
+ for (size_t i = 0; i < wide.length(); ++i)
+ {
+ char c = ctype_c.narrow(wide[i], dfault);
+ VERIFY( c == narrow[i] );
+ }
+
+ // narrow(const charT* low, const charT* high, char dfault, char* dest) const
+ ctype_c.narrow(&wide[0], &wide[0] + wide.length(), dfault, &narrow_chars[0]);
+ VERIFY( narrow_chars[0] != dfault );
+ for (size_t i = 0; i < wide.length(); ++i)
+ VERIFY( narrow_chars[i] == narrow[i] );
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/22_locale/ctype/narrow/char/19955.cc b/libstdc++-v3/testsuite/22_locale/ctype/narrow/char/19955.cc
new file mode 100644
index 000000000..c661d91e7
--- /dev/null
+++ b/libstdc++-v3/testsuite/22_locale/ctype/narrow/char/19955.cc
@@ -0,0 +1,97 @@
+// Copyright (C) 2005, 2006, 2007, 2009 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+
+// 22.2.1.3.2 ctype<char> members
+
+#include <locale>
+#include <cstring>
+#include <testsuite_hooks.h>
+
+class Ctype1
+: public std::ctype<char>
+{
+protected:
+ const char*
+ do_narrow(const char* lo, const char* hi,
+ char, char* to) const
+ {
+ for (int i = 0; lo != hi; ++lo, ++to, ++i)
+ *to = *lo + i;
+ return hi;
+ }
+};
+
+class Ctype2
+: public std::ctype<char>
+{
+protected:
+ const char*
+ do_narrow(const char* lo, const char* hi,
+ char dflt, char* to) const
+ {
+ for (int i = 0; lo != hi; ++lo, ++to, ++i)
+ if (*lo == '\000')
+ *to = dflt;
+ else
+ *to = *lo;
+ return hi;
+ }
+};
+
+// libstdc++/19955
+void test01()
+{
+ using namespace std;
+ bool test __attribute__((unused)) = true;
+
+ const char src[] = "abcd";
+
+ locale mylocale1(locale::classic(), new Ctype1);
+ const ctype<char>& mc1 = use_facet<ctype<char> >(mylocale1);
+
+ char dst1[sizeof(src)];
+ memset(dst1, 0, sizeof(src));
+ char dst2[sizeof(src)];
+ memset(dst2, 0, sizeof(src));
+
+ mc1.narrow(src, src + sizeof(src), '*', dst1);
+ mc1.narrow(src, src + sizeof(src), '*', dst2);
+
+ VERIFY( !memcmp(dst1, "aceg\004", 5) );
+ VERIFY( !memcmp(dst1, dst2, 5) );
+
+ locale mylocale2(locale::classic(), new Ctype2);
+ const ctype<char>& mc2 = use_facet<ctype<char> >(mylocale2);
+
+ char dst3[sizeof(src)];
+ memset(dst3, 0, sizeof(src));
+ char dst4[sizeof(src)];
+ memset(dst4, 0, sizeof(src));
+
+ mc2.narrow(src, src + sizeof(src), '*', dst3);
+ mc2.narrow(src, src + sizeof(src), '*', dst4);
+
+ VERIFY( !memcmp(dst3, "abcd*", 5) );
+ VERIFY( !memcmp(dst3, dst4, 5) );
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/22_locale/ctype/narrow/char/2.cc b/libstdc++-v3/testsuite/22_locale/ctype/narrow/char/2.cc
new file mode 100644
index 000000000..f49d5140b
--- /dev/null
+++ b/libstdc++-v3/testsuite/22_locale/ctype/narrow/char/2.cc
@@ -0,0 +1,64 @@
+// 2002-05-24 bkoz
+
+// Copyright (C) 2002, 2003, 2009 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+
+// 22.2.1.3.2 ctype<char> members
+
+#include <locale>
+#include <vector>
+#include <testsuite_hooks.h>
+
+void test02()
+{
+ using namespace std;
+ typedef char wide_type;
+
+ bool test __attribute__((unused)) = true;
+ const char dfault = '?';
+ const locale loc_c = locale::classic();
+ const ctype<wide_type>& ctype_c = use_facet<ctype<wide_type> >(loc_c);
+
+ // Construct non-asci string.
+ basic_string<wide_type> wide("wibble");
+ wide += wide_type(1240);
+ wide += "kibble";
+ basic_string<char> narrow("wibble");
+ narrow += char(1240);
+ narrow += "kibble";
+ vector<char> narrow_chars(wide.length() + 1);
+
+ // narrow(charT c, char dfault) const
+ for (size_t i = 0; i < wide.length(); ++i)
+ {
+ char c = ctype_c.narrow(wide[i], dfault);
+ VERIFY( c == narrow[i] );
+ }
+
+ // narrow(const charT* low, const charT* high, char dfault, char* dest) const
+ ctype_c.narrow(&wide[0], &wide[0] + wide.length(), dfault, &narrow_chars[0]);
+ VERIFY( narrow_chars[0] != dfault );
+ for (size_t i = 0; i < wide.length(); ++i)
+ VERIFY( narrow_chars[i] == narrow[i] );
+}
+
+int main()
+{
+ test02();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/22_locale/ctype/narrow/char/wrapped_env.cc b/libstdc++-v3/testsuite/22_locale/ctype/narrow/char/wrapped_env.cc
new file mode 100644
index 000000000..b9961e493
--- /dev/null
+++ b/libstdc++-v3/testsuite/22_locale/ctype/narrow/char/wrapped_env.cc
@@ -0,0 +1,42 @@
+// { dg-require-namedlocale "de_DE" }
+
+// 2001-08-15 Benjamin Kosnik <bkoz@redhat.com>
+
+// Copyright (C) 2001, 2002, 2003, 2005, 2009 Free Software Foundation
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// 22.2.4.1.1 collate members
+
+#include <testsuite_hooks.h>
+
+#define main discard_main_1
+#include "1.cc"
+#undef main
+
+#define main discard_main_2
+#include "2.cc"
+#undef main
+
+int main()
+{
+ using namespace __gnu_test;
+ func_callback two;
+ two.push_back(&test01);
+ two.push_back(&test02);
+ run_tests_wrapped_env("de_DE", "LANG", two);
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/22_locale/ctype/narrow/char/wrapped_locale.cc b/libstdc++-v3/testsuite/22_locale/ctype/narrow/char/wrapped_locale.cc
new file mode 100644
index 000000000..303275c9b
--- /dev/null
+++ b/libstdc++-v3/testsuite/22_locale/ctype/narrow/char/wrapped_locale.cc
@@ -0,0 +1,42 @@
+// { dg-require-namedlocale "ja_JP.eucjp" }
+
+// 2001-08-15 Benjamin Kosnik <bkoz@redhat.com>
+
+// Copyright (C) 2001, 2002, 2003, 2009 Free Software Foundation
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// 22.2.4.1.1 collate members
+
+#include <testsuite_hooks.h>
+
+#define main discard_main_1
+#include "1.cc"
+#undef main
+
+#define main discard_main_2
+#include "2.cc"
+#undef main
+
+int main()
+{
+ using namespace __gnu_test;
+ func_callback two;
+ two.push_back(&test01);
+ two.push_back(&test02);
+ run_tests_wrapped_locale("ja_JP.eucjp", two);
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/22_locale/ctype/narrow/wchar_t/1.cc b/libstdc++-v3/testsuite/22_locale/ctype/narrow/wchar_t/1.cc
new file mode 100644
index 000000000..82f4c0414
--- /dev/null
+++ b/libstdc++-v3/testsuite/22_locale/ctype/narrow/wchar_t/1.cc
@@ -0,0 +1,60 @@
+// 2002-05-24 bkoz
+
+// Copyright (C) 2002, 2003, 2009 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+
+// 22.2.1.3.2 ctype<char> members
+
+#include <locale>
+#include <vector>
+#include <testsuite_hooks.h>
+
+// libstdc++/6701
+void test01()
+{
+ using namespace std;
+ typedef wchar_t wide_type;
+
+ bool test __attribute__((unused)) = true;
+ const char dfault = '?';
+ const locale loc_c = locale::classic();
+ const ctype<wide_type>& ctype_c = use_facet<ctype<wide_type> >(loc_c);
+
+ basic_string<wide_type> wide(L"wibble");
+ basic_string<char> narrow("wibble");
+ vector<char> narrow_chars(wide.length() + 1);
+
+ // narrow(charT c, char dfault) const
+ for (size_t i = 0; i < wide.length(); ++i)
+ {
+ char c = ctype_c.narrow(wide[i], dfault);
+ VERIFY( c == narrow[i] );
+ }
+
+ // narrow(const charT* low, const charT* high, char dfault, char* dest) const
+ ctype_c.narrow(&wide[0], &wide[0] + wide.length(), dfault, &narrow_chars[0]);
+ VERIFY( narrow_chars[0] != dfault );
+ for (size_t i = 0; i < wide.length(); ++i)
+ VERIFY( narrow_chars[i] == narrow[i] );
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/22_locale/ctype/narrow/wchar_t/2.cc b/libstdc++-v3/testsuite/22_locale/ctype/narrow/wchar_t/2.cc
new file mode 100644
index 000000000..cf7ac4cde
--- /dev/null
+++ b/libstdc++-v3/testsuite/22_locale/ctype/narrow/wchar_t/2.cc
@@ -0,0 +1,64 @@
+// 2002-05-24 bkoz
+
+// Copyright (C) 2002, 2003, 2009 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+
+// 22.2.1.3.2 ctype<char> members
+
+#include <locale>
+#include <vector>
+#include <testsuite_hooks.h>
+
+void test02()
+{
+ using namespace std;
+ typedef wchar_t wide_type;
+
+ bool test __attribute__((unused)) = true;
+ const char dfault = '?';
+ const locale loc_c = locale::classic();
+ const ctype<wide_type>& ctype_c = use_facet<ctype<wide_type> >(loc_c);
+
+ // Construct non-asci string.
+ basic_string<wide_type> wide(L"wibble");
+ wide += wide_type(1240);
+ wide += L"kibble";
+ basic_string<char> narrow("wibble");
+ narrow += dfault;
+ narrow += "kibble";
+ vector<char> narrow_chars(wide.length() + 1);
+
+ // narrow(charT c, char dfault) const
+ for (size_t i = 0; i < wide.length(); ++i)
+ {
+ char c = ctype_c.narrow(wide[i], dfault);
+ VERIFY( c == narrow[i] );
+ }
+
+ // narrow(const charT* low, const charT* high, char dfault, char* dest) const
+ ctype_c.narrow(&wide[0], &wide[0] + wide.length(), dfault, &narrow_chars[0]);
+ VERIFY( narrow_chars[0] != dfault );
+ for (size_t i = 0; i < wide.length(); ++i)
+ VERIFY( narrow_chars[i] == narrow[i] );
+}
+
+int main()
+{
+ test02();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/22_locale/ctype/narrow/wchar_t/3.cc b/libstdc++-v3/testsuite/22_locale/ctype/narrow/wchar_t/3.cc
new file mode 100644
index 000000000..5bd6e07d6
--- /dev/null
+++ b/libstdc++-v3/testsuite/22_locale/ctype/narrow/wchar_t/3.cc
@@ -0,0 +1,49 @@
+// { dg-require-namedlocale "se_NO.UTF-8" }
+
+// 2003-03-12 Petur Runolfsson <peturr02@ru.is>
+
+// Copyright (C) 2003, 2005, 2009 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+
+// 22.2.1.3.2 ctype<wchar_t> members
+
+#include <locale>
+#include <testsuite_hooks.h>
+
+// libstdc++/9581
+void test03()
+{
+ using namespace std;
+ bool test __attribute__((unused)) = true;
+
+ locale loc = locale("se_NO.UTF-8");
+ const ctype<wchar_t>& wct = use_facet<ctype<wchar_t> >(loc);
+
+ const wchar_t* wstrlit = L"\x80";
+
+ char buf[2];
+ wct.narrow(wstrlit, wstrlit + 2, ' ', buf);
+ VERIFY( buf[0] == wct.narrow(wstrlit[0], ' ') );
+ VERIFY( buf[1] == wct.narrow(wstrlit[1], ' ') );
+}
+
+int main()
+{
+ test03();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/22_locale/ctype/narrow/wchar_t/wrapped_env.cc b/libstdc++-v3/testsuite/22_locale/ctype/narrow/wchar_t/wrapped_env.cc
new file mode 100644
index 000000000..b9961e493
--- /dev/null
+++ b/libstdc++-v3/testsuite/22_locale/ctype/narrow/wchar_t/wrapped_env.cc
@@ -0,0 +1,42 @@
+// { dg-require-namedlocale "de_DE" }
+
+// 2001-08-15 Benjamin Kosnik <bkoz@redhat.com>
+
+// Copyright (C) 2001, 2002, 2003, 2005, 2009 Free Software Foundation
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// 22.2.4.1.1 collate members
+
+#include <testsuite_hooks.h>
+
+#define main discard_main_1
+#include "1.cc"
+#undef main
+
+#define main discard_main_2
+#include "2.cc"
+#undef main
+
+int main()
+{
+ using namespace __gnu_test;
+ func_callback two;
+ two.push_back(&test01);
+ two.push_back(&test02);
+ run_tests_wrapped_env("de_DE", "LANG", two);
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/22_locale/ctype/narrow/wchar_t/wrapped_locale.cc b/libstdc++-v3/testsuite/22_locale/ctype/narrow/wchar_t/wrapped_locale.cc
new file mode 100644
index 000000000..3ae613f84
--- /dev/null
+++ b/libstdc++-v3/testsuite/22_locale/ctype/narrow/wchar_t/wrapped_locale.cc
@@ -0,0 +1,42 @@
+// { dg-require-namedlocale "ja_JP.eucjp" }
+
+// 2001-08-15 Benjamin Kosnik <bkoz@redhat.com>
+
+// Copyright (C) 2001, 2002, 2003, 2005, 2009 Free Software Foundation
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// 22.2.4.1.1 collate members
+
+#include <testsuite_hooks.h>
+
+#define main discard_main_1
+#include "1.cc"
+#undef main
+
+#define main discard_main_2
+#include "2.cc"
+#undef main
+
+int main()
+{
+ using namespace __gnu_test;
+ func_callback two;
+ two.push_back(&test01);
+ two.push_back(&test02);
+ run_tests_wrapped_locale("ja_JP.eucjp", two);
+ return 0;
+}