aboutsummaryrefslogtreecommitdiff
path: root/test/unit/slist_test.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'test/unit/slist_test.cpp')
-rw-r--r--test/unit/slist_test.cpp554
1 files changed, 0 insertions, 554 deletions
diff --git a/test/unit/slist_test.cpp b/test/unit/slist_test.cpp
deleted file mode 100644
index 383ece2..0000000
--- a/test/unit/slist_test.cpp
+++ /dev/null
@@ -1,554 +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 <algorithm>
-#if defined (STLPORT) && !defined (_STLP_NO_EXTENSIONS)
-# include <slist>
-# if !defined (_STLP_USE_NO_IOSTREAMS)
-# include <sstream>
-# endif
-# include <iterator>
-# include <functional>
-#endif
-
-#include "cppunit/cppunit_proxy.h"
-
-#if !defined (STLPORT) || defined(_STLP_USE_NAMESPACES)
-using namespace std;
-#endif
-
-#if !defined (STLPORT) && defined(__GNUC__)
-using namespace __gnu_cxx;
-#endif
-
-//
-// TestCase class
-//
-class SlistTest : public CPPUNIT_NS::TestCase
-{
- CPPUNIT_TEST_SUITE(SlistTest);
-#if !defined (STLPORT) || defined (_STLP_NO_EXTENSIONS) || defined (_STLP_USE_NO_IOSTREAMS)
- CPPUNIT_IGNORE;
-#endif
- CPPUNIT_TEST(slist1);
-#if defined (STLPORT) && defined (_STLP_USE_NO_IOSTREAMS)
- CPPUNIT_STOP_IGNORE;
-#endif
- CPPUNIT_TEST(erase);
- CPPUNIT_TEST(insert);
- CPPUNIT_TEST(splice);
- CPPUNIT_TEST(allocator_with_state);
- CPPUNIT_TEST_SUITE_END();
-
-protected:
- void slist1();
- void erase();
- void insert();
- void splice();
- void allocator_with_state();
-};
-
-CPPUNIT_TEST_SUITE_REGISTRATION(SlistTest);
-
-//
-// tests implementation
-//
-void SlistTest::slist1()
-{
-#if defined (STLPORT) && !defined (_STLP_USE_NO_IOSTREAMS) && !defined (_STLP_NO_EXTENSIONS)
-/*
-original: xlxtss
-reversed: sstxlx
-removed: sstl
-uniqued: stl
-sorted: lst
-*/
-
- char array [] = { 'x', 'l', 'x', 't', 's', 's' };
- ostringstream os;
- ostream_iterator<char> o(os,"");
- slist<char> str(array+0, array + 6);
- slist<char>::iterator i;
- //Check const_iterator construction from iterator
- slist<char>::const_iterator ci(i);
- slist<char>::const_iterator ci2(ci);
-// cout << "reversed: ";
- str.reverse();
- for(i = str.begin(); i != str.end(); i++)
- os << *i;
- stringbuf* buff=os.rdbuf();
- string result=buff->str();
- CPPUNIT_ASSERT(!strcmp(result.c_str(),"sstxlx"));
-
- //cout << "removed: ";
- str.remove('x');
- ostringstream os2;
- for(i = str.begin(); i != str.end(); i++)
- os2 << *i;
- buff=os2.rdbuf();
- result=buff->str();
- CPPUNIT_ASSERT(!strcmp(result.c_str(),"sstl"));
-
-
- //cout << "uniqued: ";
- str.unique();
- ostringstream os3;
- for(i = str.begin(); i != str.end(); i++)
- os3 << *i;
- buff=os3.rdbuf();
- result=buff->str();
- CPPUNIT_ASSERT(!strcmp(result.c_str(),"stl"));
-
- //cout << "sorted: ";
- str.sort();
- ostringstream os4;
- for(i = str.begin(); i != str.end(); i++)
- os4 << *i;
- buff = os4.rdbuf();
- result = buff->str();
- CPPUNIT_ASSERT(!strcmp(result.c_str(),"lst"));
-
- //A small compilation time check to be activated from time to time:
-# if 0
- {
- slist<char>::iterator sl_char_ite;
- slist<int>::iterator sl_int_ite;
- CPPUNIT_ASSERT( sl_char_ite != sl_int_ite );
- }
-# endif
-#endif
-}
-
-void SlistTest::erase()
-{
-#if defined (STLPORT) && !defined (_STLP_NO_EXTENSIONS)
- int array[] = { 0, 1, 2, 3, 4 };
- slist<int> sl(array, array + 5);
- slist<int>::iterator slit;
-
- slit = sl.erase(sl.begin());
- CPPUNIT_ASSERT( *slit == 1);
-
- ++slit++; ++slit;
- slit = sl.erase(sl.begin(), slit);
- CPPUNIT_ASSERT( *slit == 3 );
-
- sl.assign(array, array + 5);
-
- slit = sl.erase_after(sl.begin());
- CPPUNIT_ASSERT( *slit == 2 );
-
- slit = sl.begin(); ++slit; ++slit;
- slit = sl.erase_after(sl.begin(), slit);
- CPPUNIT_ASSERT( *slit == 3 );
-
- sl.erase_after(sl.before_begin());
- CPPUNIT_ASSERT( sl.front() == 3 );
-#endif
-}
-
-void SlistTest::insert()
-{
-#if defined (STLPORT) && !defined (_STLP_NO_EXTENSIONS)
- int array[] = { 0, 1, 2, 3, 4 };
-
- //insert
- {
- slist<int> sl;
-
- sl.insert(sl.begin(), 5);
- CPPUNIT_ASSERT( sl.front() == 5 );
- CPPUNIT_ASSERT( sl.size() == 1 );
-
- //debug mode check:
- //sl.insert(sl.before_begin(), array, array + 5);
-
- sl.insert(sl.begin(), array, array + 5);
- CPPUNIT_ASSERT( sl.size() == 6 );
- int i;
- slist<int>::iterator slit(sl.begin());
- for (i = 0; slit != sl.end(); ++slit, ++i) {
- CPPUNIT_ASSERT( *slit == i );
- }
- }
-
- //insert_after
- {
- slist<int> sl;
-
- //debug check:
- //sl.insert_after(sl.begin(), 5);
-
- sl.insert_after(sl.before_begin(), 5);
- CPPUNIT_ASSERT( sl.front() == 5 );
- CPPUNIT_ASSERT( sl.size() == 1 );
-
- sl.insert_after(sl.before_begin(), array, array + 5);
- CPPUNIT_ASSERT( sl.size() == 6 );
- int i;
- slist<int>::iterator slit(sl.begin());
- for (i = 0; slit != sl.end(); ++slit, ++i) {
- CPPUNIT_ASSERT( *slit == i );
- }
- }
-#endif
-}
-
-void SlistTest::splice()
-{
-#if defined (STLPORT) && !defined (_STLP_NO_EXTENSIONS)
- int array[] = { 0, 1, 2, 3, 4 };
-
- //splice
- {
- slist<int> sl1(array, array + 5);
- slist<int> sl2(array, array + 5);
- slist<int>::iterator slit;
-
- //a no op:
- sl1.splice(sl1.begin(), sl1, sl1.begin());
- CPPUNIT_ASSERT( sl1 == sl2 );
-
- slit = sl1.begin(); ++slit;
- //a no op:
- sl1.splice(slit, sl1, sl1.begin());
- CPPUNIT_ASSERT( sl1 == sl2 );
-
- sl1.splice(sl1.end(), sl1, sl1.begin());
- slit = sl1.begin();
- CPPUNIT_ASSERT( *(slit++) == 1 );
- CPPUNIT_ASSERT( *(slit++) == 2 );
- CPPUNIT_ASSERT( *(slit++) == 3 );
- CPPUNIT_ASSERT( *(slit++) == 4 );
- CPPUNIT_ASSERT( *slit == 0 );
- sl1.splice(sl1.begin(), sl1, slit);
- CPPUNIT_ASSERT( sl1 == sl2 );
-
- sl1.splice(sl1.begin(), sl2);
- size_t i;
- for (i = 0, slit = sl1.begin(); slit != sl1.end(); ++slit, ++i) {
- if (i == 5) i = 0;
- CPPUNIT_ASSERT( *slit == array[i] );
- }
-
- slit = sl1.begin();
- advance(slit, 5);
- CPPUNIT_ASSERT( *slit == 0 );
- sl2.splice(sl2.begin(), sl1, sl1.begin(), slit);
- CPPUNIT_ASSERT( sl1 == sl2 );
-
- slit = sl1.begin(); ++slit;
- sl1.splice(sl1.begin(), sl1, slit, sl1.end());
- slit = sl1.begin();
- CPPUNIT_ASSERT( *(slit++) == 1 );
- CPPUNIT_ASSERT( *(slit++) == 2 );
- CPPUNIT_ASSERT( *(slit++) == 3 );
- CPPUNIT_ASSERT( *(slit++) == 4 );
- CPPUNIT_ASSERT( *slit == 0 );
-
- // a no op
- sl2.splice(sl2.end(), sl2, sl2.begin(), sl2.end());
- for (i = 0, slit = sl2.begin(); slit != sl2.end(); ++slit, ++i) {
- CPPUNIT_ASSERT( i < 5 );
- CPPUNIT_ASSERT( *slit == array[i] );
- }
-
- slit = sl2.begin();
- advance(slit, 3);
- sl2.splice(sl2.end(), sl2, sl2.begin(), slit);
- slit = sl2.begin();
- CPPUNIT_ASSERT( *(slit++) == 3 );
- CPPUNIT_ASSERT( *(slit++) == 4 );
- CPPUNIT_ASSERT( *(slit++) == 0 );
- CPPUNIT_ASSERT( *(slit++) == 1 );
- CPPUNIT_ASSERT( *slit == 2 );
- }
-
- //splice_after
- {
- slist<int> sl1(array, array + 5);
- slist<int> sl2(array, array + 5);
- slist<int>::iterator slit;
-
- //a no op:
- sl1.splice_after(sl1.begin(), sl1, sl1.begin());
- CPPUNIT_ASSERT( sl1 == sl2 );
-
- sl1.splice_after(sl1.before_begin(), sl1, sl1.begin());
- slit = sl1.begin();
- CPPUNIT_ASSERT( *(slit++) == 1 );
- CPPUNIT_ASSERT( *(slit++) == 0 );
- CPPUNIT_ASSERT( *(slit++) == 2 );
- CPPUNIT_ASSERT( *(slit++) == 3 );
- CPPUNIT_ASSERT( *slit == 4 );
- sl1.splice_after(sl1.before_begin(), sl1, sl1.begin());
- CPPUNIT_ASSERT( sl1 == sl2 );
-
- sl1.splice_after(sl1.before_begin(), sl2);
- size_t i;
- for (i = 0, slit = sl1.begin(); slit != sl1.end(); ++slit, ++i) {
- if (i == 5) i = 0;
- CPPUNIT_ASSERT( *slit == array[i] );
- }
-
- slit = sl1.begin();
- advance(slit, 4);
- CPPUNIT_ASSERT( *slit == 4 );
- sl2.splice_after(sl2.before_begin(), sl1, sl1.before_begin(), slit);
- CPPUNIT_ASSERT( sl1 == sl2 );
-
- sl1.splice_after(sl1.before_begin(), sl1, sl1.begin(), sl1.previous(sl1.end()));
- slit = sl1.begin();
- CPPUNIT_ASSERT( *(slit++) == 1 );
- CPPUNIT_ASSERT( *(slit++) == 2 );
- CPPUNIT_ASSERT( *(slit++) == 3 );
- CPPUNIT_ASSERT( *(slit++) == 4 );
- CPPUNIT_ASSERT( *slit == 0 );
-
- // a no op
- sl2.splice_after(sl2.before_begin(), sl2, sl2.before_begin(), sl2.previous(sl2.end()));
- for (i = 0, slit = sl2.begin(); slit != sl2.end(); ++slit, ++i) {
- CPPUNIT_ASSERT( i < 5 );
- CPPUNIT_ASSERT( *slit == array[i] );
- }
-
- slit = sl2.begin();
- advance(slit, 2);
- sl2.splice_after(sl2.previous(sl2.end()), sl2, sl2.before_begin(), slit);
- slit = sl2.begin();
- CPPUNIT_ASSERT( *(slit++) == 3 );
- CPPUNIT_ASSERT( *(slit++) == 4 );
- CPPUNIT_ASSERT( *(slit++) == 0 );
- CPPUNIT_ASSERT( *(slit++) == 1 );
- CPPUNIT_ASSERT( *slit == 2 );
- }
-#endif
-}
-
-
-void SlistTest::allocator_with_state()
-{
-#if defined (STLPORT) && !defined (_STLP_NO_EXTENSIONS)
- char buf1[1024];
- StackAllocator<int> stack1(buf1, buf1 + sizeof(buf1));
-
- char buf2[1024];
- StackAllocator<int> stack2(buf2, buf2 + sizeof(buf2));
-
- typedef slist<int, StackAllocator<int> > SlistInt;
- {
- SlistInt slint1(10, 0, stack1);
- SlistInt slint1Cpy(slint1);
-
- SlistInt slint2(10, 1, stack2);
- SlistInt slint2Cpy(slint2);
-
- slint1.swap(slint2);
-
- CPPUNIT_ASSERT( slint1.get_allocator().swaped() );
- CPPUNIT_ASSERT( slint2.get_allocator().swaped() );
-
- CPPUNIT_ASSERT( slint1 == slint2Cpy );
- CPPUNIT_ASSERT( slint2 == slint1Cpy );
- CPPUNIT_ASSERT( slint1.get_allocator() == stack2 );
- CPPUNIT_ASSERT( slint2.get_allocator() == stack1 );
- }
- CPPUNIT_CHECK( stack1.ok() );
- CPPUNIT_CHECK( stack2.ok() );
- stack1.reset(); stack2.reset();
-
- {
- SlistInt slint1(stack1);
- SlistInt slint1Cpy(slint1);
-
- SlistInt slint2(10, 1, stack2);
- SlistInt slint2Cpy(slint2);
-
- slint1.swap(slint2);
-
- CPPUNIT_ASSERT( slint1.get_allocator().swaped() );
- CPPUNIT_ASSERT( slint2.get_allocator().swaped() );
-
- CPPUNIT_ASSERT( slint1 == slint2Cpy );
- CPPUNIT_ASSERT( slint2 == slint1Cpy );
- CPPUNIT_ASSERT( slint1.get_allocator() == stack2 );
- CPPUNIT_ASSERT( slint2.get_allocator() == stack1 );
- }
- CPPUNIT_CHECK( stack1.ok() );
- CPPUNIT_CHECK( stack2.ok() );
- stack1.reset(); stack2.reset();
-
- {
- SlistInt slint1(10, 0, stack1);
- SlistInt slint1Cpy(slint1);
-
- SlistInt slint2(stack2);
- SlistInt slint2Cpy(slint2);
-
- slint1.swap(slint2);
-
- CPPUNIT_ASSERT( slint1.get_allocator().swaped() );
- CPPUNIT_ASSERT( slint2.get_allocator().swaped() );
-
- CPPUNIT_ASSERT( slint1 == slint2Cpy );
- CPPUNIT_ASSERT( slint2 == slint1Cpy );
- CPPUNIT_ASSERT( slint1.get_allocator() == stack2 );
- CPPUNIT_ASSERT( slint2.get_allocator() == stack1 );
- }
- CPPUNIT_CHECK( stack1.ok() );
- CPPUNIT_CHECK( stack2.ok() );
- stack1.reset(); stack2.reset();
-
- //splice(iterator, slist)
- {
- SlistInt slint1(10, 0, stack1);
- SlistInt slint2(10, 1, stack2);
-
- slint1.splice(slint1.begin(), slint2);
- CPPUNIT_ASSERT( slint1.size() == 20 );
- CPPUNIT_ASSERT( slint2.empty() );
- }
- CPPUNIT_CHECK( stack1.ok() );
- CPPUNIT_CHECK( stack2.ok() );
- stack1.reset(); stack2.reset();
-
- //splice(iterator, slist, iterator)
- {
- SlistInt slint1(10, 0, stack1);
- SlistInt slint2(10, 1, stack2);
-
- slint1.splice(slint1.begin(), slint2, slint2.begin());
- CPPUNIT_ASSERT( slint1.size() == 11 );
- CPPUNIT_ASSERT( slint2.size() == 9 );
- }
- CPPUNIT_CHECK( stack1.ok() );
- CPPUNIT_CHECK( stack2.ok() );
- stack1.reset(); stack2.reset();
-
- //splice(iterator, slist, iterator, iterator)
- {
- SlistInt slint1(10, 0, stack1);
- SlistInt slint2(10, 1, stack2);
-
- SlistInt::iterator lit(slint2.begin());
- advance(lit, 5);
- slint1.splice(slint1.begin(), slint2, slint2.begin(), lit);
- CPPUNIT_ASSERT( slint1.size() == 15 );
- CPPUNIT_ASSERT( slint2.size() == 5 );
- }
- CPPUNIT_CHECK( stack1.ok() );
- CPPUNIT_CHECK( stack2.ok() );
- stack1.reset(); stack2.reset();
-
- //splice_after(iterator, slist)
- {
- SlistInt slint1(10, 0, stack1);
- SlistInt slint2(10, 1, stack2);
-
- slint1.splice_after(slint1.before_begin(), slint2);
- CPPUNIT_ASSERT( slint1.size() == 20 );
- CPPUNIT_ASSERT( slint2.empty() );
- }
- CPPUNIT_CHECK( stack1.ok() );
- CPPUNIT_CHECK( stack2.ok() );
- stack1.reset(); stack2.reset();
-
- //splice_after(iterator, slist, iterator)
- {
- SlistInt slint1(10, 0, stack1);
- SlistInt slint2(10, 1, stack2);
-
- slint1.splice_after(slint1.before_begin(), slint2, slint2.before_begin());
- CPPUNIT_ASSERT( slint1.size() == 11 );
- CPPUNIT_ASSERT( slint2.size() == 9 );
- }
- CPPUNIT_CHECK( stack1.ok() );
- CPPUNIT_CHECK( stack2.ok() );
- stack1.reset(); stack2.reset();
-
- //splice_after(iterator, slist, iterator, iterator)
- {
- SlistInt slint1(10, 0, stack1);
- SlistInt slint2(10, 1, stack2);
-
- SlistInt::iterator lit(slint2.begin());
- advance(lit, 4);
- slint1.splice_after(slint1.before_begin(), slint2, slint2.before_begin(), lit);
- CPPUNIT_ASSERT( slint1.size() == 15 );
- CPPUNIT_ASSERT( slint2.size() == 5 );
- }
- CPPUNIT_CHECK( stack1.ok() );
- CPPUNIT_CHECK( stack2.ok() );
- stack1.reset(); stack2.reset();
-
- //merge(slist)
- {
- SlistInt slint1(10, 0, stack1);
- SlistInt slint2(10, 1, stack2);
-
- SlistInt slintref(stack2);
- slintref.insert_after(slintref.before_begin(), 10, 1);
- slintref.insert_after(slintref.before_begin(), 10, 0);
-
- slint1.merge(slint2);
- CPPUNIT_ASSERT( slint1.size() == 20 );
- CPPUNIT_ASSERT( slint1 == slintref );
- CPPUNIT_ASSERT( slint2.empty() );
- }
- CPPUNIT_CHECK( stack1.ok() );
- CPPUNIT_CHECK( stack2.ok() );
-
- //merge(slist, predicate)
-# if (!defined (STLPORT) || !defined (_STLP_NO_MEMBER_TEMPLATES)) && \
- (!defined (_MSC_VER) || (_MSC_VER >= 1300))
- {
- SlistInt slint1(10, 0, stack1);
- SlistInt slint2(10, 1, stack2);
-
- SlistInt slintref(stack2);
- slintref.insert_after(slintref.before_begin(), 10, 0);
- slintref.insert_after(slintref.before_begin(), 10, 1);
-
- slint1.merge(slint2, greater<int>());
- CPPUNIT_ASSERT( slint1.size() == 20 );
- CPPUNIT_ASSERT( slint1 == slintref );
- CPPUNIT_ASSERT( slint2.empty() );
- }
- CPPUNIT_CHECK( stack1.ok() );
- CPPUNIT_CHECK( stack2.ok() );
-
- //sort
- {
- //This is rather a compile time test.
- //We check that sort implementation is correct when list is instanciated
- //with an allocator that do not have a default constructor.
- SlistInt slint1(stack1);
- slint1.push_front(1);
- slint1.insert_after(slint1.before_begin(), 10, 0);
- greater<int> gt;
- slint1.sort(gt);
- CPPUNIT_ASSERT( slint1.front() == 1 );
- slint1.sort();
- SlistInt::iterator slit(slint1.begin());
- advance(slit, 10);
- CPPUNIT_ASSERT( *slit == 1 );
- }
-# endif
-#endif
-}
-
-#if defined (STLPORT) && !defined (_STLP_NO_EXTENSIONS) && \
- (!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
-{
- slist<IncompleteClass> instances;
- typedef slist<IncompleteClass>::iterator it;
-};
-# endif
-#endif