OpenCores
URL https://opencores.org/ocsvn/scarts/scarts/trunk

Subversion Repositories scarts

[/] [scarts/] [trunk/] [toolchain/] [scarts-gcc/] [gcc-4.1.1/] [libstdc++-v3/] [testsuite/] [22_locale/] [locale/] [global_locale_objects/] [3.cc] - Blame information for rev 19

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 19 jlechner
// 2000-09-13 Benjamin Kosnik <bkoz@redhat.com>
2
 
3
// Copyright (C) 2000, 2002, 2003 Free Software Foundation
4
//
5
// This file is part of the GNU ISO C++ Library.  This library is free
6
// software; you can redistribute it and/or modify it under the
7
// terms of the GNU General Public License as published by the
8
// Free Software Foundation; either version 2, or (at your option)
9
// any later version.
10
 
11
// This library is distributed in the hope that it will be useful,
12
// but WITHOUT ANY WARRANTY; without even the implied warranty of
13
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
// GNU General Public License for more details.
15
 
16
// You should have received a copy of the GNU General Public License along
17
// with this library; see the file COPYING.  If not, write to the Free
18
// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
19
// USA.
20
 
21
// 22.1.1.5 locale static members [lib.locale.statics]
22
 
23
#include <cwchar> // for mbstate_t
24
#include <locale>
25
#include <testsuite_hooks.h>
26
 
27
// Static counter for use in checking ctors/dtors.
28
static std::size_t counter;
29
 
30
class surf : public std::locale::facet
31
{
32
public:
33
  static std::locale::id                id;
34
  surf(size_t refs = 0): std::locale::facet(refs) { ++counter; }
35
  ~surf() { --counter; }
36
};
37
 
38
std::locale::id surf::id;
39
 
40
typedef surf facet_type;
41
 
42
// Verify lifetimes of global objects.
43
void test03()
44
{
45
  using namespace std;
46
  bool test __attribute__((unused)) = true;
47
 
48
  string name;
49
  locale global_orig;
50
  // 1: Destroyed when out of scope.
51
  {
52
    {
53
      {
54
        VERIFY( counter == 0 );
55
        {
56
          locale loc01(locale::classic(), new facet_type);
57
          VERIFY( counter == 1 );
58
          global_orig = locale::global(loc01);
59
          name = loc01.name();
60
        }
61
        VERIFY( counter == 1 );
62
        locale loc02 = locale();
63
        // Weak, but it's something...
64
        VERIFY( loc02.name() == name );
65
      }
66
      VERIFY( counter == 1 );
67
      // NB: loc03 should be a copy of the previous global locale.
68
      locale loc03 = locale::global(global_orig);
69
      VERIFY( counter == 1 );
70
      VERIFY( loc03.name() == name );
71
    }
72
    VERIFY( counter == 0 );
73
    locale loc04 = locale();
74
    VERIFY( loc04 == global_orig );
75
  }
76
 
77
  // 2: Not destroyed when out of scope, deliberately leaked.
78
  {
79
    {
80
      {
81
        VERIFY( counter == 0 );
82
        {
83
          locale loc01(locale::classic(), new facet_type(1));
84
          VERIFY( counter == 1 );
85
          global_orig = locale::global(loc01);
86
          name = loc01.name();
87
        }
88
        VERIFY( counter == 1 );
89
        locale loc02 = locale();
90
        // Weak, but it's something...
91
        VERIFY( loc02.name() == name );
92
      }
93
      VERIFY( counter == 1 );
94
      // NB: loc03 should be a copy of the previous global locale.
95
      locale loc03 = locale::global(global_orig);
96
      VERIFY( counter == 1 );
97
      VERIFY( loc03.name() == name );
98
    }
99
    VERIFY( counter == 1 );
100
    locale loc04 = locale();
101
    VERIFY( loc04 == global_orig );
102
  }
103
  VERIFY( counter == 1 );
104
 
105
  // Restore global settings.
106
  locale::global(global_orig);
107
}
108
 
109
int main ()
110
{
111
  test03();
112
  return 0;
113
}

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.