|
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 |
|
30 USING_CSTD_NAME(size_t) |
|
31 |
|
32 template <class T> |
|
33 struct 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 |
|
47 template <class T> |
|
48 struct 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 |
|
59 template <class T> |
|
60 struct 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 |
|
73 template <class T> |
|
74 struct 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 |
|
89 template <class T> |
|
90 struct 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 |
|
107 template <class T> |
|
108 struct 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_ |