locale_string_cat.pass.cpp revision c0d0cbad9ed434267a7af9531bdeeae52eb6d706
19085a016223a6b72bf580d5781c93ec7b9e54422ager@chromium.org//===----------------------------------------------------------------------===//
29085a016223a6b72bf580d5781c93ec7b9e54422ager@chromium.org//
39085a016223a6b72bf580d5781c93ec7b9e54422ager@chromium.org//                     The LLVM Compiler Infrastructure
45ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org//
55ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org// This file is dual licensed under the MIT and the University of Illinois Open
65ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org// Source Licenses. See LICENSE.TXT for details.
75ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org//
89085a016223a6b72bf580d5781c93ec7b9e54422ager@chromium.org//===----------------------------------------------------------------------===//
99085a016223a6b72bf580d5781c93ec7b9e54422ager@chromium.org
109085a016223a6b72bf580d5781c93ec7b9e54422ager@chromium.org// <locale>
119085a016223a6b72bf580d5781c93ec7b9e54422ager@chromium.org
129085a016223a6b72bf580d5781c93ec7b9e54422ager@chromium.org// locale(const locale& other, const string& std_name, category cat);
139085a016223a6b72bf580d5781c93ec7b9e54422ager@chromium.org
149085a016223a6b72bf580d5781c93ec7b9e54422ager@chromium.org#include <locale>
159085a016223a6b72bf580d5781c93ec7b9e54422ager@chromium.org#include <new>
169085a016223a6b72bf580d5781c93ec7b9e54422ager@chromium.org#include <cassert>
179085a016223a6b72bf580d5781c93ec7b9e54422ager@chromium.org
189085a016223a6b72bf580d5781c93ec7b9e54422ager@chromium.org#include "../../../../platform_support.h" // locale name macros
199085a016223a6b72bf580d5781c93ec7b9e54422ager@chromium.org
209085a016223a6b72bf580d5781c93ec7b9e54422ager@chromium.orgint new_called = 0;
219085a016223a6b72bf580d5781c93ec7b9e54422ager@chromium.org
229085a016223a6b72bf580d5781c93ec7b9e54422ager@chromium.orgvoid* operator new(std::size_t s) throw(std::bad_alloc)
239085a016223a6b72bf580d5781c93ec7b9e54422ager@chromium.org{
249085a016223a6b72bf580d5781c93ec7b9e54422ager@chromium.org    ++new_called;
259085a016223a6b72bf580d5781c93ec7b9e54422ager@chromium.org    return std::malloc(s);
269085a016223a6b72bf580d5781c93ec7b9e54422ager@chromium.org}
279085a016223a6b72bf580d5781c93ec7b9e54422ager@chromium.org
289085a016223a6b72bf580d5781c93ec7b9e54422ager@chromium.orgvoid  operator delete(void* p) throw()
299085a016223a6b72bf580d5781c93ec7b9e54422ager@chromium.org{
309085a016223a6b72bf580d5781c93ec7b9e54422ager@chromium.org    --new_called;
319085a016223a6b72bf580d5781c93ec7b9e54422ager@chromium.org    std::free(p);
329085a016223a6b72bf580d5781c93ec7b9e54422ager@chromium.org}
3356454717593e7552d6846198b8e0f661fa36a3cayangguo@chromium.org
349085a016223a6b72bf580d5781c93ec7b9e54422ager@chromium.orgvoid check(const std::locale& loc)
359085a016223a6b72bf580d5781c93ec7b9e54422ager@chromium.org{
369085a016223a6b72bf580d5781c93ec7b9e54422ager@chromium.org    assert(std::has_facet<std::collate<char> >(loc));
379085a016223a6b72bf580d5781c93ec7b9e54422ager@chromium.org    assert(std::has_facet<std::collate<wchar_t> >(loc));
389085a016223a6b72bf580d5781c93ec7b9e54422ager@chromium.org
399085a016223a6b72bf580d5781c93ec7b9e54422ager@chromium.org    assert(std::has_facet<std::ctype<char> >(loc));
40196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org    assert(std::has_facet<std::ctype<wchar_t> >(loc));
41c4c927273ae2b690c4a015b4640a2a469c9a1a69ager@chromium.org    assert((std::has_facet<std::codecvt<char, char, std::mbstate_t> >(loc)));
4271affb54842da76b24f0bb3184e9f0960523f89dkasperl@chromium.org    assert((std::has_facet<std::codecvt<char16_t, char, std::mbstate_t> >(loc)));
4371affb54842da76b24f0bb3184e9f0960523f89dkasperl@chromium.org    assert((std::has_facet<std::codecvt<char32_t, char, std::mbstate_t> >(loc)));
449085a016223a6b72bf580d5781c93ec7b9e54422ager@chromium.org    assert((std::has_facet<std::codecvt<wchar_t, char, std::mbstate_t> >(loc)));
45e2902be65446e26fd63a3b4eab2f14257cf4ebafager@chromium.org
46e2902be65446e26fd63a3b4eab2f14257cf4ebafager@chromium.org    assert((std::has_facet<std::moneypunct<char> >(loc)));
479085a016223a6b72bf580d5781c93ec7b9e54422ager@chromium.org    assert((std::has_facet<std::moneypunct<wchar_t> >(loc)));
489085a016223a6b72bf580d5781c93ec7b9e54422ager@chromium.org    assert((std::has_facet<std::money_get<char> >(loc)));
499085a016223a6b72bf580d5781c93ec7b9e54422ager@chromium.org    assert((std::has_facet<std::money_get<wchar_t> >(loc)));
509085a016223a6b72bf580d5781c93ec7b9e54422ager@chromium.org    assert((std::has_facet<std::money_put<char> >(loc)));
519085a016223a6b72bf580d5781c93ec7b9e54422ager@chromium.org    assert((std::has_facet<std::money_put<wchar_t> >(loc)));
529085a016223a6b72bf580d5781c93ec7b9e54422ager@chromium.org
539085a016223a6b72bf580d5781c93ec7b9e54422ager@chromium.org    assert((std::has_facet<std::numpunct<char> >(loc)));
549085a016223a6b72bf580d5781c93ec7b9e54422ager@chromium.org    assert((std::has_facet<std::numpunct<wchar_t> >(loc)));
559085a016223a6b72bf580d5781c93ec7b9e54422ager@chromium.org    assert((std::has_facet<std::num_get<char> >(loc)));
569085a016223a6b72bf580d5781c93ec7b9e54422ager@chromium.org    assert((std::has_facet<std::num_get<wchar_t> >(loc)));
579085a016223a6b72bf580d5781c93ec7b9e54422ager@chromium.org    assert((std::has_facet<std::num_put<char> >(loc)));
589085a016223a6b72bf580d5781c93ec7b9e54422ager@chromium.org    assert((std::has_facet<std::num_put<wchar_t> >(loc)));
599085a016223a6b72bf580d5781c93ec7b9e54422ager@chromium.org
609085a016223a6b72bf580d5781c93ec7b9e54422ager@chromium.org    assert((std::has_facet<std::time_get<char> >(loc)));
619085a016223a6b72bf580d5781c93ec7b9e54422ager@chromium.org    assert((std::has_facet<std::time_get<wchar_t> >(loc)));
629085a016223a6b72bf580d5781c93ec7b9e54422ager@chromium.org    assert((std::has_facet<std::time_put<char> >(loc)));
639085a016223a6b72bf580d5781c93ec7b9e54422ager@chromium.org    assert((std::has_facet<std::time_put<wchar_t> >(loc)));
649085a016223a6b72bf580d5781c93ec7b9e54422ager@chromium.org
659085a016223a6b72bf580d5781c93ec7b9e54422ager@chromium.org    assert((std::has_facet<std::messages<char> >(loc)));
669085a016223a6b72bf580d5781c93ec7b9e54422ager@chromium.org    assert((std::has_facet<std::messages<wchar_t> >(loc)));
679085a016223a6b72bf580d5781c93ec7b9e54422ager@chromium.org}
689085a016223a6b72bf580d5781c93ec7b9e54422ager@chromium.org
699085a016223a6b72bf580d5781c93ec7b9e54422ager@chromium.orgint main()
70a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org{
71a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org    {
72a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org        std::locale loc(LOCALE_ru_RU_UTF_8);
73a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org        check(loc);
74b08986cb66c3f6687247cb6da186c1e73057e399whesse@chromium.org        std::locale loc2(loc, std::string(LOCALE_en_US_UTF_8), std::locale::monetary);
75a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org        check(loc2);
76935a7790c70d49e252069bc2d34eaa72f8c6677fmachenbach@chromium.org    }
77a6bbcc801f63c451f814d6da77a1a48fba3d36c6yangguo@chromium.org    assert(new_called == 0);
78a6bbcc801f63c451f814d6da77a1a48fba3d36c6yangguo@chromium.org}
79a6bbcc801f63c451f814d6da77a1a48fba3d36c6yangguo@chromium.org