OpenCores
URL https://opencores.org/ocsvn/openrisc_2011-10-31/openrisc_2011-10-31/trunk

Subversion Repositories openrisc_2011-10-31

[/] [openrisc/] [tags/] [gnu-src/] [gcc-4.5.1/] [gcc-4.5.1-or32-1.0rc3/] [libstdc++-v3/] [testsuite/] [22_locale/] [global_templates/] [user_facet_hierarchies.cc] - Blame information for rev 516

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 424 jeremybenn
// Copyright (C) 2007, 2008, 2009 Free Software Foundation
2
//
3
// This file is part of the GNU ISO C++ Library.  This library is free
4
// software; you can redistribute it and/or modify it under the
5
// terms of the GNU General Public License as published by the
6
// Free Software Foundation; either version 3, or (at your option)
7
// any later version.
8
 
9
// This library is distributed in the hope that it will be useful,
10
// but WITHOUT ANY WARRANTY; without even the implied warranty of
11
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12
// GNU General Public License for more details.
13
 
14
// You should have received a copy of the GNU General Public License along
15
// with this library; see the file COPYING3.  If not see
16
// <http://www.gnu.org/licenses/>.
17
 
18
#include <string>
19
#include <locale>
20
#include <testsuite_hooks.h>
21
 
22
// Based on Langer Kreft "Standard C++ IOStreams and Locales" p 316-318
23
struct base_facet: public std::locale::facet
24
{
25
  virtual std::string msg() const
26
  { return "base class"; }
27
 
28
  static std::locale::id id;
29
};
30
 
31
std::locale::id base_facet::id;
32
 
33
 
34
struct derived_facet: public base_facet
35
{
36
  virtual std::string msg() const
37
  { return "derived class"; }
38
 
39
  virtual std::string msg_repeater() const
40
  { return "derived class derived class"; }
41
 
42
};
43
 
44
// PR libstdc++/30127
45
// PR libstdc++/34449
46
int main()
47
{
48
  bool test __attribute__((unused)) = true;
49
 
50
  using std::locale;
51
  using std::has_facet;
52
  using std::use_facet;
53
 
54
  locale loc_c = locale::classic();
55
  locale loc_base(loc_c, new base_facet);
56
  locale loc_derived(loc_c, new derived_facet);
57
 
58
  // Standard facets.
59
  VERIFY( has_facet<std::ctype<char> >(loc_c) );
60
  VERIFY( has_facet<std::ctype<char> >(loc_base) );
61
  VERIFY( has_facet<std::ctype<char> >(loc_derived) );
62
 
63
  // User defined base facet.
64
  VERIFY( !has_facet<base_facet>(loc_c) );
65
  VERIFY( has_facet<base_facet>(loc_base) );
66
  VERIFY( has_facet<base_facet>(loc_derived) );
67
 
68
  // User defined derived facet.
69
  VERIFY( !has_facet<derived_facet>(loc_c) );
70
  VERIFY( !has_facet<derived_facet>(loc_base) );
71
  VERIFY( has_facet<derived_facet>(loc_derived) );
72
 
73
 
74
  // 1
75
  try
76
    {
77
      if (has_facet<derived_facet>(loc_base))
78
        {
79
          use_facet<derived_facet>(loc_base).msg_repeater();
80
          VERIFY( false );
81
        }
82
    }
83
  catch (...)
84
    {
85
      // Expect no exception.
86
      VERIFY( true );
87
    }
88
 
89
  // 2
90
  try
91
    {
92
      if (has_facet<base_facet>(loc_derived))
93
        use_facet<base_facet>(loc_derived).msg();
94
      else
95
        VERIFY( true );
96
    }
97
  catch (...)
98
    {
99
      // Expect no exception.
100
      VERIFY( true );
101
    }
102
 
103
  return 0;
104
}

powered by: WebSVN 2.1.0

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