aboutsummaryrefslogtreecommitdiff
path: root/test/unit/set_test.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'test/unit/set_test.cpp')
-rw-r--r--test/unit/set_test.cpp507
1 files changed, 0 insertions, 507 deletions
diff --git a/test/unit/set_test.cpp b/test/unit/set_test.cpp
deleted file mode 100644
index 9070b2f..0000000
--- a/test/unit/set_test.cpp
+++ /dev/null
@@ -1,507 +0,0 @@
-//Has to be first for StackAllocator swap overload to be taken
-//into account (at least using GCC 4.0.1)
-#include "stack_allocator.h"
-
-#include <set>
-#include <algorithm>
-
-#include "cppunit/cppunit_proxy.h"
-
-#if !defined (STLPORT) || defined(_STLP_USE_NAMESPACES)
-using namespace std;
-#endif
-
-//
-// TestCase class
-//
-class SetTest : public CPPUNIT_NS::TestCase
-{
- CPPUNIT_TEST_SUITE(SetTest);
- CPPUNIT_TEST(set1);
- CPPUNIT_TEST(set2);
- CPPUNIT_TEST(erase);
- CPPUNIT_TEST(insert);
- CPPUNIT_TEST(find);
- CPPUNIT_TEST(bounds);
- CPPUNIT_TEST(specialized_less);
- CPPUNIT_TEST(implementation_check);
- CPPUNIT_TEST(allocator_with_state);
- CPPUNIT_TEST(reverse_iterator_test);
-#if !defined (STLPORT) || !defined (_STLP_USE_CONTAINERS_EXTENSION)
- CPPUNIT_IGNORE;
-#endif
- CPPUNIT_TEST(template_methods);
- CPPUNIT_TEST_SUITE_END();
-
-protected:
- void set1();
- void set2();
- void erase();
- void insert();
- void find();
- void bounds();
- void specialized_less();
- void implementation_check();
- void allocator_with_state();
- void reverse_iterator_test();
- void template_methods();
-};
-
-CPPUNIT_TEST_SUITE_REGISTRATION(SetTest);
-
-
-//
-// tests implementation
-//
-void SetTest::set1()
-{
- set<int, less<int> > s;
- CPPUNIT_ASSERT (s.count(42) == 0);
- s.insert(42);
- CPPUNIT_ASSERT (s.count(42) == 1);
- s.insert(42);
- CPPUNIT_ASSERT (s.count(42) == 1);
- size_t count = s.erase(42);
- CPPUNIT_ASSERT (count == 1);
-}
-
-void SetTest::set2()
-{
- typedef set<int, less<int> > int_set;
- int_set s;
- pair<int_set::iterator, bool> p = s.insert(42);
- CPPUNIT_ASSERT (p.second == true);
- p = s.insert(42);
- CPPUNIT_ASSERT (p.second == false);
-
- int array1 [] = { 1, 3, 6, 7 };
- s.insert(array1, array1 + 4);
- CPPUNIT_ASSERT (distance(s.begin(), s.end()) == 5);
-
- int_set s2;
- s2.swap(s);
- CPPUNIT_ASSERT (distance(s2.begin(), s2.end()) == 5);
- CPPUNIT_ASSERT (distance(s.begin(), s.end()) == 0);
-
- int_set s3;
- s3.swap(s);
- s3.swap(s2);
- CPPUNIT_ASSERT (distance(s.begin(), s.end()) == 0);
- CPPUNIT_ASSERT (distance(s2.begin(), s2.end()) == 0);
- CPPUNIT_ASSERT (distance(s3.begin(), s3.end()) == 5);
-}
-
-void SetTest::erase()
-{
- set<int, less<int> > s;
- s.insert(1);
- s.erase(s.begin());
- CPPUNIT_ASSERT( s.empty() );
-
- size_t nb = s.erase(1);
- CPPUNIT_ASSERT(nb == 0);
-}
-
-void SetTest::insert()
-{
- set<int> s;
- set<int>::iterator i = s.insert( s.end(), 0 );
- CPPUNIT_ASSERT( *i == 0 );
-}
-
-void SetTest::find()
-{
- set<int> s;
-
- CPPUNIT_ASSERT( s.find(0) == s.end() );
-
- set<int> const& crs = s;
-
- CPPUNIT_ASSERT( crs.find(0) == crs.end() );
-}
-
-void SetTest::bounds()
-{
- int array1 [] = { 1, 3, 6, 7 };
- set<int> s(array1, array1 + sizeof(array1) / sizeof(array1[0]));
- set<int> const& crs = s;
-
- set<int>::iterator sit;
- set<int>::const_iterator scit;
- pair<set<int>::iterator, set<int>::iterator> pit;
- pair<set<int>::const_iterator, set<int>::const_iterator> pcit;
-
- //Check iterator on mutable set
- sit = s.lower_bound(2);
- CPPUNIT_ASSERT( sit != s.end() );
- CPPUNIT_ASSERT( *sit == 3 );
-
- sit = s.upper_bound(5);
- CPPUNIT_ASSERT( sit != s.end() );
- CPPUNIT_ASSERT( *sit == 6 );
-
- pit = s.equal_range(6);
- CPPUNIT_ASSERT( pit.first != pit.second );
- CPPUNIT_ASSERT( pit.first != s.end() );
- CPPUNIT_ASSERT( *pit.first == 6 );
- CPPUNIT_ASSERT( pit.second != s.end() );
- CPPUNIT_ASSERT( *pit.second == 7 );
-
- pit = s.equal_range(4);
- CPPUNIT_ASSERT( pit.first == pit.second );
- CPPUNIT_ASSERT( pit.first != s.end() );
- CPPUNIT_ASSERT( *pit.first == 6 );
- CPPUNIT_ASSERT( pit.second != s.end() );
- CPPUNIT_ASSERT( *pit.second == 6 );
-
- //Check const_iterator on mutable set
- scit = s.lower_bound(2);
- CPPUNIT_ASSERT( scit != s.end() );
- CPPUNIT_ASSERT( *scit == 3 );
-
- scit = s.upper_bound(5);
- CPPUNIT_ASSERT( scit != s.end() );
- CPPUNIT_ASSERT( *scit == 6 );
-
-#ifdef _STLP_MEMBER_TEMPLATES
- pcit = s.equal_range(6);
- CPPUNIT_ASSERT( pcit.first != pcit.second );
- CPPUNIT_ASSERT( pcit.first != s.end() );
- CPPUNIT_ASSERT( *pcit.first == 6 );
- CPPUNIT_ASSERT( pcit.second != s.end() );
- CPPUNIT_ASSERT( *pcit.second == 7 );
-#endif
-
- //Check const_iterator on const set
- scit = crs.lower_bound(2);
- CPPUNIT_ASSERT( scit != crs.end() );
- CPPUNIT_ASSERT( *scit == 3 );
-
- scit = crs.upper_bound(5);
- CPPUNIT_ASSERT( scit != crs.end() );
- CPPUNIT_ASSERT( *scit == 6 );
-
- pcit = crs.equal_range(6);
- CPPUNIT_ASSERT( pcit.first != pcit.second );
- CPPUNIT_ASSERT( pcit.first != crs.end() );
- CPPUNIT_ASSERT( *pcit.first == 6 );
- CPPUNIT_ASSERT( pcit.second != crs.end() );
- CPPUNIT_ASSERT( *pcit.second == 7 );
-}
-
-
-class SetTestClass {
-public:
- SetTestClass (int data) : _data(data)
- {}
-
- int data() const {
- return _data;
- }
-
-private:
- int _data;
-};
-
-#if !defined (STLPORT) || defined (_STLP_USE_NAMESPACES)
-namespace std {
-#endif
-#if defined (STLPORT)
- _STLP_TEMPLATE_NULL
-#else
- template <>
-#endif
- struct less<SetTestClass> {
- bool operator () (SetTestClass const& lhs, SetTestClass const& rhs) const {
- return lhs.data() < rhs.data();
- }
- };
-#if !defined (STLPORT) || defined (_STLP_USE_NAMESPACES)
-}
-#endif
-
-void SetTest::specialized_less()
-{
- set<SetTestClass> s;
- s.insert(SetTestClass(1));
- s.insert(SetTestClass(3));
- s.insert(SetTestClass(2));
- s.insert(SetTestClass(0));
-
- set<SetTestClass>::iterator sit(s.begin()), sitEnd(s.end());
- int i = 0;
- for (; sit != sitEnd; ++sit, ++i) {
- CPPUNIT_ASSERT( sit->data() == i );
- }
-}
-
-void SetTest::implementation_check()
-{
- set<int> tree;
- tree.insert(1);
- set<int>::iterator it = tree.begin();
- int const& int_ref = *it++;
- CPPUNIT_ASSERT( int_ref == 1 );
-
- CPPUNIT_ASSERT( it == tree.end() );
- CPPUNIT_ASSERT( it != tree.begin() );
-
- set<int>::const_iterator cit = tree.begin();
- int const& int_cref = *cit++;
- CPPUNIT_ASSERT( int_cref == 1 );
-}
-
-void SetTest::reverse_iterator_test()
-{
- set<int> tree;
- tree.insert(1);
- tree.insert(2);
-
- {
- set<int>::reverse_iterator rit(tree.rbegin());
- CPPUNIT_ASSERT( *(rit++) == 2 );
- CPPUNIT_ASSERT( *(rit++) == 1 );
- CPPUNIT_ASSERT( rit == tree.rend() );
- }
-
- {
- set<int> const& ctree = tree;
- set<int>::const_reverse_iterator rit(ctree.rbegin());
- CPPUNIT_ASSERT( *(rit++) == 2 );
- CPPUNIT_ASSERT( *(rit++) == 1 );
- CPPUNIT_ASSERT( rit == ctree.rend() );
- }
-}
-
-void SetTest::allocator_with_state()
-{
- char buf1[1024];
- StackAllocator<int> stack1(buf1, buf1 + sizeof(buf1));
-
- char buf2[1024];
- StackAllocator<int> stack2(buf2, buf2 + sizeof(buf2));
-
- int i;
- typedef set<int, less<int>, StackAllocator<int> > SetInt;
- less<int> intLess;
-
- {
- SetInt sint1(intLess, stack1);
- for (i = 0; i < 5; ++i)
- sint1.insert(i);
- SetInt sint1Cpy(sint1);
-
- SetInt sint2(intLess, stack2);
- for (; i < 10; ++i)
- sint2.insert(i);
- SetInt sint2Cpy(sint2);
-
- sint1.swap(sint2);
-
- CPPUNIT_ASSERT( sint1.get_allocator().swaped() );
- CPPUNIT_ASSERT( sint2.get_allocator().swaped() );
-
- CPPUNIT_ASSERT( sint1 == sint2Cpy );
- CPPUNIT_ASSERT( sint2 == sint1Cpy );
- CPPUNIT_ASSERT( sint1.get_allocator() == stack2 );
- CPPUNIT_ASSERT( sint2.get_allocator() == stack1 );
- }
- CPPUNIT_ASSERT( stack1.ok() );
- CPPUNIT_ASSERT( stack2.ok() );
- stack1.reset(); stack2.reset();
-
- {
- SetInt sint1(intLess, stack1);
- SetInt sint1Cpy(sint1);
-
- SetInt sint2(intLess, stack2);
- for (i = 0; i < 10; ++i)
- sint2.insert(i);
- SetInt sint2Cpy(sint2);
-
- sint1.swap(sint2);
-
- CPPUNIT_ASSERT( sint1.get_allocator().swaped() );
- CPPUNIT_ASSERT( sint2.get_allocator().swaped() );
-
- CPPUNIT_ASSERT( sint1 == sint2Cpy );
- CPPUNIT_ASSERT( sint2 == sint1Cpy );
- CPPUNIT_ASSERT( sint1.get_allocator() == stack2 );
- CPPUNIT_ASSERT( sint2.get_allocator() == stack1 );
- }
- CPPUNIT_ASSERT( stack1.ok() );
- CPPUNIT_ASSERT( stack2.ok() );
- stack1.reset(); stack2.reset();
-
- {
- SetInt sint1(intLess, stack1);
- for (i = 0; i < 10; ++i)
- sint1.insert(i);
- SetInt sint1Cpy(sint1);
-
- SetInt sint2(intLess, stack2);
- SetInt sint2Cpy(sint2);
-
- sint1.swap(sint2);
-
- CPPUNIT_ASSERT( sint1.get_allocator().swaped() );
- CPPUNIT_ASSERT( sint2.get_allocator().swaped() );
-
- CPPUNIT_ASSERT( sint1 == sint2Cpy );
- CPPUNIT_ASSERT( sint2 == sint1Cpy );
- CPPUNIT_ASSERT( sint1.get_allocator() == stack2 );
- CPPUNIT_ASSERT( sint2.get_allocator() == stack1 );
- }
- CPPUNIT_ASSERT( stack1.ok() );
- CPPUNIT_ASSERT( stack2.ok() );
- stack1.reset(); stack2.reset();
-}
-
-struct Key
-{
- Key() : m_data(0) {}
- explicit Key(int data) : m_data(data) {}
-
- int m_data;
-};
-
-struct KeyCmp
-{
- bool operator () (Key lhs, Key rhs) const
- { return lhs.m_data < rhs.m_data; }
-
- bool operator () (Key lhs, int rhs) const
- { return lhs.m_data < rhs; }
-
- bool operator () (int lhs, Key rhs) const
- { return lhs < rhs.m_data; }
-};
-
-struct KeyCmpPtr
-{
- bool operator () (Key const volatile *lhs, Key const volatile *rhs) const
- { return (*lhs).m_data < (*rhs).m_data; }
-
- bool operator () (Key const volatile *lhs, int rhs) const
- { return (*lhs).m_data < rhs; }
-
- bool operator () (int lhs, Key const volatile *rhs) const
- { return lhs < (*rhs).m_data; }
-};
-
-void SetTest::template_methods()
-{
-#if defined (STLPORT) && defined (_STLP_USE_CONTAINERS_EXTENSION)
- {
- typedef set<Key, KeyCmp> KeySet;
- KeySet keySet;
- keySet.insert(Key(1));
- keySet.insert(Key(2));
- keySet.insert(Key(3));
- keySet.insert(Key(4));
-
- CPPUNIT_ASSERT( keySet.count(Key(1)) == 1 );
- CPPUNIT_ASSERT( keySet.count(1) == 1 );
- CPPUNIT_ASSERT( keySet.count(5) == 0 );
-
- CPPUNIT_ASSERT( keySet.find(2) != keySet.end() );
- CPPUNIT_ASSERT( keySet.lower_bound(2) != keySet.end() );
- CPPUNIT_ASSERT( keySet.upper_bound(2) != keySet.end() );
- CPPUNIT_ASSERT( keySet.equal_range(2) != make_pair(keySet.begin(), keySet.end()) );
-
- KeySet const& ckeySet = keySet;
- CPPUNIT_ASSERT( ckeySet.find(2) != ckeySet.end() );
- CPPUNIT_ASSERT( ckeySet.lower_bound(2) != ckeySet.end() );
- CPPUNIT_ASSERT( ckeySet.upper_bound(2) != ckeySet.end() );
- CPPUNIT_ASSERT( ckeySet.equal_range(2) != make_pair(ckeySet.begin(), ckeySet.end()) );
- }
-
- {
- typedef set<Key*, KeyCmpPtr> KeySet;
- KeySet keySet;
- Key key1(1), key2(2), key3(3), key4(4);
- keySet.insert(&key1);
- keySet.insert(&key2);
- keySet.insert(&key3);
- keySet.insert(&key4);
-
- CPPUNIT_ASSERT( keySet.count(1) == 1 );
- CPPUNIT_ASSERT( keySet.count(5) == 0 );
-
- CPPUNIT_ASSERT( keySet.find(2) != keySet.end() );
- CPPUNIT_ASSERT( keySet.lower_bound(2) != keySet.end() );
- CPPUNIT_ASSERT( keySet.upper_bound(2) != keySet.end() );
- CPPUNIT_ASSERT( keySet.equal_range(2) != make_pair(keySet.begin(), keySet.end()) );
-
- KeySet const& ckeySet = keySet;
- CPPUNIT_ASSERT( ckeySet.find(2) != ckeySet.end() );
- CPPUNIT_ASSERT( ckeySet.lower_bound(2) != ckeySet.end() );
- CPPUNIT_ASSERT( ckeySet.upper_bound(2) != ckeySet.end() );
- CPPUNIT_ASSERT( ckeySet.equal_range(2) != make_pair(ckeySet.begin(), ckeySet.end()) );
- }
- {
- typedef multiset<Key, KeyCmp> KeySet;
- KeySet keySet;
- keySet.insert(Key(1));
- keySet.insert(Key(2));
- keySet.insert(Key(3));
- keySet.insert(Key(4));
-
- CPPUNIT_ASSERT( keySet.count(Key(1)) == 1 );
- CPPUNIT_ASSERT( keySet.count(1) == 1 );
- CPPUNIT_ASSERT( keySet.count(5) == 0 );
-
- CPPUNIT_ASSERT( keySet.find(2) != keySet.end() );
- CPPUNIT_ASSERT( keySet.lower_bound(2) != keySet.end() );
- CPPUNIT_ASSERT( keySet.upper_bound(2) != keySet.end() );
- CPPUNIT_ASSERT( keySet.equal_range(2) != make_pair(keySet.begin(), keySet.end()) );
-
- KeySet const& ckeySet = keySet;
- CPPUNIT_ASSERT( ckeySet.find(2) != ckeySet.end() );
- CPPUNIT_ASSERT( ckeySet.lower_bound(2) != ckeySet.end() );
- CPPUNIT_ASSERT( ckeySet.upper_bound(2) != ckeySet.end() );
- CPPUNIT_ASSERT( ckeySet.equal_range(2) != make_pair(ckeySet.begin(), ckeySet.end()) );
- }
-
- {
- typedef multiset<Key const volatile*, KeyCmpPtr> KeySet;
- KeySet keySet;
- Key key1(1), key2(2), key3(3), key4(4);
- keySet.insert(&key1);
- keySet.insert(&key2);
- keySet.insert(&key3);
- keySet.insert(&key4);
-
- CPPUNIT_ASSERT( keySet.count(1) == 1 );
- CPPUNIT_ASSERT( keySet.count(5) == 0 );
-
- CPPUNIT_ASSERT( keySet.find(2) != keySet.end() );
- CPPUNIT_ASSERT( keySet.lower_bound(2) != keySet.end() );
- CPPUNIT_ASSERT( keySet.upper_bound(2) != keySet.end() );
- CPPUNIT_ASSERT( keySet.equal_range(2) != make_pair(keySet.begin(), keySet.end()) );
-
- KeySet const& ckeySet = keySet;
- CPPUNIT_ASSERT( ckeySet.find(2) != ckeySet.end() );
- CPPUNIT_ASSERT( ckeySet.lower_bound(2) != ckeySet.end() );
- CPPUNIT_ASSERT( ckeySet.upper_bound(2) != ckeySet.end() );
- CPPUNIT_ASSERT( ckeySet.equal_range(2) != make_pair(ckeySet.begin(), ckeySet.end()) );
- }
-#endif
-}
-
-#if !defined (STLPORT) || \
- !defined (_STLP_USE_PTR_SPECIALIZATIONS) || defined (_STLP_CLASS_PARTIAL_SPECIALIZATION)
-# if !defined (__DMC__)
-/* Simple compilation test: Check that nested types like iterator
- * can be access even if type used to instanciate container is not
- * yet completely defined.
- */
-class IncompleteClass
-{
- set<IncompleteClass> instances;
- typedef set<IncompleteClass>::iterator it;
- multiset<IncompleteClass> minstances;
- typedef multiset<IncompleteClass>::iterator mit;
-};
-# endif
-#endif