1/*********************************************************************************** 2 test_construct.h 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#ifndef test_construct_H_ 17#define test_construct_H_ 18 19#include "Prefix.h" 20#if defined (EH_NEW_HEADERS) 21# include <algorithm> 22# include <cassert> 23# include <cstdlib> 24#else 25# include <algo.h> 26# include <assert.h> 27# include <stdlib.h> 28#endif 29 30USING_CSTD_NAME(size_t) 31 32template <class T> 33struct test_copy_construct { 34 test_copy_construct() { 35 gTestController.SetCurrentTestName("copy constructor"); 36 } 37 38 void operator()( const T& t ) const { 39 T aCopy( t ); 40 // Prevent simulated failures during verification 41 gTestController.CancelFailureCountdown(); 42 //EH_ASSERT( aCopy == t ); 43 CheckInvariant(t); 44 } 45}; 46 47template <class T> 48struct test_default_construct { 49 test_default_construct() { 50 gTestController.SetCurrentTestName("default constructor"); 51 } 52 53 void operator()( int ) const { 54 T t; 55 CheckInvariant(t); 56 } 57}; 58 59template <class T> 60struct test_construct_n { 61 test_construct_n( size_t _n ) : n(_n+1) { 62 gTestController.SetCurrentTestName("n-size constructor"); 63 } 64 65 void operator()( int ) const { 66 T t(n); 67 CheckInvariant(t); 68 } 69 70 size_t n; 71}; 72 73template <class T> 74struct test_construct_n_instance { 75 test_construct_n_instance( size_t _n ) : n(_n+1) { 76 gTestController.SetCurrentTestName("n-size with instance constructor"); 77 } 78 79 void operator()( int ) const { 80 typedef typename T::value_type Value_type; 81 Value_type Val = 0; 82 T t( n, Val ); 83 CheckInvariant(t); 84 } 85 86 size_t n; 87}; 88 89template <class T> 90struct test_construct_pointer_range { 91 test_construct_pointer_range( const typename T::value_type *first, 92 const typename T::value_type* last ) 93 : fItems( first ), fEnd( last ) { 94 gTestController.SetCurrentTestName("pointer range constructor"); 95 } 96 97 void operator()( int ) const { 98 T t( fItems, fEnd ); 99 // Prevent simulated failures during verification 100 gTestController.CancelFailureCountdown(); 101 CheckInvariant(t); 102 } 103 104 const typename T::value_type* fItems, *fEnd; 105}; 106 107template <class T> 108struct test_construct_iter_range { 109 110 test_construct_iter_range( const T& src ) : fItems( src ) { 111 gTestController.SetCurrentTestName("iterator range constructor"); 112 } 113 114 void operator()( int ) const { 115 T t( fItems.begin(), fItems.end() ); 116 // Prevent simulated failures during verification 117 gTestController.CancelFailureCountdown(); 118 EH_ASSERT( t == fItems ); 119 CheckInvariant(t); 120 } 121 122 const T& fItems; 123}; 124 125#endif // test_construct_H_ 126