]>
git.ipfire.org Git - thirdparty/gcc.git/blob - libstdc++-v3/testsuite/util/testsuite_tr1.h
2 // Testing utilities for the tr1 testsuite.
4 // Copyright (C) 2004, 2005, 2006, 2007, 2009, 2010
5 // Free Software Foundation, Inc.
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 3, or (at your option)
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.
18 // You should have received a copy of the GNU General Public License along
19 // with this library; see the file COPYING3. If not see
20 // <http://www.gnu.org/licenses/>.
23 #ifndef _GLIBCXX_TESTSUITE_TR1_H
24 #define _GLIBCXX_TESTSUITE_TR1_H
26 #include <ext/type_traits.h>
30 // For tr1/type_traits.
31 template<template<typename
> class Category
, typename Type
>
33 test_category(bool value
)
36 ret
&= Category
<Type
>::value
== value
;
37 ret
&= Category
<const Type
>::value
== value
;
38 ret
&= Category
<volatile Type
>::value
== value
;
39 ret
&= Category
<const volatile Type
>::value
== value
;
40 ret
&= Category
<Type
>::type::value
== value
;
41 ret
&= Category
<const Type
>::type::value
== value
;
42 ret
&= Category
<volatile Type
>::type::value
== value
;
43 ret
&= Category
<const volatile Type
>::type::value
== value
;
47 template<template<typename
> class Property
, typename Type
>
49 test_property(typename Property
<Type
>::value_type value
)
52 ret
&= Property
<Type
>::value
== value
;
53 ret
&= Property
<Type
>::type::value
== value
;
57 // For testing tr1/type_traits/extent, which has a second template
59 template<template<typename
, unsigned> class Property
,
60 typename Type
, unsigned Uint
>
62 test_property(typename Property
<Type
, Uint
>::value_type value
)
65 ret
&= Property
<Type
, Uint
>::value
== value
;
66 ret
&= Property
<Type
, Uint
>::type::value
== value
;
70 #ifdef __GXX_EXPERIMENTAL_CXX0X__
71 template<template<typename
...> class Property
, typename
... Types
>
73 test_property(typename Property
<Types
...>::value_type value
)
76 ret
&= Property
<Types
...>::value
== value
;
77 ret
&= Property
<Types
...>::type::value
== value
;
82 template<template<typename
, typename
> class Relationship
,
83 typename Type1
, typename Type2
>
85 test_relationship(bool value
)
88 ret
&= Relationship
<Type1
, Type2
>::value
== value
;
89 ret
&= Relationship
<Type1
, Type2
>::type::value
== value
;
95 typedef const ClassType cClassType
;
96 typedef volatile ClassType vClassType
;
97 typedef const volatile ClassType cvClassType
;
99 class DerivedType
: public ClassType
{ };
101 enum EnumType
{ e0
};
104 { operator int() const; };
108 virtual void rotate(int) = 0;
111 class PolymorphicClass
113 virtual void rotate(int);
116 class DerivedPolymorphic
: public PolymorphicClass
{ };
118 class VirtualDestructorClass
120 virtual ~VirtualDestructorClass();
125 class IncompleteClass
;
129 ExplicitClass(double&);
130 explicit ExplicitClass(int&);
131 ExplicitClass(double&, int&, double&);
134 struct NothrowExplicitClass
136 NothrowExplicitClass(double&) throw();
137 explicit NothrowExplicitClass(int&) throw();
138 NothrowExplicitClass(double&, int&, double&) throw();
141 struct ThrowExplicitClass
143 ThrowExplicitClass(double&) throw(int);
144 explicit ThrowExplicitClass(int&) throw(int);
145 ThrowExplicitClass(double&, int&, double&) throw(int);
148 #ifdef __GXX_EXPERIMENTAL_CXX0X__
149 struct NoexceptExplicitClass
151 NoexceptExplicitClass(double&) noexcept(true);
152 explicit NoexceptExplicitClass(int&) noexcept(true);
153 NoexceptExplicitClass(double&, int&, double&) noexcept(true);
156 struct ExceptExplicitClass
158 ExceptExplicitClass(double&) noexcept(false);
159 explicit ExceptExplicitClass(int&) noexcept(false);
160 ExceptExplicitClass(double&, int&, double&) noexcept(false);
164 struct NType
// neither trivial nor standard-layout
171 struct TType
// trivial but not standard-layout
178 struct SLType
// standard-layout but not trivial
185 struct PODType
// both trivial and standard-layout
191 #ifdef __GXX_EXPERIMENTAL_CXX0X__
192 struct LType
// literal type
196 constexpr LType(int __i
) : _M_i(__i
) { }
199 struct LTypeDerived
: public LType
201 constexpr LTypeDerived(int __i
) : LType(__i
) { }
204 struct NLType
// not literal type
208 NLType() : _M_i(0) { }
210 constexpr NLType(int __i
) : _M_i(__i
) { }
212 NLType(const NLType
& __other
) : _M_i(__other
._M_i
) { }
214 ~NLType() { _M_i
= 0; }
218 int truncate_float(float x
) { return (int)x
; }
219 long truncate_double(double x
) { return (long)x
; }
221 struct do_truncate_float_t
223 do_truncate_float_t()
228 do_truncate_float_t(const do_truncate_float_t
&)
233 ~do_truncate_float_t()
238 int operator()(float x
) { return (int)x
; }
240 static int live_objects
;
243 int do_truncate_float_t::live_objects
= 0;
245 struct do_truncate_double_t
247 do_truncate_double_t()
252 do_truncate_double_t(const do_truncate_double_t
&)
257 ~do_truncate_double_t()
262 long operator()(double x
) { return (long)x
; }
264 static int live_objects
;
267 int do_truncate_double_t::live_objects
= 0;
273 int foo() { return 1; }
274 int foo_c() const { return 2; }
275 int foo_v() volatile { return 3; }
276 int foo_cv() const volatile { return 4; }
279 // For use in 8_c_compatibility.
280 template<typename R
, typename T
>
281 typename
__gnu_cxx::__enable_if
<std::__are_same
<R
, T
>::__value
,
286 } // namespace __gnu_test
288 #endif // _GLIBCXX_TESTSUITE_TR1_H