FEI  Version of the Day
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Groups Pages
test_Set.cpp
1 /*--------------------------------------------------------------------*/
2 /* Copyright 2005 Sandia Corporation. */
3 /* Under the terms of Contract DE-AC04-94AL85000, there is a */
4 /* non-exclusive license for use of this work by or on behalf */
5 /* of the U.S. Government. Export of this program may require */
6 /* a license from the United States Government. */
7 /*--------------------------------------------------------------------*/
8 
9 #include <fei_macros.hpp>
10 #include <fei_mpi.h>
11 
12 #include <test_utils/test_Set.hpp>
13 
14 #include <snl_fei_Utils.hpp>
15 #include <fei_ctg_set.hpp>
16 
17 #undef fei_file
18 #define fei_file "test_Set.cpp"
19 #include <fei_ErrMacros.hpp>
20 
21 test_Set::test_Set(MPI_Comm comm)
22  : tester(comm)
23 {
24 }
25 
26 test_Set::~test_Set()
27 {
28 }
29 
30 template<typename SET_TYPE>
31 void set_test1(SET_TYPE& set_obj)
32 {
33  if (set_obj.size() < 1) {
34  typename SET_TYPE::const_iterator
35  s_beg = set_obj.begin(),
36  s_end = set_obj.end();
37 
38  if (s_beg != s_end) {
39  throw std::runtime_error("failed test 1");
40  }
41  }
42  else set_obj.clear();
43 
44  std::pair<typename SET_TYPE::const_iterator,bool> result = set_obj.insert(5);
45 
46  if (!result.second) {
47  throw std::runtime_error("failed test 2");
48  }
49 
50  result = set_obj.insert(4);
51 
52  if (!result.second) {
53  throw std::runtime_error("failed test 3");
54  }
55 
56  result = set_obj.insert(7);
57 
58  ++(result.first);
59  if (result.first != set_obj.end()) {
60  throw std::runtime_error("failed test 4");
61  }
62 
63  result = set_obj.insert(6);
64 
65  if (!result.second) {
66  throw std::runtime_error("failed test 5");
67  }
68 
69  ++(result.first);
70 
71  if (*(result.first) != 7) {
72  throw std::runtime_error("failed test 6");
73  }
74 
75  ++(result.first);
76  if (result.first != set_obj.end()) {
77  throw std::runtime_error("failed test 7");
78  }
79 
80  result = set_obj.insert(2);
81  result = set_obj.insert(3);
82 
83  ++(result.first);
84  if (*(result.first) != 4) {
85  throw std::runtime_error("failed test 8");
86  }
87 
88  SET_TYPE set_copy(set_obj);
89 
90  if (set_copy.size() != set_obj.size()) {
91  throw std::runtime_error("failed test 9");
92  }
93 
94  typename SET_TYPE::const_iterator
95  s_iter = set_obj.begin(),
96  s_end = set_obj.end();
97 
98  typename SET_TYPE::const_iterator
99  c_iter = set_copy.begin(),
100  c_end = set_copy.end();
101 
102  for(; s_iter != s_end; ++s_iter) {
103  if (*s_iter != *c_iter) {
104  throw std::runtime_error("failed test 10");
105  }
106  ++c_iter;
107  }
108 
109  if (c_iter != c_end) {
110  throw std::runtime_error("failed test 11");
111  }
112 }
113 
114 template<typename SET_TYPE>
115 void set_test2(SET_TYPE& set_obj)
116 {
117  if (set_obj.size() < 1) {
118  typename SET_TYPE::const_iterator
119  s_beg = set_obj.begin(),
120  s_end = set_obj.end();
121 
122  if (s_beg != s_end) {
123  throw std::runtime_error("failed test2 1");
124  }
125  }
126  else set_obj.clear();
127 
128  set_obj.insert2(5);
129  set_obj.insert2(4);
130  set_obj.insert2(7);
131  set_obj.insert2(6);
132  set_obj.insert2(2);
133  set_obj.insert2(3);
134 
135  SET_TYPE set_copy(set_obj);
136 
137  if (set_copy.size() != set_obj.size()) {
138  throw std::runtime_error("failed test2 2");
139  }
140 
141  typename SET_TYPE::const_iterator
142  s_iter = set_obj.begin(),
143  s_end = set_obj.end();
144 
145  typename SET_TYPE::const_iterator
146  c_iter = set_copy.begin(),
147  c_end = set_copy.end();
148 
149  for(; s_iter != s_end; ++s_iter) {
150  if (*s_iter != *c_iter) {
151  throw std::runtime_error("failed test2 3");
152  }
153  ++c_iter;
154  }
155 
156  if (c_iter != c_end) {
157  throw std::runtime_error("failed test2 4");
158  }
159 }
160 
161 int test_Set::runtests()
162 {
163  if (numProcs_ > 1) return(0);
164 
165  CHK_ERR( test1() );
166  CHK_ERR( test2() );
167  CHK_ERR( test3() );
168  CHK_ERR( test4() );
169  CHK_ERR( test5() );
170  CHK_ERR( test6() );
171  CHK_ERR( test7() );
172  CHK_ERR( test8() );
173  CHK_ERR( test9() );
174 
175  return(0);
176 }
177 
178 int test_Set::test1()
179 {
180  return(0);
181 }
182 
183 int test_Set::test2()
184 {
185  FEI_COUT << "testing fei::ctg_set<int> insert,insert2,find,iterate...";
186  fei::ctg_set<int> sset2;
187 
188  sset2.insert(5);
189  sset2.insert(8);
190  sset2.insert(3);
191  sset2.insert(0);
192  sset2.insert(4);
193  sset2.insert(1);
194  sset2.insert(2);
195 
197  ss2_iter = sset2.begin(),
198  ss2_end = sset2.end();
199 
200  int i=0;
201  for(; ss2_iter != ss2_end; ++ss2_iter) {
202  if (*ss2_iter != i && *ss2_iter != 8) {
203  return(-1);
204  }
205  ++i;
206  }
207 
208  int size2 = sset2.size();
209  if (size2 != 7) {
210  return(-1);
211  }
212 
213  fei::ctg_set<int>::const_iterator iter4 = sset2.find(4);
214  if (*iter4 != 4) {
215  return(-2);
216  }
217 
218  ++iter4;
219  if (*iter4 != 5) {
220  return(-3);
221  }
222 
223  fei::ctg_set<int>::const_iterator iter8 = sset2.find(8);
224  if (*iter8 != 8) {
225  return(-4);
226  }
227 
228  set_test2(sset2);
229 
230  fei::ctg_set<int> sset3;
231 
232  sset3.insert2(1);
233  sset3.insert2(3);
234  sset3.insert2(6);
235  sset3.insert2(8);
236  sset3.insert2(0);
237  sset3.insert2(2);
238  sset3.insert2(9);
239  sset3.insert2(11);
240  sset3.insert2(4);
241  sset3.insert2(10);
242 
243  int size3 = sset3.size();
244  if (size3 != 10) {
245  return(-1);
246  }
247 
248  fei::ctg_set<int>::const_iterator ss3_iter4 = sset3.find(4);
249  if (*ss3_iter4 != 4) {
250  return(-2);
251  }
252 
253  ++ss3_iter4;
254  if (*ss3_iter4 != 6) {
255  return(-3);
256  }
257 
258  fei::ctg_set<int>::const_iterator ss3_iter8 = sset3.find(8);
259  if (*ss3_iter8 != 8) {
260  return(-4);
261  }
262 
263  FEI_COUT << "ok"<<FEI_ENDL;
264  return(0);
265 }
266 
267 int test_Set::test3()
268 {
269  return(0);
270 }
271 
272 int test_Set::test4()
273 {
274 
275  return(0);
276 }
277 
278 int test_Set::test5()
279 {
280  FEI_COUT << "testing fei::binarySearch(...,start,end,...)...";
281 
282  std::vector<int> array;
283  for(int i=0; i<10; ++i) array.push_back(i);
284 
285  int start = 2;
286  int end = 6;
287  int insertPoint = -1;
288  int offset = fei::binarySearch(9, &array[0], array.size(),
289  start, end, insertPoint);
290  if (offset >= 0) {
291  return(-1);
292  }
293 
294  offset = fei::binarySearch(4, &array[0], array.size(),
295  start, end, insertPoint);
296 
297  if (offset < 0) {
298  return(-1);
299  }
300 
301  fei::ctg_set<int> sset;
302  sset.insert2(1);
303  sset.insert2(5);
304  sset.insert2(9);
305  sset.insert2(0);
306  sset.insert2(4);
307  sset.insert2(8);
308 
309  if (sset.size() != 6) {
310  ERReturn(-1);
311  }
312 
313  if (sset.find(0) == sset.end()) {
314  ERReturn(-1);
315  }
316 
317  FEI_COUT << "ok"<<FEI_ENDL;
318 
319  return(0);
320 }
321 
322 int test_Set::test6()
323 {
324  return(0);
325 }
326 
327 int test_Set::test7()
328 {
329  return(0);
330 }
331 
332 
333 int test_Set::test8()
334 {
335  return(0);
336 }
337 
338 int test_Set::test9()
339 {
340 
341  return(0);
342 }
int size() const
const_iterator find(const T &item)
int binarySearch(const T &item, const T *list, int len)
const_iterator begin() const
void insert2(const T &item)
static const_iterator end()
std::pair< const_iterator, bool > insert(const T &item)