]> git.ipfire.org Git - thirdparty/gcc.git/blame - libstdc++-v3/testsuite/22_locale/facet/2.cc
re PR testsuite/39696 (gcc.dg/tree-ssa/ssa-ccp-25.c scan-tree-dump doesn't work on...
[thirdparty/gcc.git] / libstdc++-v3 / testsuite / 22_locale / facet / 2.cc
CommitLineData
f63a8495
PC
1// { dg-require-namedlocale "" }
2
5f8d36fe
BK
3// 2000-08-31 Benjamin Kosnik <bkoz@redhat.com>
4
f63a8495 5// Copyright (C) 2000, 2002, 2003, 2005 Free Software Foundation
5f8d36fe
BK
6//
7// This file is part of the GNU ISO C++ Library. This library is free
8// software; you can redistribute it and/or modify it under the
9// terms of the GNU General Public License as published by the
10// Free Software Foundation; either version 2, or (at your option)
11// any later version.
12
13// This library is distributed in the hope that it will be useful,
14// but WITHOUT ANY WARRANTY; without even the implied warranty of
15// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16// GNU General Public License for more details.
17
18// You should have received a copy of the GNU General Public License along
19// with this library; see the file COPYING. If not, write to the Free
83f51799 20// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
5f8d36fe
BK
21// USA.
22
23// 22.1.1.1.2 - class locale::facet [lib.locale.facet]
24
25#include <cwchar> // for mbstate_t
26#include <locale>
27#include <stdexcept>
28#include <string>
29#include <iterator>
30#include <limits>
31#include <testsuite_hooks.h>
32
33// Static counter for use in checking ctors/dtors.
34static std::size_t counter;
35
36class surf : public std::locale::facet
37{
38public:
39 static std::locale::id id;
40 surf(size_t refs = 0): std::locale::facet(refs) { ++counter; }
41 ~surf() { --counter; }
42};
43
44std::locale::id surf::id;
45
46typedef surf facet_type;
47
48void test02()
49{
50 using namespace std;
11f10e6b 51 bool test __attribute__((unused)) = true;
5f8d36fe
BK
52
53 // 1: Destroyed when out of scope.
54 VERIFY( counter == 0 );
55 {
56 locale loc01(locale::classic(), new facet_type);
57 VERIFY( counter == 1 );
58 }
59 VERIFY( counter == 0 );
60
61 // 2: Not destroyed when out of scope, deliberately leaked.
62 VERIFY( counter == 0 );
63 {
64 // Default refs argument is zero.
65 locale loc02(locale::classic(), new facet_type(1));
66 VERIFY( counter == 1 );
67 }
68 VERIFY( counter == 1 );
69
70 // 3: Pathological.
71 counter = 0;
72 {
73 // Test bounds.
74 facet_type* f = new facet_type(numeric_limits<size_t>::max());
75 VERIFY( counter == 1 );
76 // Add a reference.
77 locale loc01(locale::classic(), f);
78 {
79 // Add another reference...
80 locale loc02(locale::classic(), f);
81 }
82 VERIFY( counter == 1 );
83 }
84
85 // 4: Named locale should destroy facets when it goes out of scope.
86 // Not quite sure how to test for this w/o valgrind at the moment.
87 {
f63a8495 88 locale loc03 = locale("es_MX");
5f8d36fe
BK
89 }
90}
91
92int main ()
93{
3d838e28 94 test02();
5f8d36fe
BK
95 return 0;
96}