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