1e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#include <vector>
2e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#include <algorithm>
3e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#include <string>
4e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if defined (STLPORT) && !defined (_STLP_NO_EXTENSIONS)
5e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  include <rope>
6e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif
7e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if defined (STLPORT) && !defined (_STLP_NO_EXTENSIONS)
8e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  include <slist>
9e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif
10e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#include <list>
11e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#include <deque>
12e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#include <set>
13e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#include <map>
14e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if defined (STLPORT)
15e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  include <unordered_set>
16e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  include <unordered_map>
17e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif
18e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if defined (STLPORT) && !defined (_STLP_NO_EXTENSIONS)
19e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  include <hash_set>
20e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  include <hash_map>
21e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif
22e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#include <queue>
23e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#include <stack>
24e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
25e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#include "mvctor_test.h"
26e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
27e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if !defined (STLPORT) || defined(_STLP_USE_NAMESPACES)
28e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottusing namespace std;
29e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  if defined (STLPORT)
30e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottusing namespace std::tr1;
31e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  endif
32e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif
33e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
34e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if defined (STLPORT) && !defined (_STLP_NO_MOVE_SEMANTIC)
35e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
36e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  if defined (__GNUC__) && defined (_STLP_USE_NAMESPACES)
37e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott// libstdc++ sometimes exposed its own __true_type in
38e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott// global namespace resulting in an ambiguity.
39e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#    define __true_type std::__true_type
40e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#    define __false_type std::__false_type
41e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  endif
42e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
43e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottstatic bool type_to_bool(__true_type)
44e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ return true; }
45e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottstatic bool type_to_bool(__false_type)
46e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ return false; }
47e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
48e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scotttemplate <class _Tp>
49e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottstatic bool is_movable(const _Tp&) {
50e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  typedef typename __move_traits<_Tp>::implemented _MovableTp;
51e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  return type_to_bool(_MovableTp());
52e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott}
53e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
54e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scotttemplate <class _Tp>
55e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottstatic bool is_move_complete(const _Tp&) {
56e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  typedef __move_traits<_Tp> _TpMoveTraits;
57e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  typedef typename _TpMoveTraits::complete _TpMoveComplete;
58e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  return type_to_bool(_TpMoveComplete());
59e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott}
60e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
61e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottstruct specially_allocated_struct {
62e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  bool operator < (const specially_allocated_struct&) const;
63e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  if defined (__DMC__) // slist<_Tp,_Alloc>::remove error
64e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  bool operator==(const specially_allocated_struct&) const;
65e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  endif
66e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott};
67e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
68e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if defined (__DMC__)
69e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottbool specially_allocated_struct::operator < (const specially_allocated_struct&) const
70e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ return false; }
71e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif
72e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
73e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottstruct struct_with_specialized_less {};
74e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
75e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  if defined (_STLP_USE_NAMESPACES)
76e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottnamespace std {
77e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  endif
78e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  _STLP_TEMPLATE_NULL
79e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  class allocator<specially_allocated_struct> {
80e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    //This allocator just represent what a STLport could do and in this
81e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    //case the STL containers implemented with it should still be movable
82e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    //but not completely as we cannot do any hypothesis on what is in this
83e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    //allocator.
84e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  public:
85e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    typedef specially_allocated_struct value_type;
86e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    typedef value_type *       pointer;
87e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    typedef const value_type* const_pointer;
88e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    typedef value_type&       reference;
89e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    typedef const value_type& const_reference;
90e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    typedef size_t     size_type;
91e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    typedef ptrdiff_t  difference_type;
92e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  if defined (_STLP_MEMBER_TEMPLATE_CLASSES)
93e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    template <class _Tp1> struct rebind {
94e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      typedef allocator<_Tp1> other;
95e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    };
96e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  endif
97e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    allocator() _STLP_NOTHROW {}
98e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  if defined (_STLP_MEMBER_TEMPLATES)
99e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    template <class _Tp1> allocator(const allocator<_Tp1>&) _STLP_NOTHROW {}
100e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  endif
101e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    allocator(const allocator&) _STLP_NOTHROW {}
102e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    ~allocator() _STLP_NOTHROW {}
103e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    pointer address(reference __x) const { return &__x; }
104e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    const_pointer address(const_reference __x) const { return &__x; }
105e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    pointer allocate(size_type, const void* = 0) { return 0; }
106e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    void deallocate(pointer, size_type) {}
107e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    size_type max_size() const _STLP_NOTHROW  { return 0; }
108e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    void construct(pointer, const_reference) {}
109e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    void destroy(pointer) {}
110e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  };
111e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
112e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  _STLP_TEMPLATE_NULL
113e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  struct less<struct_with_specialized_less> {
114e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    bool operator() (struct_with_specialized_less const&,
115e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott                     struct_with_specialized_less const&) const;
116e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  };
117e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
118e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  if defined (_STLP_CLASS_PARTIAL_SPECIALIZATION)
119e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#    if !defined (_STLP_NO_MOVE_SEMANTIC)
120e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#      if defined (__BORLANDC__) && (__BORLANDC__ >= 0x564)
121e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  _STLP_TEMPLATE_NULL
122e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  struct __move_traits<vector<specially_allocated_struct> > {
123e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    typedef __true_type implemented;
124e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    typedef __false_type complete;
125e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  };
126e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  _STLP_TEMPLATE_NULL
127e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  struct __move_traits<deque<specially_allocated_struct> > {
128e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    typedef __true_type implemented;
129e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    typedef __false_type complete;
130e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  };
131e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  _STLP_TEMPLATE_NULL
132e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  struct __move_traits<list<specially_allocated_struct> > {
133e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    typedef __true_type implemented;
134e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    typedef __false_type complete;
135e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  };
136e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  _STLP_TEMPLATE_NULL
137e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  struct __move_traits<slist<specially_allocated_struct> > {
138e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    typedef __true_type implemented;
139e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    typedef __false_type complete;
140e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  };
141e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  _STLP_TEMPLATE_NULL
142e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  struct __move_traits<less<struct_with_specialized_less> > {
143e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    typedef __true_type implemented;
144e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    typedef __false_type complete;
145e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  };
146e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  _STLP_TEMPLATE_NULL
147e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  struct __move_traits<set<specially_allocated_struct> > {
148e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    typedef __true_type implemented;
149e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    typedef __false_type complete;
150e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  };
151e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  _STLP_TEMPLATE_NULL
152e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  struct __move_traits<multiset<specially_allocated_struct> > {
153e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    typedef __true_type implemented;
154e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    typedef __false_type complete;
155e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  };
156e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#      endif
157e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#    endif
158e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  endif
159e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
160e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  if defined (_STLP_USE_NAMESPACES)
161e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott}
162e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  endif
163e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif
164e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
165e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottvoid MoveConstructorTest::movable_declaration()
166e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{
167e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if defined (STLPORT) && !defined (_STLP_DONT_SIMULATE_PARTIAL_SPEC_FOR_TYPE_TRAITS) && \
168e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott                         !defined (_STLP_NO_MOVE_SEMANTIC)
169e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  //This test purpose is to check correct detection of the STL movable
170e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  //traits declaration
171e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  {
172e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    //string, wstring:
173e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( is_movable(string()) );
174e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  if defined (_STLP_CLASS_PARTIAL_SPECIALIZATION)
175e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( is_move_complete(string()) );
176e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  else
177e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( !is_move_complete(string()) );
178e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  endif
179e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  if defined (_STLP_HAS_WCHAR_T)
180e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( is_movable(wstring()) );
181e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#    if defined (_STLP_CLASS_PARTIAL_SPECIALIZATION)
182e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( is_move_complete(wstring()) );
183e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#    else
184e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( !is_move_complete(wstring()) );
185e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#    endif
186e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  endif
187e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  }
188e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
189e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  if defined (STLPORT) && !defined (_STLP_NO_EXTENSIONS)
190e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  {
191e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    //crope, wrope:
192e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( is_movable(crope()) );
193e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#    if defined (_STLP_CLASS_PARTIAL_SPECIALIZATION)
194e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( is_move_complete(crope()) );
195e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#    else
196e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( !is_move_complete(crope()) );
197e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#    endif
198e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#    if defined (_STLP_HAS_WCHAR_T)
199e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( is_movable(wrope()) );
200e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#      if defined (_STLP_CLASS_PARTIAL_SPECIALIZATION)
201e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( is_move_complete(wrope()) );
202e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#      else
203e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( !is_move_complete(wrope()) );
204e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#      endif
205e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#    endif
206e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  }
207e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  endif
208e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
209e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  {
210e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    //vector:
211e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( is_movable(vector<char>()) );
212e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( is_movable(vector<specially_allocated_struct>()) );
213e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  if defined (_STLP_CLASS_PARTIAL_SPECIALIZATION)
214e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( is_move_complete(vector<char>()) );
215e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( !is_move_complete(vector<specially_allocated_struct>()) );
216e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  else
217e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( !is_move_complete(vector<char>()) );
218e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  endif
219e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  }
220e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
221e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  {
222e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    //deque:
223e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( is_movable(deque<char>()) );
224e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( is_movable(deque<specially_allocated_struct>()) );
225e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  if defined (_STLP_CLASS_PARTIAL_SPECIALIZATION)
226e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( is_move_complete(deque<char>()) );
227e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( !is_move_complete(deque<specially_allocated_struct>()) );
228e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  else
229e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( !is_move_complete(deque<char>()) );
230e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  endif
231e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  }
232e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
233e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  {
234e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    //list:
235e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( is_movable(list<char>()) );
236e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( is_movable(list<specially_allocated_struct>()) );
237e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  if defined (_STLP_CLASS_PARTIAL_SPECIALIZATION)
238e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( is_move_complete(list<char>()) );
239e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( !is_move_complete(list<specially_allocated_struct>()) );
240e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  else
241e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( !is_move_complete(list<char>()) );
242e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  endif
243e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  }
244e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
245e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  if defined (STLPORT) && !defined (_STLP_NO_EXTENSIONS)
246e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  {
247e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    //slist:
248e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( is_movable(slist<char>()) );
249e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( is_movable(slist<specially_allocated_struct>()) );
250e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#    if defined (_STLP_CLASS_PARTIAL_SPECIALIZATION)
251e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( is_move_complete(slist<char>()) );
252e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( !is_move_complete(slist<specially_allocated_struct>()) );
253e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#    else
254e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( !is_move_complete(slist<char>()) );
255e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#    endif
256e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  }
257e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  endif
258e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
259e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  {
260e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    //queue:
261e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( is_movable(queue<char>()) );
262e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( is_movable(queue<specially_allocated_struct>()) );
263e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  if defined (_STLP_CLASS_PARTIAL_SPECIALIZATION)
264e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( is_move_complete(queue<char>()) );
265e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( !is_move_complete(queue<specially_allocated_struct>()) );
266e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  else
267e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( !is_move_complete(queue<char>()) );
268e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  endif
269e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  }
270e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
271e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  {
272e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    //stack:
273e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( is_movable(stack<char>()) );
274e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( is_movable(stack<specially_allocated_struct>()) );
275e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  if defined (_STLP_CLASS_PARTIAL_SPECIALIZATION)
276e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( is_move_complete(stack<char>()) );
277e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( !is_move_complete(stack<specially_allocated_struct>()) );
278e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  else
279e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( !is_move_complete(stack<char>()) );
280e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  endif
281e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  }
282e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
283e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif
284e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott}
285e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
286e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottvoid MoveConstructorTest::movable_declaration_assoc()
287e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{
288e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if defined (STLPORT) && !defined (_STLP_DONT_SIMULATE_PARTIAL_SPEC_FOR_TYPE_TRAITS) && \
289e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott                         !defined (_STLP_NO_MOVE_SEMANTIC)
290e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  {
291e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    //associative containers, set multiset, map, multimap:
292e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
293e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    //For associative containers it is important that less is correctly recognize as
294e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    //the STLport less or a user specialized less:
295e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  if defined (_STLP_CLASS_PARTIAL_SPECIALIZATION)
296e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( is_move_complete(less<char>()) );
297e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  endif
298e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( !is_move_complete(less<struct_with_specialized_less>()) );
299e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
300e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    //set
301e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( is_movable(set<char>()) );
302e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( is_movable(set<specially_allocated_struct>()) );
303e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  if defined (_STLP_CLASS_PARTIAL_SPECIALIZATION)
304e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( is_move_complete(set<char>()) );
305e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( !is_move_complete(set<specially_allocated_struct>()) );
306e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  else
307e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( !is_move_complete(set<char>()) );
308e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  endif
309e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
310e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    //multiset
311e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( is_movable(multiset<char>()) );
312e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( is_movable(multiset<specially_allocated_struct>()) );
313e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  if defined (_STLP_CLASS_PARTIAL_SPECIALIZATION)
314e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( is_move_complete(multiset<char>()) );
315e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( !is_move_complete(multiset<specially_allocated_struct>()) );
316e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  else
317e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( !is_move_complete(multiset<char>()) );
318e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  endif
319e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
320e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    //map
321e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( is_movable(map<char, char>()) );
322e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( is_movable(map<specially_allocated_struct, char>()) );
323e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  if defined (_STLP_CLASS_PARTIAL_SPECIALIZATION)
324e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( is_move_complete(map<char, char>()) );
325e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    //Here even if allocator has been specialized for specially_allocated_struct
326e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    //this pecialization won't be used in default map instanciation as the default
327e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    //allocator is allocator<pair<specially_allocated_struct, char> >
328e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( is_move_complete(map<specially_allocated_struct, char>()) );
329e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  else
330e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( !is_move_complete(map<char, char>()) );
331e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  endif
332e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
333e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    //multimap
334e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( is_movable(multimap<char, char>()) );
335e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( is_movable(multimap<specially_allocated_struct, char>()) );
336e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  if defined (_STLP_CLASS_PARTIAL_SPECIALIZATION)
337e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( is_move_complete(multimap<char, char>()) );
338e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    //Idem map remark
339e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( is_move_complete(multimap<specially_allocated_struct, char>()) );
340e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  else
341e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( !is_move_complete(multimap<char, char>()) );
342e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  endif
343e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  }
344e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif
345e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott}
346e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
347e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottvoid MoveConstructorTest::movable_declaration_hash()
348e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{
349e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if defined (STLPORT) && !defined (_STLP_DONT_SIMULATE_PARTIAL_SPEC_FOR_TYPE_TRAITS) && \
350e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott                         !defined (_STLP_NO_MOVE_SEMANTIC)
351e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  {
352e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    //hashed containers, unordered_set unordered_multiset, unordered_map, unordered_multimap,
353e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    //                   hash_set, hash_multiset, hash_map, hash_multimap:
354e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
355e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    //We only check that they are movable, completness is not yet supported
356e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( is_movable(unordered_set<char>()) );
357e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( is_movable(unordered_multiset<char>()) );
358e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( is_movable(unordered_map<char, char>()) );
359e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( is_movable(unordered_multimap<char, char>()) );
360e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  if defined (STLPORT) && !defined (_STLP_NO_EXTENSIONS)
361e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( is_movable(hash_set<char>()) );
362e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( is_movable(hash_multiset<char>()) );
363e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( is_movable(hash_map<char, char>()) );
364e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( is_movable(hash_multimap<char, char>()) );
365e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  endif
366e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  }
367e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif
368e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott}
369e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
370