source: src/Patterns/Observer/unittests/ObservedContainerUnitTest.cpp@ e2e035e

Last change on this file since e2e035e was e2e035e, checked in by Frederik Heber <heber@…>, 14 years ago

Refactored all Observer stuff into own subfolder and split up into distinct modules.

  • Observer/all.hpp is all that's needed.
  • Property mode set to 100644
File size: 4.7 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 "Assert.hpp"
26
27#include <iostream>
28
29#include "stubs/ObserverStub.hpp"
30#include "Observer/ObservedContainer.hpp"
31#include "Observer/ObservedContainer_impl.hpp"
32
33#include "ObservedContainerUnitTest.hpp"
34
35#ifdef HAVE_TESTRUNNER
36#include "UnitTestMain.hpp"
37#endif /*HAVE_TESTRUNNER*/
38
39// Registers the fixture into the 'registry'
40CPPUNIT_TEST_SUITE_REGISTRATION( ObservedContainerTest );
41
42/******************* Test stubs ************************/
43
44
45/******************* actuall tests ***************/
46
47void ObservedContainerTest::setUp() {
48 ASSERT_DO(Assert::Throw);
49 simpleObservable1 = new SimpleObservable();
50}
51
52void ObservedContainerTest::tearDown() {
53 delete simpleObservable1;
54}
55
56void ObservedContainerTest::IteratorMapTest()
57{
58 typedef ObservedContainer< std::map<int, int> > OC;
59 OC OContainer(simpleObservable1);
60 int i;
61
62 OContainer.insert( std::pair<int,int> (1,1) );
63 OContainer.insert( std::pair<int,int> (2,2) );
64
65 i=0;
66 for (OC::internal_iterator iter = OContainer.begin_internal(); iter != OContainer.end_internal(); ++iter) {
67 i++;
68 CPPUNIT_ASSERT_EQUAL(i, iter->first);
69 CPPUNIT_ASSERT_EQUAL(i, iter->second);
70 }
71 CPPUNIT_ASSERT_EQUAL(i,2);
72
73 i=0;
74 for (OC::iterator iter = OContainer.begin(); iter != OContainer.end(); ++iter) {
75 i++;
76 CPPUNIT_ASSERT_EQUAL(i, iter->first);
77 CPPUNIT_ASSERT_EQUAL(i, iter->second);
78 }
79 CPPUNIT_ASSERT_EQUAL(i,2);
80
81 i=0;
82 for (OC::const_iterator iter = OContainer.begin(); iter != OContainer.end(); ++iter) {
83 i++;
84 CPPUNIT_ASSERT_EQUAL(i, iter->first);
85 CPPUNIT_ASSERT_EQUAL(i, iter->second);
86 }
87 CPPUNIT_ASSERT_EQUAL(i,2);
88
89 i=3;
90 for (OC::reverse_internal_iterator iter = OContainer.rbegin_internal(); iter != OContainer.rend_internal(); ++iter) {
91 i--;
92 CPPUNIT_ASSERT_EQUAL(i, iter->first);
93 CPPUNIT_ASSERT_EQUAL(i, iter->second);
94 }
95 CPPUNIT_ASSERT_EQUAL(i,1);
96
97 /* @todo TODO: Check whether dereferencing ObservedContainer::reverse_iterator
98 * is working now.
99 * I am quite convinced that the reason for us having to use a
100 * const_reverse_iterator below is in stl_iterator.h, where operator* is
101 * implemented with a temporary _Iterator that is returned, i.e. a
102 * temporary object and we are not allowed to dereference from this
103 * temporary object.
104 */
105 i=3;
106 for (OC::reverse_iterator iter = OContainer.rbegin(); iter != OContainer.rend(); ++iter) {
107 i--;
108 OC::const_reverse_iterator helper = iter;
109 CPPUNIT_ASSERT_EQUAL(i, helper->first);
110 CPPUNIT_ASSERT_EQUAL(i, helper->second);
111 }
112 CPPUNIT_ASSERT_EQUAL(i,1);
113
114 i=3;
115 for (OC::const_reverse_iterator iter = OContainer.rbegin(); iter != OContainer.rend(); ++iter) {
116 i--;
117 CPPUNIT_ASSERT_EQUAL(i, iter->first);
118 CPPUNIT_ASSERT_EQUAL(i, iter->second);
119 }
120 CPPUNIT_ASSERT_EQUAL(i,1);
121}
122
123// @todo TODO: Check whether ObservedContainer with sets not maps is working now
124void ObservedContainerTest::IteratorSetTest()
125{
126// typedef ObservedContainer< std::set<int> > OC;
127// OC OContainer(simpleObservable1);
128// int i;
129//
130// OContainer.insert(1);
131// OContainer.insert(2);
132//
133// i=0;
134// for (OC::internal_iterator iter = OContainer.begin_internal(); iter != OContainer.end_internal(); ++iter) {
135// i++;
136// CPPUNIT_ASSERT_EQUAL(i, *iter);
137// }
138// CPPUNIT_ASSERT_EQUAL(i,2);
139//
140// i=0;
141// for (OC::iterator iter = OContainer.begin(); iter != OContainer.end(); ++iter) {
142// i++;
143// CPPUNIT_ASSERT_EQUAL(i, *iter);
144// }
145// CPPUNIT_ASSERT_EQUAL(i,2);
146//
147// i=0;
148// for (OC::const_iterator iter = OContainer.begin(); iter != OContainer.end(); ++iter) {
149// i++;
150// CPPUNIT_ASSERT_EQUAL(i, *iter);
151// }
152// CPPUNIT_ASSERT_EQUAL(i,2);
153//
154// i=3;
155// for (OC::reverse_internal_iterator iter = OContainer.rbegin_internal(); iter != OContainer.rend_internal(); ++iter) {
156// i--;
157// CPPUNIT_ASSERT_EQUAL(i, *iter);
158// }
159// CPPUNIT_ASSERT_EQUAL(i,1);
160//
161// i=3;
162// for (OC::reverse_iterator iter = OContainer.rbegin(); iter != OContainer.rend(); ++iter) {
163// i--;
164// CPPUNIT_ASSERT_EQUAL(i, *iter);
165// }
166// CPPUNIT_ASSERT_EQUAL(i,1);
167//
168// i=3;
169// for (OC::const_reverse_iterator iter = OContainer.rbegin(); iter != OContainer.rend(); ++iter) {
170// i--;
171// CPPUNIT_ASSERT_EQUAL(i, *iter);
172// }
173// CPPUNIT_ASSERT_EQUAL(i,1);
174}
Note: See TracBrowser for help on using the repository browser.