home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / stl453up.zip / stl453fx / test / eh / test_slist.cpp < prev    next >
C/C++ Source or Header  |  2002-04-29  |  3KB  |  92 lines

  1. /***********************************************************************************
  2.     test_slist.cpp
  3.  
  4.  * Copyright (c) 1997
  5.  * Mark of the Unicorn, Inc.
  6.  *
  7.  * Permission to use, copy, modify, distribute and sell this software
  8.  * and its documentation for any purpose is hereby granted without fee,
  9.  * provided that the above copyright notice appear in all copies and
  10.  * that both that copyright notice and this permission notice appear
  11.  * in supporting documentation.  Mark of the Unicorn makes no
  12.  * representations about the suitability of this software for any
  13.  * purpose.  It is provided "as is" without express or implied warranty.
  14.  
  15. ***********************************************************************************/
  16. #include "Tests.h"
  17. #if defined( EH_SLIST_IMPLEMENTED )
  18. #include "TestClass.h"
  19. #include "LeakCheck.h"
  20. # if defined (EH_NEW_HEADERS) && defined (EH_USE_SGI_STL)
  21. #include <slist>
  22. #else
  23. #include <slist.h>
  24. #endif
  25. #include "test_construct.h"
  26. #include "test_assign_op.h"
  27. #include "test_push_back.h"
  28. #include "test_insert.h"
  29. #include "test_push_front.h"
  30.  
  31. typedef EH_STD::__slist__<TestClass, eh_allocator(TestClass) > TestSList;
  32.  
  33. inline sequence_container_tag
  34. container_category(const TestSList&)
  35. {
  36.   return sequence_container_tag();
  37. }
  38.  
  39. struct test_slist_sort
  40. {
  41.     test_slist_sort() {
  42.         gTestController.SetCurrentTestName("slist::sort()");
  43.     }
  44.     void operator()( TestSList& slist ) const
  45.     {
  46.         slist.sort();
  47.         for ( TestSList::iterator p = slist.begin(), q; p != slist.end(); q = p, p++ )
  48.             if ( p != slist.begin() )
  49.                 EH_ASSERT( *p >= *q );
  50.     }
  51. };
  52.  
  53. void test_slist()
  54. {
  55.     TestSList testSList, testSList2;
  56.     EH_STD::size_t slistSize = random_number(random_base);
  57.     
  58.     while ( testSList.size() < slistSize )
  59.     {
  60.         TestClass x;
  61.         testSList.push_front( x );
  62.         testSList2.push_front( TestClass() );
  63.     }
  64.  
  65.     StrongCheck( testSList, test_insert_one<TestSList>(testSList) );
  66.     StrongCheck( testSList, test_insert_one<TestSList>(testSList, 0) );
  67.     StrongCheck( testSList, test_insert_one<TestSList>(testSList, (int)testSList.size()) );
  68.  
  69.     WeakCheck( testSList, test_insert_n<TestSList>(testSList, random_number(random_base) ) );
  70.     WeakCheck( testSList, test_insert_n<TestSList>(testSList, random_number(random_base), 0 ) );
  71.     WeakCheck( testSList, test_insert_n<TestSList>(testSList, random_number(random_base), (int)testSList.size() ) );
  72.  
  73.     EH_STD::size_t insCnt = random_number(random_base);
  74.     TestClass *insFirst = new TestSList::value_type[1+insCnt];
  75.     WeakCheck( testSList, insert_range_tester(testSList, insFirst, insFirst+insCnt) );
  76.  
  77.     ConstCheck( 0, test_construct_pointer_range<TestSList>(insFirst, insFirst+insCnt) );
  78.     delete[] insFirst;
  79.     WeakCheck( testSList, test_insert_range<TestSList,TestSList::iterator>(testSList, testSList2.begin(), testSList2.end() ) );
  80.     StrongCheck( testSList, test_push_front<TestSList>(testSList) );
  81.     StrongCheck( testSList, test_slist_sort() );    // Simply to verify strength.    
  82.   
  83.     ConstCheck( 0, test_default_construct<TestSList>() );
  84.     ConstCheck( 0, test_construct_n<TestSList>( random_number(random_base) ) );
  85.     ConstCheck( 0, test_construct_n_instance<TestSList>( random_number(random_base) ) );
  86.     ConstCheck( 0, test_construct_iter_range<TestSList>( testSList2 ) );
  87.     ConstCheck( testSList, test_copy_construct<TestSList>() );
  88.     WeakCheck( testSList, test_assign_op<TestSList>( testSList2 ) );
  89.  
  90. }
  91. #endif // EH_SLIST_IMPLEMENTED
  92.