1e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott/*********************************************************************************** 2e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott test_construct.h 3e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 4e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * Copyright (c) 1997 5e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * Mark of the Unicorn, Inc. 6e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * 7e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * Permission to use, copy, modify, distribute and sell this software 8e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * and its documentation for any purpose is hereby granted without fee, 9e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * provided that the above copyright notice appear in all copies and 10e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * that both that copyright notice and this permission notice appear 11e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * in supporting documentation. Mark of the Unicorn makes no 12e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * representations about the suitability of this software for any 13e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * purpose. It is provided "as is" without express or implied warranty. 14e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 15e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott***********************************************************************************/ 16e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#ifndef test_construct_H_ 17e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#define test_construct_H_ 18e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 19e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#include "Prefix.h" 20e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if defined (EH_NEW_HEADERS) 21e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# include <algorithm> 22e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# include <cassert> 23e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# include <cstdlib> 24e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#else 25e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# include <algo.h> 26e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# include <assert.h> 27e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# include <stdlib.h> 28e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif 29e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 30e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick ScottUSING_CSTD_NAME(size_t) 31e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 32e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scotttemplate <class T> 33e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottstruct test_copy_construct { 34e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott test_copy_construct() { 35e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott gTestController.SetCurrentTestName("copy constructor"); 36e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 37e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 38e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott void operator()( const T& t ) const { 39e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott T aCopy( t ); 40e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott // Prevent simulated failures during verification 41e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott gTestController.CancelFailureCountdown(); 42e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott //EH_ASSERT( aCopy == t ); 43e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CheckInvariant(t); 44e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 45e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott}; 46e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 47e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scotttemplate <class T> 48e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottstruct test_default_construct { 49e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott test_default_construct() { 50e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott gTestController.SetCurrentTestName("default constructor"); 51e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 52e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 53e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott void operator()( int ) const { 54e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott T t; 55e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CheckInvariant(t); 56e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 57e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott}; 58e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 59e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scotttemplate <class T> 60e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottstruct test_construct_n { 61e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott test_construct_n( size_t _n ) : n(_n+1) { 62e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott gTestController.SetCurrentTestName("n-size constructor"); 63e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 64e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 65e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott void operator()( int ) const { 66e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott T t(n); 67e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CheckInvariant(t); 68e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 69e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 70e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott size_t n; 71e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott}; 72e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 73e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scotttemplate <class T> 74e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottstruct test_construct_n_instance { 75e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott test_construct_n_instance( size_t _n ) : n(_n+1) { 76e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott gTestController.SetCurrentTestName("n-size with instance constructor"); 77e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 78e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 79e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott void operator()( int ) const { 80e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott typedef typename T::value_type Value_type; 81e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott Value_type Val = 0; 82e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott T t( n, Val ); 83e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CheckInvariant(t); 84e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 85e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 86e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott size_t n; 87e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott}; 88e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 89e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scotttemplate <class T> 90e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottstruct test_construct_pointer_range { 91e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott test_construct_pointer_range( const typename T::value_type *first, 92e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott const typename T::value_type* last ) 93e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott : fItems( first ), fEnd( last ) { 94e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott gTestController.SetCurrentTestName("pointer range constructor"); 95e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 96e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 97e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott void operator()( int ) const { 98e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott T t( fItems, fEnd ); 99e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott // Prevent simulated failures during verification 100e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott gTestController.CancelFailureCountdown(); 101e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CheckInvariant(t); 102e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 103e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 104e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott const typename T::value_type* fItems, *fEnd; 105e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott}; 106e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 107e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scotttemplate <class T> 108e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottstruct test_construct_iter_range { 109e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 110e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott test_construct_iter_range( const T& src ) : fItems( src ) { 111e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott gTestController.SetCurrentTestName("iterator range constructor"); 112e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 113e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 114e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott void operator()( int ) const { 115e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott T t( fItems.begin(), fItems.end() ); 116e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott // Prevent simulated failures during verification 117e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott gTestController.CancelFailureCountdown(); 118e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott EH_ASSERT( t == fItems ); 119e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CheckInvariant(t); 120e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 121e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 122e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott const T& fItems; 123e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott}; 124e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 125e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif // test_construct_H_ 126