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