blob: 69af9ac1b7bf094cf4478030ec91d3c840b6a997 [file] [log] [blame]
Howard Hinnantbc8d3f92010-05-11 19:42:16 +00001//===----------------------------------------------------------------------===//
2//
Howard Hinnantf5256e12010-05-11 21:36:01 +00003// The LLVM Compiler Infrastructure
Howard Hinnantbc8d3f92010-05-11 19:42:16 +00004//
Howard Hinnantb64f8b02010-11-16 22:09:02 +00005// This file is dual licensed under the MIT and the University of Illinois Open
6// Source Licenses. See LICENSE.TXT for details.
Howard Hinnantbc8d3f92010-05-11 19:42:16 +00007//
8//===----------------------------------------------------------------------===//
9
10// <locale>
11
12// template <class charT> class collate_byname
13
Howard Hinnant22a74dc2010-08-22 00:39:25 +000014// int compare(const charT* low1, const charT* high1,
Howard Hinnantbc8d3f92010-05-11 19:42:16 +000015// 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
Eric Fiselier79578cd2014-10-23 21:17:36 +000021// 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
Howard Hinnantbc8d3f92010-05-11 19:42:16 +000026#include <locale>
27#include <string>
28#include <cassert>
29
30#include <stdio.h>
31
Marshall Clow83e2c4d2013-01-05 03:21:01 +000032#include "platform_support.h" // locale name macros
Howard Hinnantc0d0cba2011-10-03 15:23:59 +000033
Howard Hinnantbc8d3f92010-05-11 19:42:16 +000034int main()
35{
36 {
Howard Hinnantc0d0cba2011-10-03 15:23:59 +000037 std::locale l(LOCALE_en_US_UTF_8);
Howard Hinnantbc8d3f92010-05-11 19:42:16 +000038 {
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}