transform.pass.cpp revision 83e2c4d877fe2d7793868b1c6a5d9525a7c4d431
12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)//===----------------------------------------------------------------------===// 22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// 32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// The LLVM Compiler Infrastructure 42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// 52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// This file is dual licensed under the MIT and the University of Illinois Open 62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Source Licenses. See LICENSE.TXT for details. 72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// 82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)//===----------------------------------------------------------------------===// 92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// <locale> 11cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 12c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch// template <class charT> class collate_byname 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// string_type transform(const charT* low, const charT* high) const; 152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include <locale> 172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include <string> 182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include <cassert> 192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 20c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#include <stdio.h> 21010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 22c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#include "platform_support.h" // locale name macros 23c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 24c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochint main() 25c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch{ 26c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // Ensure that the default locale is not C. If it is, the second tests will fail. 27c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch putenv(const_cast<char*>("LANG=" LOCALE_en_US_UTF_8)); 28c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch { 29c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch std::locale l(LOCALE_en_US_UTF_8); 30c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch { 31cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) std::string x("1234"); 32cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const std::collate<char>& f = std::use_facet<std::collate<char> >(l); 33cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) assert(f.transform(x.data(), x.data() + x.size()) != x); 342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { 362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::wstring x(L"1234"); 372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::collate<wchar_t>& f = std::use_facet<std::collate<wchar_t> >(l); 382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) assert(f.transform(x.data(), x.data() + x.size()) != x); 392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { 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