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 #include <locale>
22 #include <string>
23 #include <cassert>
24 
25 #include <stdio.h>
26 
27 #include "platform_support.h" // locale name macros
28 
29 int main()
30 {
31     {
32         std::locale l(LOCALE_en_US_UTF_8);
33         {
34             const std::collate<char>& f = std::use_facet<std::collate<char> >(l);
35             std::string s2("aaaaaaA");
36             std::string s3("BaaaaaA");
37             assert(f.compare(s2.data(), s2.data() + s2.size(),
38                              s3.data(), s3.data() + s3.size()) == 1);
39         }
40         {
41             const std::collate<wchar_t>& f = std::use_facet<std::collate<wchar_t> >(l);
42             std::wstring s2(L"aaaaaaA");
43             std::wstring s3(L"BaaaaaA");
44             assert(f.compare(s2.data(), s2.data() + s2.size(),
45                              s3.data(), s3.data() + s3.size()) == 1);
46         }
47     }
48     {
49         std::locale l("");
50         {
51             const std::collate<char>& f = std::use_facet<std::collate<char> >(l);
52             std::string s2("aaaaaaA");
53             std::string s3("BaaaaaA");
54             assert(f.compare(s2.data(), s2.data() + s2.size(),
55                              s3.data(), s3.data() + s3.size()) == 1);
56         }
57         {
58             const std::collate<wchar_t>& f = std::use_facet<std::collate<wchar_t> >(l);
59             std::wstring s2(L"aaaaaaA");
60             std::wstring s3(L"BaaaaaA");
61             assert(f.compare(s2.data(), s2.data() + s2.size(),
62                              s3.data(), s3.data() + s3.size()) == 1);
63         }
64     }
65     {
66         std::locale l("C");
67         {
68             const std::collate<char>& f = std::use_facet<std::collate<char> >(l);
69             std::string s2("aaaaaaA");
70             std::string s3("BaaaaaA");
71             assert(f.compare(s2.data(), s2.data() + s2.size(),
72                              s3.data(), s3.data() + s3.size()) == 1);
73         }
74         {
75             const std::collate<wchar_t>& f = std::use_facet<std::collate<wchar_t> >(l);
76             std::wstring s2(L"aaaaaaA");
77             std::wstring s3(L"BaaaaaA");
78             assert(f.compare(s2.data(), s2.data() + s2.size(),
79                              s3.data(), s3.data() + s3.size()) == 1);
80         }
81     }
82 }
83