source: ThirdParty/CodePatterns/src/Observer/unittests/ObservedContainerUnitTest.cpp@ 7516f6

Action_Thermostats Adding_MD_integration_tests Adding_StructOpt_integration_tests AutomationFragmentation_failures Candidate_v1.6.1 ChemicalSpaceEvaluator Enhanced_StructuralOptimization Enhanced_StructuralOptimization_continued Exclude_Hydrogens_annealWithBondGraph Fix_Verbose_Codepatterns ForceAnnealing_with_BondGraph ForceAnnealing_with_BondGraph_continued ForceAnnealing_with_BondGraph_continued_betteresults ForceAnnealing_with_BondGraph_contraction-expansion Gui_displays_atomic_force_velocity JobMarket_RobustOnKillsSegFaults JobMarket_StableWorkerPool PythonUI_with_named_parameters Recreated_GuiChecks StoppableMakroAction TremoloParser_IncreasedPrecision
Last change on this file since 7516f6 was 41e8e2, checked in by Frederik Heber <heber@…>, 8 years ago

Merge commit '084729c5923f0123e695fbe2548b393288c1f13d' as 'ThirdParty/CodePatterns'

  • Property mode set to 100644
File size: 7.0 KB
Line 
1/*
2 * Project: MoleCuilder
3 * Description: creates and alters molecular systems
4 * Copyright (C) 2010 University of Bonn. All rights reserved.
5 * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
6 */
7
8/*
9 * ObservedContainerTest.cpp
10 *
11 * Created on: Jan 19, 2010
12 * Author: crueger
13 */
14
15// include config.h
16#ifdef HAVE_CONFIG_H
17#include <config.h>
18#endif
19
20#include <cppunit/CompilerOutputter.h>
21#include <cppunit/extensions/TestFactoryRegistry.h>
22#include <cppunit/ui/text/TestRunner.h>
23#include <map>
24
25#include "CodePatterns/Assert.hpp"
26
27#include <iostream>
28
29#include "stubs/ObserverStub.hpp"
30#include "CodePatterns/Observer/ObservedContainer.hpp"
31#include "CodePatterns/Observer/ObservedContainer_impl.hpp"
32#include "CodePatterns/Observer/ObservedIterator.hpp"
33#include "CodePatterns/Observer/UnobservedIterator.hpp"
34
35#include "ObservedContainerUnitTest.hpp"
36
37#ifdef HAVE_TESTRUNNER
38#include "UnitTestMain.hpp"
39#endif /*HAVE_TESTRUNNER*/
40
41// Registers the fixture into the 'registry'
42CPPUNIT_TEST_SUITE_REGISTRATION( ObservedContainerTest );
43
44/******************* Test stubs ************************/
45
46
47/******************* actuall tests ***************/
48
49void ObservedContainerTest::setUp() {
50 ASSERT_DO(Assert::Throw);
51 simpleObservable1 = new SimpleObservable();
52}
53
54void ObservedContainerTest::tearDown() {
55 delete simpleObservable1;
56}
57
58void ObservedContainerTest::IteratorMapTest()
59{
60 typedef ObservedContainer< std::map<int, int>, ObservedIterator<std::map<int, int> > > OC;
61 OC OContainer(simpleObservable1);
62 int i;
63
64 OContainer.insert( std::pair<int,int> (1,1) );
65 OContainer.insert( std::pair<int,int> (2,2) );
66
67 i=0;
68 for (OC::internal_iterator iter = OContainer.begin_internal(); iter != OContainer.end_internal(); ++iter) {
69 i++;
70 CPPUNIT_ASSERT_EQUAL(i, iter->first);
71 CPPUNIT_ASSERT_EQUAL(i, iter->second);
72 }
73 CPPUNIT_ASSERT_EQUAL(i,2);
74
75 i=0;
76 for (OC::iterator iter = OContainer.begin(); iter != OContainer.end(); ++iter) {
77 i++;
78 CPPUNIT_ASSERT_EQUAL(i, iter->first);
79 CPPUNIT_ASSERT_EQUAL(i, iter->second);
80 }
81 CPPUNIT_ASSERT_EQUAL(i,2);
82
83 i=0;
84 for (OC::const_iterator iter = OContainer.begin(); iter != OContainer.end(); ++iter) {
85 i++;
86 CPPUNIT_ASSERT_EQUAL(i, iter->first);
87 CPPUNIT_ASSERT_EQUAL(i, iter->second);
88 }
89 CPPUNIT_ASSERT_EQUAL(i,2);
90
91 i=3;
92 for (OC::reverse_internal_iterator iter = OContainer.rbegin_internal(); iter != OContainer.rend_internal(); ++iter) {
93 i--;
94 CPPUNIT_ASSERT_EQUAL(i, iter->first);
95 CPPUNIT_ASSERT_EQUAL(i, iter->second);
96 }
97 CPPUNIT_ASSERT_EQUAL(i,1);
98
99 /* @todo TODO: Check whether dereferencing ObservedContainer::reverse_iterator
100 * is working now.
101 * I am quite convinced that the reason for us having to use a
102 * const_reverse_iterator below is in stl_iterator.h, where operator* is
103 * implemented with a temporary _Iterator that is returned, i.e. a
104 * temporary object and we are not allowed to dereference from this
105 * temporary object.
106 */
107 i=3;
108 for (OC::reverse_iterator iter = OContainer.rbegin(); iter != OContainer.rend(); ++iter) {
109 i--;
110 OC::const_reverse_iterator helper = iter;
111 CPPUNIT_ASSERT_EQUAL(i, helper->first);
112 CPPUNIT_ASSERT_EQUAL(i, helper->second);
113 }
114 CPPUNIT_ASSERT_EQUAL(i,1);
115
116 i=3;
117 for (OC::const_reverse_iterator iter = OContainer.rbegin(); iter != OContainer.rend(); ++iter) {
118 i--;
119 CPPUNIT_ASSERT_EQUAL(i, iter->first);
120 CPPUNIT_ASSERT_EQUAL(i, iter->second);
121 }
122 CPPUNIT_ASSERT_EQUAL(i,1);
123}
124
125void ObservedContainerTest::IteratorMapNotObservedTest()
126{
127 typedef ObservedContainer< std::map<int, int>, UnobservedIterator<std::map<int, int> > > OC;
128 OC OContainer(simpleObservable1);
129 int i;
130
131 OContainer.insert( std::pair<int,int> (1,1) );
132 OContainer.insert( std::pair<int,int> (2,2) );
133
134 i=0;
135 for (OC::internal_iterator iter = OContainer.begin_internal(); iter != OContainer.end_internal(); ++iter) {
136 i++;
137 CPPUNIT_ASSERT_EQUAL(i, iter->first);
138 CPPUNIT_ASSERT_EQUAL(i, iter->second);
139 }
140 CPPUNIT_ASSERT_EQUAL(i,2);
141
142 i=0;
143 for (OC::iterator iter = OContainer.begin(); iter != OContainer.end(); ++iter) {
144 i++;
145 CPPUNIT_ASSERT_EQUAL(i, iter->first);
146 CPPUNIT_ASSERT_EQUAL(i, iter->second);
147 }
148 CPPUNIT_ASSERT_EQUAL(i,2);
149
150 i=0;
151 for (OC::const_iterator iter = OContainer.begin(); iter != OContainer.end(); ++iter) {
152 i++;
153 CPPUNIT_ASSERT_EQUAL(i, iter->first);
154 CPPUNIT_ASSERT_EQUAL(i, iter->second);
155 }
156 CPPUNIT_ASSERT_EQUAL(i,2);
157
158 i=3;
159 for (OC::reverse_internal_iterator iter = OContainer.rbegin_internal(); iter != OContainer.rend_internal(); ++iter) {
160 i--;
161 CPPUNIT_ASSERT_EQUAL(i, iter->first);
162 CPPUNIT_ASSERT_EQUAL(i, iter->second);
163 }
164 CPPUNIT_ASSERT_EQUAL(i,1);
165
166 /* @todo TODO: Check whether dereferencing ObservedContainer::reverse_iterator
167 * is working now.
168 * I am quite convinced that the reason for us having to use a
169 * const_reverse_iterator below is in stl_iterator.h, where operator* is
170 * implemented with a temporary _Iterator that is returned, i.e. a
171 * temporary object and we are not allowed to dereference from this
172 * temporary object.
173 */
174 i=3;
175 for (OC::reverse_iterator iter = OContainer.rbegin(); iter != OContainer.rend(); ++iter) {
176 i--;
177 OC::const_reverse_iterator helper = iter;
178 CPPUNIT_ASSERT_EQUAL(i, helper->first);
179 CPPUNIT_ASSERT_EQUAL(i, helper->second);
180 }
181 CPPUNIT_ASSERT_EQUAL(i,1);
182
183 i=3;
184 for (OC::const_reverse_iterator iter = OContainer.rbegin(); iter != OContainer.rend(); ++iter) {
185 i--;
186 CPPUNIT_ASSERT_EQUAL(i, iter->first);
187 CPPUNIT_ASSERT_EQUAL(i, iter->second);
188 }
189 CPPUNIT_ASSERT_EQUAL(i,1);
190}
191
192// @todo TODO: Check whether ObservedContainer with sets not maps is working now
193void ObservedContainerTest::IteratorSetTest()
194{
195// typedef ObservedContainer< std::set<int>, ObservedIterator<std::set<int> > > OC;
196// OC OContainer(simpleObservable1);
197// int i;
198//
199// OContainer.insert(1);
200// OContainer.insert(2);
201//
202// i=0;
203// for (OC::internal_iterator iter = OContainer.begin_internal(); iter != OContainer.end_internal(); ++iter) {
204// i++;
205// CPPUNIT_ASSERT_EQUAL(i, *iter);
206// }
207// CPPUNIT_ASSERT_EQUAL(i,2);
208//
209// i=0;
210// for (OC::iterator iter = OContainer.begin(); iter != OContainer.end(); ++iter) {
211// i++;
212// CPPUNIT_ASSERT_EQUAL(i, *iter);
213// }
214// CPPUNIT_ASSERT_EQUAL(i,2);
215//
216// i=0;
217// for (OC::const_iterator iter = OContainer.begin(); iter != OContainer.end(); ++iter) {
218// i++;
219// CPPUNIT_ASSERT_EQUAL(i, *iter);
220// }
221// CPPUNIT_ASSERT_EQUAL(i,2);
222//
223// i=3;
224// for (OC::reverse_internal_iterator iter = OContainer.rbegin_internal(); iter != OContainer.rend_internal(); ++iter) {
225// i--;
226// CPPUNIT_ASSERT_EQUAL(i, *iter);
227// }
228// CPPUNIT_ASSERT_EQUAL(i,1);
229//
230// i=3;
231// for (OC::reverse_iterator iter = OContainer.rbegin(); iter != OContainer.rend(); ++iter) {
232// i--;
233// CPPUNIT_ASSERT_EQUAL(i, *iter);
234// }
235// CPPUNIT_ASSERT_EQUAL(i,1);
236//
237// i=3;
238// for (OC::const_reverse_iterator iter = OContainer.rbegin(); iter != OContainer.rend(); ++iter) {
239// i--;
240// CPPUNIT_ASSERT_EQUAL(i, *iter);
241// }
242// CPPUNIT_ASSERT_EQUAL(i,1);
243}
Note: See TracBrowser for help on using the repository browser.