blob: 897141235cf202b7767d1e3a1de225ac841b5668 [file] [log] [blame]
Howard Hinnantbc8d3f92010-05-11 19:42:16 +00001//===----------------------------------------------------------------------===//
2//
Howard Hinnantf5256e12010-05-11 21:36:01 +00003// The LLVM Compiler Infrastructure
Howard Hinnantbc8d3f92010-05-11 19:42:16 +00004//
Howard Hinnantb64f8b02010-11-16 22:09:02 +00005// This file is dual licensed under the MIT and the University of Illinois Open
6// Source Licenses. See LICENSE.TXT for details.
Howard Hinnantbc8d3f92010-05-11 19:42:16 +00007//
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
Dan Albert5980ce32014-11-21 01:23:04 +000016// REQUIRES: locale.en_US.UTF-8
17
Howard Hinnantbc8d3f92010-05-11 19:42:16 +000018#include <locale>
19#include <string>
20#include <cassert>
21
22#include <stdio.h>
23
Marshall Clow83e2c4d2013-01-05 03:21:01 +000024#include "platform_support.h" // locale name macros
Howard Hinnantc0d0cba2011-10-03 15:23:59 +000025
Howard Hinnantbc8d3f92010-05-11 19:42:16 +000026int main()
27{
David Chisnalle2f2a152011-09-21 08:19:20 +000028 // Ensure that the default locale is not C. If it is, the second tests will fail.
Dan Albert1d4a1ed2016-05-25 22:36:09 -070029 putenv(const_cast<char*>("LANG=" LOCALE_en_US_UTF_8));
Howard Hinnantbc8d3f92010-05-11 19:42:16 +000030 {
Howard Hinnantc0d0cba2011-10-03 15:23:59 +000031 std::locale l(LOCALE_en_US_UTF_8);
Howard Hinnantbc8d3f92010-05-11 19:42:16 +000032 {
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}