ProteoWizard
Classes | Functions | Variables
IterationListenerTest.cpp File Reference
#include "Std.hpp"
#include "IterationListener.hpp"
#include "pwiz/utility/misc/unit.hpp"
#include <cstring>
#include <ctime>

Go to the source code of this file.

Classes

class  TestListener
 
class  CancelListener
 
class  BadListener
 

Functions

void nullDeallocate (IterationListener *s)
 
void test ()
 
void testCancel ()
 
void testRemove ()
 
void testTime ()
 
int main (int argc, char *argv[])
 

Variables

ostream * os_ = 0
 

Function Documentation

§ nullDeallocate()

void nullDeallocate ( IterationListener s)

Definition at line 83 of file IterationListenerTest.cpp.

Referenced by test(), testCancel(), testRemove(), and testTime().

84 {
85  // do nothing
86 }

§ test()

void test ( )

Definition at line 88 of file IterationListenerTest.cpp.

References pwiz::util::IterationListenerRegistry::addListener(), pwiz::util::IterationListenerRegistry::broadcastUpdateMessage(), TestListener::count(), nullDeallocate(), os_, test3(), test4(), and unit_assert.

Referenced by main().

89 {
90  if (os_) *os_ << "test()\n";
91 
93 
94  TestListener test3("test3");
95  TestListener test4("test4");
96  TestListener test5("test5");
97  TestListener test6("test6");
98 
101  registry.addListener(IterationListenerPtr(&test5, nullDeallocate), 5);
102  registry.addListener(IterationListenerPtr(&test6, nullDeallocate), 6);
103 
104  size_t iterationCount = 24;
105  for (size_t i=0; i<iterationCount; i++)
106  registry.broadcastUpdateMessage(IterationListener::UpdateMessage(i, iterationCount));
107 
108  // validate
109 
110  unit_assert(test3.count() == 9); // 0 2 5 8 11 14 17 20 23
111  unit_assert(test4.count() == 7);
112  unit_assert(test5.count() == 6);
113  unit_assert(test6.count() == 5);
114 
115  if (os_) *os_ << endl;
116 }
void addListener(const IterationListenerPtr &listener, size_t iterationPeriod)
void test3()
IterationListener::Status broadcastUpdateMessage(const IterationListener::UpdateMessage &updateMessage) const
void test4()
boost::shared_ptr< IterationListener > IterationListenerPtr
handles registration of IterationListeners and broadcast of update messages
void nullDeallocate(IterationListener *s)
#define unit_assert(x)
Definition: unit.hpp:85
ostream * os_

§ testCancel()

void testCancel ( )

Definition at line 119 of file IterationListenerTest.cpp.

References pwiz::util::IterationListenerRegistry::addListener(), pwiz::util::IterationListenerRegistry::broadcastUpdateMessage(), TestListener::count(), nullDeallocate(), os_, pwiz::util::IterationListener::Status_Cancel, test3(), test4(), and unit_assert.

Referenced by main().

120 {
121  if (os_) *os_ << "testCancel()\n";
122 
123  IterationListenerRegistry registry;
124 
125  CancelListener cancelListener(12);
126  TestListener test3("test3");
127  TestListener test4("test4");
128  TestListener test6("test6");
129 
130  registry.addListener(IterationListenerPtr(&cancelListener, nullDeallocate), 1);
133  registry.addListener(IterationListenerPtr(&test6, nullDeallocate), 5);
134 
135  // typical use of IterationListenerRegistry, with proper Status_Cancel handling
136 
137  bool canceled = false;
138 
139  size_t iterationCount = 24;
140  for (size_t i=0; i<iterationCount; i++)
141  {
142  IterationListener::Status status =
143  registry.broadcastUpdateMessage(IterationListener::UpdateMessage(i, iterationCount));
144 
145  // handle Status_Cancel
146  if (status == IterationListener::Status_Cancel)
147  {
148  canceled = true;
149  break;
150  }
151  }
152 
153  // implementations should send a final update on completion of the iteration
154 
155  if (!canceled)
156  registry.broadcastUpdateMessage(IterationListener::UpdateMessage(iterationCount, iterationCount));
157 
158  // validate
159 
160  unit_assert(test3.count() == 5);
161  unit_assert(test4.count() == 4);
162  unit_assert(test6.count() == 3);
163 
164  if (os_) *os_ << endl;
165 }
void addListener(const IterationListenerPtr &listener, size_t iterationPeriod)
void test3()
IterationListener::Status broadcastUpdateMessage(const IterationListener::UpdateMessage &updateMessage) const
void test4()
boost::shared_ptr< IterationListener > IterationListenerPtr
handles registration of IterationListeners and broadcast of update messages
void nullDeallocate(IterationListener *s)
#define unit_assert(x)
Definition: unit.hpp:85
ostream * os_

