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