1/*********************************************************************************** 2 test_deque.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 17#include "Tests.h" 18# if defined (EH_NEW_HEADERS) 19# ifdef __SUNPRO_CC 20# include <stdio.h> 21# else 22# include <cstdio> 23# endif 24# include <deque> 25# else 26# include <stdio.h> 27# include <deque.h> 28# endif 29#include "TestClass.h" 30#include "LeakCheck.h" 31#include "test_construct.h" 32#include "test_assign_op.h" 33#include "test_push_back.h" 34#include "test_insert.h" 35#include "test_push_front.h" 36 37typedef TestClass DQTestClass; 38 39typedef EH_STD::deque<DQTestClass, eh_allocator(DQTestClass) > TestDeque; 40 41inline sequence_container_tag 42container_category(const TestDeque&) 43{ 44 return sequence_container_tag(); 45} 46 47void test_deque() 48{ 49 size_t dequeSize = random_number(random_base); 50 TestDeque emptyDeque; 51 TestDeque testDeque, testDeque2; 52 while ( testDeque.size() < dequeSize ) 53 { 54 DQTestClass x; 55 testDeque.push_back( x ); 56 testDeque2.push_back( DQTestClass() ); 57 } 58 59 ConstCheck( testDeque, test_copy_construct<TestDeque>() ); 60 WeakCheck( testDeque, test_insert_one<TestDeque>(testDeque) ); 61 StrongCheck( testDeque, test_insert_one<TestDeque>(testDeque, 0) ); 62 StrongCheck( testDeque, test_insert_one<TestDeque>(testDeque, (int)testDeque.size()) ); 63 64 WeakCheck( testDeque, test_insert_n<TestDeque>(testDeque, random_number(random_base) ) ); 65 StrongCheck( testDeque, test_insert_n<TestDeque>(testDeque, random_number(random_base), 0 ) ); 66 StrongCheck( testDeque, test_insert_n<TestDeque>(testDeque, random_number(random_base), (int)testDeque.size() ) ); 67 68 size_t insCnt = random_number(random_base); 69 DQTestClass *insFirst = new TestDeque::value_type[insCnt + 1]; 70 71 WeakCheck( testDeque, insert_range_tester(testDeque, insFirst, insFirst + insCnt) ); 72 StrongCheck( testDeque, insert_range_at_begin_tester(testDeque, insFirst, insFirst + insCnt) ); 73 StrongCheck( testDeque, insert_range_at_end_tester(testDeque, insFirst, insFirst + insCnt) ); 74 75 ConstCheck( 0, test_construct_pointer_range<TestDeque>(insFirst, insFirst + insCnt) ); 76 delete[] insFirst; 77 78 WeakCheck( testDeque, insert_range_tester(testDeque, testDeque2.begin(), testDeque2.end() ) ); 79 80 StrongCheck( testDeque, test_push_back<TestDeque>(testDeque) ); 81 StrongCheck( emptyDeque, test_push_back<TestDeque>(emptyDeque) ); 82 StrongCheck( testDeque, test_push_front<TestDeque>(testDeque) ); 83 StrongCheck( emptyDeque, test_push_front<TestDeque>(emptyDeque) ); 84 85 86 ConstCheck( 0, test_default_construct<TestDeque>() ); 87 ConstCheck( 0, test_construct_n<TestDeque>( random_number(random_base) ) ); 88 ConstCheck( 0, test_construct_n_instance<TestDeque>( random_number(random_base) ) ); 89 ConstCheck( 0, test_construct_iter_range<TestDeque>( testDeque2 ) ); 90 91 testDeque2.resize( testDeque.size() * 3 / 2 ); 92 WeakCheck( testDeque, test_assign_op<TestDeque>( testDeque2 ) ); 93 testDeque2.resize( testDeque.size() * 2 / 3 ); 94 WeakCheck( testDeque, test_assign_op<TestDeque>( testDeque2 ) ); 95} 96