§ testRemove()

void testRemove ( )

Definition at line 179 of file IterationListenerTest.cpp.

References pwiz::util::IterationListenerRegistry::addListener(), pwiz::util::IterationListenerRegistry::broadcastUpdateMessage(), nullDeallocate(), os_, pwiz::util::IterationListenerRegistry::removeListener(), test3(), test4(), and unit_assert.

Referenced by main().

180 {
181  if (os_) *os_ << "testRemove()\n";
182 
183  IterationListenerRegistry registry;
184 
185  BadListener bad;
186  TestListener test3("test3");
187  TestListener test4("test4");
188 
189  IterationListenerPtr badPtr(&bad, nullDeallocate);
190 
192  registry.addListener(badPtr, 1);
194 
195  // sanity check -- verify that broadcast throws if BadListener is in the registry
196 
197  bool caught = false;
198 
199  try
200  {
202  }
203  catch (exception& e)
204  {
205  if (e.what() == string("bad")) caught = true;
206  }
207 
208  unit_assert(caught);
209 
210  // remove BadListener -- broadcast will throw if not removed properly
211 
212  registry.removeListener(badPtr);
214 
215  if (os_) *os_ << endl;
216 }
void addListener(const IterationListenerPtr &listener, size_t iterationPeriod)
void test3()
IterationListener::Status broadcastUpdateMessage(const IterationListener::UpdateMessage &updateMessage) const
void test4()
boost::shared_ptr< IterationListener > IterationListenerPtr
void removeListener(const IterationListenerPtr &listener)
handles registration of IterationListeners and broadcast of update messages
void nullDeallocate(IterationListener *s)
#define unit_assert(x)
Definition: unit.hpp:85
ostream * os_

§ testTime()

void testTime ( )

Definition at line 219 of file IterationListenerTest.cpp.

References pwiz::util::IterationListenerRegistry::addListener(), pwiz::util::IterationListenerRegistry::addListenerWithTimer(), pwiz::util::IterationListenerRegistry::broadcastUpdateMessage(), nullDeallocate(), and os_.

Referenced by main().

220 {
221  if (os_) *os_ << "testTime()\n";
222 
223  IterationListenerRegistry registry;
224 
225  TestListener test_iteration("test_iteration");
226  TestListener test_time("test_time");
227 
228  registry.addListener(IterationListenerPtr(&test_iteration, nullDeallocate), 1000000);
229  registry.addListenerWithTimer(IterationListenerPtr(&test_time, nullDeallocate), 1.0);
230 
231  time_t start;
232  time(&start);
233 
234  const double iterationDuration = 5.0;
235  for (int i=0; ; i++)
236  {
237  time_t now;
238  time(&now);
239  if (difftime(now, start) > iterationDuration) break;
240 
242  }
243 
244  if (os_) *os_ << endl;
245 }
void addListenerWithTimer(const IterationListenerPtr &listener, double timePeriod)
void addListener(const IterationListenerPtr &listener, size_t iterationPeriod)
IterationListener::Status broadcastUpdateMessage(const IterationListener::UpdateMessage &updateMessage) const
boost::shared_ptr< IterationListener > IterationListenerPtr
handles registration of IterationListeners and broadcast of update messages
void nullDeallocate(IterationListener *s)
ostream * os_

§ main()

int main ( int  argc,
char *  argv[] 
)

Definition at line 248 of file IterationListenerTest.cpp.

References os_, test(), TEST_EPILOG, TEST_FAILED, TEST_PROLOG, testCancel(), testRemove(), and testTime().

249 {
250  TEST_PROLOG(argc, argv)
251 
252  try
253  {
254  if (argc>1 && !strcmp(argv[1],"-v")) os_ = &cout;
255  test();
256  testCancel();
257  testRemove();
258  testTime();
259  }
260  catch (exception& e)
261  {
262  TEST_FAILED(e.what())
263  }
264  catch (...)
265  {
266  TEST_FAILED("Caught unknown exception.")
267  }
268 
270 }
void testCancel()
#define TEST_EPILOG
Definition: unit.hpp:182
void test()
void testRemove()
#define TEST_FAILED(x)
Definition: unit.hpp:176
#define TEST_PROLOG(argc, argv)
Definition: unit.hpp:174
void testTime()
ostream * os_

Variable Documentation

§ os_

ostream* os_ = 0