home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / stlpt453.zip / STLport-4.5.3 / test / eh / test_vector.cpp < prev    next >
C/C++ Source or Header  |  2000-12-07  |  4KB  |  123 lines

  1. /***********************************************************************************
  2.     test_vector.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. #include "TestClass.h"
  18. #include "LeakCheck.h"
  19. # if defined (EH_NEW_HEADERS)
  20. #include <vector>
  21. #else
  22. #include <vector.h>
  23. #endif
  24. #include "test_construct.h"
  25. #include "test_assign_op.h"
  26. #include "test_push_back.h"
  27. #include "test_insert.h"
  28. #include "test_push_front.h"
  29.  
  30. typedef EH_STD::__vector__<TestClass, eh_allocator(TestClass) > TestVector;
  31.  
  32. inline sequence_container_tag
  33. container_category(const TestVector&)
  34. {
  35.   return sequence_container_tag();
  36. }
  37.  
  38. void prepare_insert_n( TestVector& c, EH_STD::size_t insCnt );
  39.  
  40. void prepare_insert_n( TestVector& c, EH_STD::size_t insCnt )
  41. {
  42.     if ( random_number(2) )
  43.         c.reserve( c.size() + insCnt );
  44. }
  45.  
  46. struct test_reserve
  47. {
  48.     test_reserve( EH_STD::size_t n ) : fAmount(n) {
  49.             gTestController.SetCurrentTestName("vector::reserve()");
  50.     }
  51.     
  52.     void operator()( TestVector& v ) const
  53.     {
  54.         v.reserve( fAmount );
  55.     }
  56. private:
  57.     EH_STD::size_t fAmount;
  58. };
  59.  
  60. inline void prepare_insert_range( TestVector& vec, EH_STD::size_t, TestClass* first, TestClass* last )
  61. {
  62.     if ( random_number(2) )
  63.     {
  64.         EH_STD::ptrdiff_t d = 0;
  65.         EH_DISTANCE( first, last, d );
  66.         vec.reserve( vec.size() + d );
  67.     }
  68. }
  69.  
  70. void test_vector()
  71. {
  72.  
  73.     ConstCheck( 0, test_construct_n<TestVector>( random_number(random_base) ) );
  74.    
  75.     TestVector emptyVector;
  76.     TestVector testVector, testVector2;
  77.     EH_STD::size_t vectorSize = random_number(random_base);
  78.     
  79.     testVector.reserve(vectorSize*4);
  80.     while ( testVector.size() < vectorSize )
  81.     {
  82.         TestClass x;
  83.         testVector.push_back( x );
  84.         testVector2.push_back( TestClass() );
  85.     }
  86.     
  87.     EH_STD::size_t insCnt = random_number(random_base);
  88.     TestClass *insFirst = new TestVector::value_type[1+ insCnt];
  89.  
  90.     ConstCheck( 0, test_construct_pointer_range<TestVector>(insFirst, insFirst+insCnt) );
  91.  
  92.     WeakCheck( testVector, insert_range_tester(testVector, insFirst, insFirst+insCnt) );
  93.     WeakCheck( testVector, insert_range_at_begin_tester(testVector, insFirst, insFirst+insCnt) );
  94.     WeakCheck( testVector, insert_range_at_end_tester(testVector, insFirst, insFirst+insCnt) );
  95.     delete[] insFirst;
  96.  
  97.     WeakCheck( testVector, test_insert_one<TestVector>(testVector) );
  98.     WeakCheck( testVector, test_insert_one<TestVector>(testVector, 0) );
  99.     WeakCheck( testVector, test_insert_one<TestVector>(testVector, (int)testVector.size()) );
  100.  
  101.     WeakCheck( testVector, test_insert_n<TestVector>(testVector, random_number(random_base) ) );
  102.     WeakCheck( testVector, test_insert_n<TestVector>(testVector, random_number(random_base), 0 ) );
  103.     WeakCheck( testVector, test_insert_n<TestVector>(testVector, random_number(random_base), (int)testVector.size() ) );
  104.  
  105.     WeakCheck( testVector, insert_range_tester(testVector, testVector2.begin(), testVector2.end() ) );
  106.     
  107.  
  108.     StrongCheck( testVector, test_reserve( testVector.capacity() + random_number(random_base) ) );
  109.     StrongCheck( testVector, test_push_back<TestVector>(testVector) );
  110.     StrongCheck( emptyVector, test_push_back<TestVector>(emptyVector) );
  111.  
  112.     ConstCheck( 0, test_default_construct<TestVector>() );
  113.     ConstCheck( 0, test_construct_n_instance<TestVector>( random_number(random_base) ) );
  114.     ConstCheck( 0, test_construct_iter_range<TestVector>( testVector2 ) );
  115.     ConstCheck( testVector, test_copy_construct<TestVector>() );
  116.  
  117.     testVector2.resize( testVector.size() * 3 / 2 );
  118.     WeakCheck( testVector, test_assign_op<TestVector>( testVector2 ) );
  119.     testVector2.clear();
  120.     testVector2.resize( testVector.size() * 2 / 3 );
  121.     WeakCheck( testVector, test_assign_op<TestVector>( testVector2 ) );
  122. }
  123.