• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 //===----------------------------------------------------------------------===//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file is dual licensed under the MIT and the University of Illinois Open
6 // Source Licenses. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 
10 // <locale>
11 
12 // template <class charT> class collate_byname
13 
14 // int compare(const charT* low1, const charT* high1,
15 //             const charT* low2, const charT* high2) const;
16 
17 //  I'm currently unable to confirm that collation based on named locales
18 //     has any difference from "C" collation.  But I do believe I'm picking
19 //     up the OS's collation files.
20 
21 // TODO investigation needed.
22 // Glibc seems to collate files differently from the way Apple's C library does
23 // it.
24 // XFAIL: linux-gnu
25 
26 #include <locale>
27 #include <string>
28 #include <cassert>
29 
30 #include <stdio.h>
31 
32 #include "platform_support.h" // locale name macros
33 
main()34 int main()
35 {
36     {
37         std::locale l(LOCALE_en_US_UTF_8);
38         {
39             const std::collate<char>& f = std::use_facet<std::collate<char> >(l);
40             std::string s2("aaaaaaA");
41             std::string s3("BaaaaaA");
42             assert(f.compare(s2.data(), s2.data() + s2.size(),
43                              s3.data(), s3.data() + s3.size()) == 1);
44         }
45         {
46             const std::collate<wchar_t>& f = std::use_facet<std::collate<wchar_t> >(l);
47             std::wstring s2(L"aaaaaaA");
48             std::wstring s3(L"BaaaaaA");
49             assert(f.compare(s2.data(), s2.data() + s2.size(),
50                              s3.data(), s3.data() + s3.size()) == 1);
51         }
52     }
53     {
54         std::locale l("");
55         {
56             const std::collate<char>& f = std::use_facet<std::collate<char> >(l);
57             std::string s2("aaaaaaA");
58             std::string s3("BaaaaaA");
59             assert(f.compare(s2.data(), s2.data() + s2.size(),
60                              s3.data(), s3.data() + s3.size()) == 1);
61         }
62         {
63             const std::collate<wchar_t>& f = std::use_facet<std::collate<wchar_t> >(l);
64             std::wstring s2(L"aaaaaaA");
65             std::wstring s3(L"BaaaaaA");
66             assert(f.compare(s2.data(), s2.data() + s2.size(),
67                              s3.data(), s3.data() + s3.size()) == 1);
68         }
69     }
70     {
71         std::locale l("C");
72         {
73             const std::collate<char>& f = std::use_facet<std::collate<char> >(l);
74             std::string s2("aaaaaaA");
75             std::string s3("BaaaaaA");
76             assert(f.compare(s2.data(), s2.data() + s2.size(),
77                              s3.data(), s3.data() + s3.size()) == 1);
78         }
79         {
80             const std::collate<wchar_t>& f = std::use_facet<std::collate<wchar_t> >(l);
81             std::wstring s2(L"aaaaaaA");
82             std::wstring s3(L"BaaaaaA");
83             assert(f.compare(s2.data(), s2.data() + s2.size(),
84                              s3.data(), s3.data() + s3.size()) == 1);
85         }
86     }
87 }
88