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