string.pass.cpp revision bc8d3f97eb5c958007f2713238472e0c1c8fe02
15c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)//===----------------------------------------------------------------------===//
25c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)//
35c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// ��������������������The LLVM Compiler Infrastructure
45c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)//
55c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// This file is distributed under the University of Illinois Open Source
65c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// License. See LICENSE.TXT for details.
75c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)//
85c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)//===----------------------------------------------------------------------===//
95c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// <locale>
115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// explicit locale(const string& std_name);
135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include <locale>
155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include <new>
165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include <cassert>
175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)int new_called = 0;
195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void* operator new(std::size_t s) throw(std::bad_alloc)
215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    ++new_called;
2353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)    return std::malloc(s);
245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
25c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)
265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void  operator delete(void* p) throw()
275d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles){
2851b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)    --new_called;
295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    std::free(p);
305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
325d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)void check(const std::locale& loc)
335d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles){
345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    assert(std::has_facet<std::collate<char> >(loc));
35    assert(std::has_facet<std::collate<wchar_t> >(loc));
36
37    assert(std::has_facet<std::ctype<char> >(loc));
38    assert(std::has_facet<std::ctype<wchar_t> >(loc));
39    assert((std::has_facet<std::codecvt<char, char, std::mbstate_t> >(loc)));
40    assert((std::has_facet<std::codecvt<char16_t, char, std::mbstate_t> >(loc)));
41    assert((std::has_facet<std::codecvt<char32_t, char, std::mbstate_t> >(loc)));
42    assert((std::has_facet<std::codecvt<wchar_t, char, std::mbstate_t> >(loc)));
43
44    assert((std::has_facet<std::moneypunct<char> >(loc)));
45    assert((std::has_facet<std::moneypunct<wchar_t> >(loc)));
46    assert((std::has_facet<std::money_get<char> >(loc)));
47    assert((std::has_facet<std::money_get<wchar_t> >(loc)));
48    assert((std::has_facet<std::money_put<char> >(loc)));
49    assert((std::has_facet<std::money_put<wchar_t> >(loc)));
50
51    assert((std::has_facet<std::numpunct<char> >(loc)));
52    assert((std::has_facet<std::numpunct<wchar_t> >(loc)));
53    assert((std::has_facet<std::num_get<char> >(loc)));
54    assert((std::has_facet<std::num_get<wchar_t> >(loc)));
55    assert((std::has_facet<std::num_put<char> >(loc)));
56    assert((std::has_facet<std::num_put<wchar_t> >(loc)));
57
58    assert((std::has_facet<std::time_get<char> >(loc)));
59    assert((std::has_facet<std::time_get<wchar_t> >(loc)));
60    assert((std::has_facet<std::time_put<char> >(loc)));
61    assert((std::has_facet<std::time_put<wchar_t> >(loc)));
62
63    assert((std::has_facet<std::messages<char> >(loc)));
64    assert((std::has_facet<std::messages<wchar_t> >(loc)));
65}
66
67int main()
68{
69    {
70        std::locale loc(std::string("ru_RU"));
71        check(loc);
72        std::locale loc2(std::string("ru_RU"));
73        check(loc2);
74        assert(loc == loc2);
75        std::locale loc3(std::string("zh_CN"));
76        check(loc3);
77        assert(!(loc == loc3));
78        assert(loc != loc3);
79    }
80    assert(new_called == 0);
81}
82