aboutsummaryrefslogtreecommitdiff
path: root/test/unit/mvctor_declaration_test.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'test/unit/mvctor_declaration_test.cpp')
-rw-r--r--test/unit/mvctor_declaration_test.cpp369
1 files changed, 0 insertions, 369 deletions
diff --git a/test/unit/mvctor_declaration_test.cpp b/test/unit/mvctor_declaration_test.cpp
deleted file mode 100644
index cb6f8a3..0000000
--- a/test/unit/mvctor_declaration_test.cpp
+++ /dev/null
@@ -1,369 +0,0 @@
-#include <vector>
-#include <algorithm>
-#include <string>
-#if defined (STLPORT) && !defined (_STLP_NO_EXTENSIONS)
-# include <rope>
-#endif
-#if defined (STLPORT) && !defined (_STLP_NO_EXTENSIONS)
-# include <slist>
-#endif
-#include <list>
-#include <deque>
-#include <set>
-#include <map>
-#if defined (STLPORT)
-# include <unordered_set>
-# include <unordered_map>
-#endif
-#if defined (STLPORT) && !defined (_STLP_NO_EXTENSIONS)
-# include <hash_set>
-# include <hash_map>
-#endif
-#include <queue>
-#include <stack>
-
-#include "mvctor_test.h"
-
-#if !defined (STLPORT) || defined(_STLP_USE_NAMESPACES)
-using namespace std;
-# if defined (STLPORT)
-using namespace std::tr1;
-# endif
-#endif
-
-#if defined (STLPORT) && !defined (_STLP_NO_MOVE_SEMANTIC)
-
-# if defined (__GNUC__) && defined (_STLP_USE_NAMESPACES)
-// libstdc++ sometimes exposed its own __true_type in
-// global namespace resulting in an ambiguity.
-# define __true_type std::__true_type
-# define __false_type std::__false_type
-# endif
-
-static bool type_to_bool(__true_type)
-{ return true; }
-static bool type_to_bool(__false_type)
-{ return false; }
-
-template <class _Tp>
-static bool is_movable(const _Tp&) {
- typedef typename __move_traits<_Tp>::implemented _MovableTp;
- return type_to_bool(_MovableTp());
-}
-
-template <class _Tp>
-static bool is_move_complete(const _Tp&) {
- typedef __move_traits<_Tp> _TpMoveTraits;
- typedef typename _TpMoveTraits::complete _TpMoveComplete;
- return type_to_bool(_TpMoveComplete());
-}
-
-struct specially_allocated_struct {
- bool operator < (const specially_allocated_struct&) const;
-# if defined (__DMC__) // slist<_Tp,_Alloc>::remove error
- bool operator==(const specially_allocated_struct&) const;
-# endif
-};
-
-#if defined (__DMC__)
-bool specially_allocated_struct::operator < (const specially_allocated_struct&) const
-{ return false; }
-#endif
-
-struct struct_with_specialized_less {};
-
-# if defined (_STLP_USE_NAMESPACES)
-namespace std {
-# endif
- _STLP_TEMPLATE_NULL
- class allocator<specially_allocated_struct> {
- //This allocator just represent what a STLport could do and in this
- //case the STL containers implemented with it should still be movable
- //but not completely as we cannot do any hypothesis on what is in this
- //allocator.
- public:
- typedef specially_allocated_struct value_type;
- typedef value_type * pointer;
- typedef const value_type* const_pointer;
- typedef value_type& reference;
- typedef const value_type& const_reference;
- typedef size_t size_type;
- typedef ptrdiff_t difference_type;
-# if defined (_STLP_MEMBER_TEMPLATE_CLASSES)
- template <class _Tp1> struct rebind {
- typedef allocator<_Tp1> other;
- };
-# endif
- allocator() _STLP_NOTHROW {}
-# if defined (_STLP_MEMBER_TEMPLATES)
- template <class _Tp1> allocator(const allocator<_Tp1>&) _STLP_NOTHROW {}
-# endif
- allocator(const allocator&) _STLP_NOTHROW {}
- ~allocator() _STLP_NOTHROW {}
- pointer address(reference __x) const { return &__x; }
- const_pointer address(const_reference __x) const { return &__x; }
- pointer allocate(size_type, const void* = 0) { return 0; }
- void deallocate(pointer, size_type) {}
- size_type max_size() const _STLP_NOTHROW { return 0; }
- void construct(pointer, const_reference) {}
- void destroy(pointer) {}
- };
-
- _STLP_TEMPLATE_NULL
- struct less<struct_with_specialized_less> {
- bool operator() (struct_with_specialized_less const&,
- struct_with_specialized_less const&) const;
- };
-
-# if defined (_STLP_CLASS_PARTIAL_SPECIALIZATION)
-# if !defined (_STLP_NO_MOVE_SEMANTIC)
-# if defined (__BORLANDC__) && (__BORLANDC__ >= 0x564)
- _STLP_TEMPLATE_NULL
- struct __move_traits<vector<specially_allocated_struct> > {
- typedef __true_type implemented;
- typedef __false_type complete;
- };
- _STLP_TEMPLATE_NULL
- struct __move_traits<deque<specially_allocated_struct> > {
- typedef __true_type implemented;
- typedef __false_type complete;
- };
- _STLP_TEMPLATE_NULL
- struct __move_traits<list<specially_allocated_struct> > {
- typedef __true_type implemented;
- typedef __false_type complete;
- };
- _STLP_TEMPLATE_NULL
- struct __move_traits<slist<specially_allocated_struct> > {
- typedef __true_type implemented;
- typedef __false_type complete;
- };
- _STLP_TEMPLATE_NULL
- struct __move_traits<less<struct_with_specialized_less> > {
- typedef __true_type implemented;
- typedef __false_type complete;
- };
- _STLP_TEMPLATE_NULL
- struct __move_traits<set<specially_allocated_struct> > {
- typedef __true_type implemented;
- typedef __false_type complete;
- };
- _STLP_TEMPLATE_NULL
- struct __move_traits<multiset<specially_allocated_struct> > {
- typedef __true_type implemented;
- typedef __false_type complete;
- };
-# endif
-# endif
-# endif
-
-# if defined (_STLP_USE_NAMESPACES)
-}
-# endif
-#endif
-
-void MoveConstructorTest::movable_declaration()
-{
-#if defined (STLPORT) && !defined (_STLP_DONT_SIMULATE_PARTIAL_SPEC_FOR_TYPE_TRAITS) && \
- !defined (_STLP_NO_MOVE_SEMANTIC)
- //This test purpose is to check correct detection of the STL movable
- //traits declaration
- {
- //string, wstring:
- CPPUNIT_ASSERT( is_movable(string()) );
-# if defined (_STLP_CLASS_PARTIAL_SPECIALIZATION)
- CPPUNIT_ASSERT( is_move_complete(string()) );
-# else
- CPPUNIT_ASSERT( !is_move_complete(string()) );
-# endif
-# if defined (_STLP_HAS_WCHAR_T)
- CPPUNIT_ASSERT( is_movable(wstring()) );
-# if defined (_STLP_CLASS_PARTIAL_SPECIALIZATION)
- CPPUNIT_ASSERT( is_move_complete(wstring()) );
-# else
- CPPUNIT_ASSERT( !is_move_complete(wstring()) );
-# endif
-# endif
- }
-
-# if defined (STLPORT) && !defined (_STLP_NO_EXTENSIONS)
- {
- //crope, wrope:
- CPPUNIT_ASSERT( is_movable(crope()) );
-# if defined (_STLP_CLASS_PARTIAL_SPECIALIZATION)
- CPPUNIT_ASSERT( is_move_complete(crope()) );
-# else
- CPPUNIT_ASSERT( !is_move_complete(crope()) );
-# endif
-# if defined (_STLP_HAS_WCHAR_T)
- CPPUNIT_ASSERT( is_movable(wrope()) );
-# if defined (_STLP_CLASS_PARTIAL_SPECIALIZATION)
- CPPUNIT_ASSERT( is_move_complete(wrope()) );
-# else
- CPPUNIT_ASSERT( !is_move_complete(wrope()) );
-# endif
-# endif
- }
-# endif
-
- {
- //vector:
- CPPUNIT_ASSERT( is_movable(vector<char>()) );
- CPPUNIT_ASSERT( is_movable(vector<specially_allocated_struct>()) );
-# if defined (_STLP_CLASS_PARTIAL_SPECIALIZATION)
- CPPUNIT_ASSERT( is_move_complete(vector<char>()) );
- CPPUNIT_ASSERT( !is_move_complete(vector<specially_allocated_struct>()) );
-# else
- CPPUNIT_ASSERT( !is_move_complete(vector<char>()) );
-# endif
- }
-
- {
- //deque:
- CPPUNIT_ASSERT( is_movable(deque<char>()) );
- CPPUNIT_ASSERT( is_movable(deque<specially_allocated_struct>()) );
-# if defined (_STLP_CLASS_PARTIAL_SPECIALIZATION)
- CPPUNIT_ASSERT( is_move_complete(deque<char>()) );
- CPPUNIT_ASSERT( !is_move_complete(deque<specially_allocated_struct>()) );
-# else
- CPPUNIT_ASSERT( !is_move_complete(deque<char>()) );
-# endif
- }
-
- {
- //list:
- CPPUNIT_ASSERT( is_movable(list<char>()) );
- CPPUNIT_ASSERT( is_movable(list<specially_allocated_struct>()) );
-# if defined (_STLP_CLASS_PARTIAL_SPECIALIZATION)
- CPPUNIT_ASSERT( is_move_complete(list<char>()) );
- CPPUNIT_ASSERT( !is_move_complete(list<specially_allocated_struct>()) );
-# else
- CPPUNIT_ASSERT( !is_move_complete(list<char>()) );
-# endif
- }
-
-# if defined (STLPORT) && !defined (_STLP_NO_EXTENSIONS)
- {
- //slist:
- CPPUNIT_ASSERT( is_movable(slist<char>()) );
- CPPUNIT_ASSERT( is_movable(slist<specially_allocated_struct>()) );
-# if defined (_STLP_CLASS_PARTIAL_SPECIALIZATION)
- CPPUNIT_ASSERT( is_move_complete(slist<char>()) );
- CPPUNIT_ASSERT( !is_move_complete(slist<specially_allocated_struct>()) );
-# else
- CPPUNIT_ASSERT( !is_move_complete(slist<char>()) );
-# endif
- }
-# endif
-
- {
- //queue:
- CPPUNIT_ASSERT( is_movable(queue<char>()) );
- CPPUNIT_ASSERT( is_movable(queue<specially_allocated_struct>()) );
-# if defined (_STLP_CLASS_PARTIAL_SPECIALIZATION)
- CPPUNIT_ASSERT( is_move_complete(queue<char>()) );
- CPPUNIT_ASSERT( !is_move_complete(queue<specially_allocated_struct>()) );
-# else
- CPPUNIT_ASSERT( !is_move_complete(queue<char>()) );
-# endif
- }
-
- {
- //stack:
- CPPUNIT_ASSERT( is_movable(stack<char>()) );
- CPPUNIT_ASSERT( is_movable(stack<specially_allocated_struct>()) );
-# if defined (_STLP_CLASS_PARTIAL_SPECIALIZATION)
- CPPUNIT_ASSERT( is_move_complete(stack<char>()) );
- CPPUNIT_ASSERT( !is_move_complete(stack<specially_allocated_struct>()) );
-# else
- CPPUNIT_ASSERT( !is_move_complete(stack<char>()) );
-# endif
- }
-
-#endif
-}
-
-void MoveConstructorTest::movable_declaration_assoc()
-{
-#if defined (STLPORT) && !defined (_STLP_DONT_SIMULATE_PARTIAL_SPEC_FOR_TYPE_TRAITS) && \
- !defined (_STLP_NO_MOVE_SEMANTIC)
- {
- //associative containers, set multiset, map, multimap:
-
- //For associative containers it is important that less is correctly recognize as
- //the STLport less or a user specialized less:
-# if defined (_STLP_CLASS_PARTIAL_SPECIALIZATION)
- CPPUNIT_ASSERT( is_move_complete(less<char>()) );
-# endif
- CPPUNIT_ASSERT( !is_move_complete(less<struct_with_specialized_less>()) );
-
- //set
- CPPUNIT_ASSERT( is_movable(set<char>()) );
- CPPUNIT_ASSERT( is_movable(set<specially_allocated_struct>()) );
-# if defined (_STLP_CLASS_PARTIAL_SPECIALIZATION)
- CPPUNIT_ASSERT( is_move_complete(set<char>()) );
- CPPUNIT_ASSERT( !is_move_complete(set<specially_allocated_struct>()) );
-# else
- CPPUNIT_ASSERT( !is_move_complete(set<char>()) );
-# endif
-
- //multiset
- CPPUNIT_ASSERT( is_movable(multiset<char>()) );
- CPPUNIT_ASSERT( is_movable(multiset<specially_allocated_struct>()) );
-# if defined (_STLP_CLASS_PARTIAL_SPECIALIZATION)
- CPPUNIT_ASSERT( is_move_complete(multiset<char>()) );
- CPPUNIT_ASSERT( !is_move_complete(multiset<specially_allocated_struct>()) );
-# else
- CPPUNIT_ASSERT( !is_move_complete(multiset<char>()) );
-# endif
-
- //map
- CPPUNIT_ASSERT( is_movable(map<char, char>()) );
- CPPUNIT_ASSERT( is_movable(map<specially_allocated_struct, char>()) );
-# if defined (_STLP_CLASS_PARTIAL_SPECIALIZATION)
- CPPUNIT_ASSERT( is_move_complete(map<char, char>()) );
- //Here even if allocator has been specialized for specially_allocated_struct
- //this pecialization won't be used in default map instanciation as the default
- //allocator is allocator<pair<specially_allocated_struct, char> >
- CPPUNIT_ASSERT( is_move_complete(map<specially_allocated_struct, char>()) );
-# else
- CPPUNIT_ASSERT( !is_move_complete(map<char, char>()) );
-# endif
-
- //multimap
- CPPUNIT_ASSERT( is_movable(multimap<char, char>()) );
- CPPUNIT_ASSERT( is_movable(multimap<specially_allocated_struct, char>()) );
-# if defined (_STLP_CLASS_PARTIAL_SPECIALIZATION)
- CPPUNIT_ASSERT( is_move_complete(multimap<char, char>()) );
- //Idem map remark
- CPPUNIT_ASSERT( is_move_complete(multimap<specially_allocated_struct, char>()) );
-# else
- CPPUNIT_ASSERT( !is_move_complete(multimap<char, char>()) );
-# endif
- }
-#endif
-}
-
-void MoveConstructorTest::movable_declaration_hash()
-{
-#if defined (STLPORT) && !defined (_STLP_DONT_SIMULATE_PARTIAL_SPEC_FOR_TYPE_TRAITS) && \
- !defined (_STLP_NO_MOVE_SEMANTIC)
- {
- //hashed containers, unordered_set unordered_multiset, unordered_map, unordered_multimap,
- // hash_set, hash_multiset, hash_map, hash_multimap:
-
- //We only check that they are movable, completness is not yet supported
- CPPUNIT_ASSERT( is_movable(unordered_set<char>()) );
- CPPUNIT_ASSERT( is_movable(unordered_multiset<char>()) );
- CPPUNIT_ASSERT( is_movable(unordered_map<char, char>()) );
- CPPUNIT_ASSERT( is_movable(unordered_multimap<char, char>()) );
-# if defined (STLPORT) && !defined (_STLP_NO_EXTENSIONS)
- CPPUNIT_ASSERT( is_movable(hash_set<char>()) );
- CPPUNIT_ASSERT( is_movable(hash_multiset<char>()) );
- CPPUNIT_ASSERT( is_movable(hash_map<char, char>()) );
- CPPUNIT_ASSERT( is_movable(hash_multimap<char, char>()) );
-# endif
- }
-#endif
-}
-