/*********************************************************************************** test_construct.h * Copyright (c) 1997 * Mark of the Unicorn, Inc. * * Permission to use, copy, modify, distribute and sell this software * and its documentation for any purpose is hereby granted without fee, * provided that the above copyright notice appear in all copies and * that both that copyright notice and this permission notice appear * in supporting documentation. Mark of the Unicorn makes no * representations about the suitability of this software for any * purpose. It is provided "as is" without express or implied warranty. ***********************************************************************************/ #ifndef test_construct_H_ #define test_construct_H_ #include "Prefix.h" #if defined (EH_NEW_HEADERS) # include <algorithm> # include <cassert> # include <cstdlib> #else # include <algo.h> # include <assert.h> # include <stdlib.h> #endif USING_CSTD_NAME(size_t) template <class T> struct test_copy_construct { test_copy_construct() { gTestController.SetCurrentTestName("copy constructor"); } void operator()( const T& t ) const { T aCopy( t ); // Prevent simulated failures during verification gTestController.CancelFailureCountdown(); //EH_ASSERT( aCopy == t ); CheckInvariant(t); } }; template <class T> struct test_default_construct { test_default_construct() { gTestController.SetCurrentTestName("default constructor"); } void operator()( int ) const { T t; CheckInvariant(t); } }; template <class T> struct test_construct_n { test_construct_n( size_t _n ) : n(_n+1) { gTestController.SetCurrentTestName("n-size constructor"); } void operator()( int ) const { T t(n); CheckInvariant(t); } size_t n; }; template <class T> struct test_construct_n_instance { test_construct_n_instance( size_t _n ) : n(_n+1) { gTestController.SetCurrentTestName("n-size with instance constructor"); } void operator()( int ) const { typedef typename T::value_type Value_type; Value_type Val = 0; T t( n, Val ); CheckInvariant(t); } size_t n; }; template <class T> struct test_construct_pointer_range { test_construct_pointer_range( const typename T::value_type *first, const typename T::value_type* last ) : fItems( first ), fEnd( last ) { gTestController.SetCurrentTestName("pointer range constructor"); } void operator()( int ) const { T t( fItems, fEnd ); // Prevent simulated failures during verification gTestController.CancelFailureCountdown(); CheckInvariant(t); } const typename T::value_type* fItems, *fEnd; }; template <class T> struct test_construct_iter_range { test_construct_iter_range( const T& src ) : fItems( src ) { gTestController.SetCurrentTestName("iterator range constructor"); } void operator()( int ) const { T t( fItems.begin(), fItems.end() ); // Prevent simulated failures during verification gTestController.CancelFailureCountdown(); EH_ASSERT( t == fItems ); CheckInvariant(t); } const T& fItems; }; #endif // test_construct_H_