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
main()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