• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 {
test_copy_constructtest_copy_construct34   test_copy_construct() {
35     gTestController.SetCurrentTestName("copy constructor");
36   }
37 
operatortest_copy_construct38   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 {
test_default_constructtest_default_construct49   test_default_construct() {
50     gTestController.SetCurrentTestName("default constructor");
51   }
52 
operatortest_default_construct53   void operator()( int ) const {
54     T t;
55     CheckInvariant(t);
56   }
57 };
58 
59 template <class T>
60 struct test_construct_n {
test_construct_ntest_construct_n61   test_construct_n( size_t _n ) : n(_n+1) {
62     gTestController.SetCurrentTestName("n-size constructor");
63   }
64 
operatortest_construct_n65   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 {
test_construct_n_instancetest_construct_n_instance75   test_construct_n_instance( size_t _n ) : n(_n+1) {
76     gTestController.SetCurrentTestName("n-size with instance constructor");
77   }
78 
operatortest_construct_n_instance79   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 {
test_construct_pointer_rangetest_construct_pointer_range91   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 
operatortest_construct_pointer_range97   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 
test_construct_iter_rangetest_construct_iter_range110   test_construct_iter_range( const T& src ) : fItems( src ) {
111     gTestController.SetCurrentTestName("iterator range constructor");
112   }
113 
operatortest_construct_iter_range114   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