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 // string_type transform(const charT* low, const charT* high) const; 15 16 // REQUIRES: locale.en_US.UTF-8 17 18 #include <locale> 19 #include <string> 20 #include <cassert> 21 22 #include <stdio.h> 23 24 #include "platform_support.h" // locale name macros 25 main()26int main() 27 { 28 // Ensure that the default locale is not C. If it is, the second tests will fail. 29 putenv(const_cast<char*>("LANG=" LOCALE_en_US_UTF_8)); 30 { 31 std::locale l(LOCALE_en_US_UTF_8); 32 { 33 std::string x("1234"); 34 const std::collate<char>& f = std::use_facet<std::collate<char> >(l); 35 assert(f.transform(x.data(), x.data() + x.size()) != x); 36 } 37 { 38 std::wstring x(L"1234"); 39 const std::collate<wchar_t>& f = std::use_facet<std::collate<wchar_t> >(l); 40 assert(f.transform(x.data(), x.data() + x.size()) != x); 41 } 42 } 43 { 44 std::locale l(""); 45 { 46 std::string x("1234"); 47 const std::collate<char>& f = std::use_facet<std::collate<char> >(l); 48 assert(f.transform(x.data(), x.data() + x.size()) != x); 49 } 50 { 51 std::wstring x(L"1234"); 52 const std::collate<wchar_t>& f = std::use_facet<std::collate<wchar_t> >(l); 53 assert(f.transform(x.data(), x.data() + x.size()) != x); 54 } 55 } 56 { 57 std::locale l("C"); 58 { 59 std::string x("1234"); 60 const std::collate<char>& f = std::use_facet<std::collate<char> >(l); 61 assert(f.transform(x.data(), x.data() + x.size()) == x); 62 } 63 { 64 std::wstring x(L"1234"); 65 const std::collate<wchar_t>& f = std::use_facet<std::collate<wchar_t> >(l); 66 assert(f.transform(x.data(), x.data() + x.size()) == x); 67 } 68 } 69 } 70