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