void test() { if (os_) *os_ << "test()\n"; IterationListenerRegistry registry; TestListener test3("test3"); TestListener test4("test4"); TestListener test5("test5"); TestListener test6("test6"); registry.addListener(IterationListenerPtr(&test3, nullDeallocate), 3); registry.addListener(IterationListenerPtr(&test4, nullDeallocate), 4); registry.addListener(IterationListenerPtr(&test5, nullDeallocate), 5); registry.addListener(IterationListenerPtr(&test6, nullDeallocate), 6); size_t iterationCount = 24; for (size_t i=0; i<iterationCount; i++) registry.broadcastUpdateMessage(IterationListener::UpdateMessage(i, iterationCount)); // validate unit_assert(test3.count() == 9); // 0 2 5 8 11 14 17 20 23 unit_assert(test4.count() == 7); unit_assert(test5.count() == 6); unit_assert(test6.count() == 5); if (os_) *os_ << endl; }
void testTime() { if (os_) *os_ << "testTime()\n"; IterationListenerRegistry registry; TestListener test_iteration("test_iteration"); TestListener test_time("test_time"); registry.addListener(IterationListenerPtr(&test_iteration, nullDeallocate), 1000000); registry.addListenerWithTimer(IterationListenerPtr(&test_time, nullDeallocate), 1.0); time_t start; time(&start); const double iterationDuration = 5.0; for (int i=0; ; i++) { time_t now; time(&now); if (difftime(now, start) > iterationDuration) break; registry.broadcastUpdateMessage(IterationListener::UpdateMessage(i,0)); } if (os_) *os_ << endl; }
void testCancel() { if (os_) *os_ << "testCancel()\n"; IterationListenerRegistry registry; CancelListener cancelListener(12); TestListener test3("test3"); TestListener test4("test4"); TestListener test6("test6"); registry.addListener(IterationListenerPtr(&cancelListener, nullDeallocate), 1); registry.addListener(IterationListenerPtr(&test3, nullDeallocate), 3); registry.addListener(IterationListenerPtr(&test4, nullDeallocate), 4); registry.addListener(IterationListenerPtr(&test6, nullDeallocate), 5); // typical use of IterationListenerRegistry, with proper Status_Cancel handling bool canceled = false; size_t iterationCount = 24; for (size_t i=0; i<iterationCount; i++) { IterationListener::Status status = registry.broadcastUpdateMessage(IterationListener::UpdateMessage(i, iterationCount)); // handle Status_Cancel if (status == IterationListener::Status_Cancel) { canceled = true; break; } } // implementations should send a final update on completion of the iteration if (!canceled) registry.broadcastUpdateMessage(IterationListener::UpdateMessage(iterationCount, iterationCount)); // validate unit_assert(test3.count() == 5); unit_assert(test4.count() == 4); unit_assert(test6.count() == 3); if (os_) *os_ << endl; }
void testRemove() { if (os_) *os_ << "testRemove()\n"; IterationListenerRegistry registry; BadListener bad; TestListener test3("test3"); TestListener test4("test4"); IterationListenerPtr badPtr(&bad, nullDeallocate); registry.addListener(IterationListenerPtr(&test3, nullDeallocate), 3); registry.addListener(badPtr, 1); registry.addListener(IterationListenerPtr(&test4, nullDeallocate), 4); // sanity check -- verify that broadcast throws if BadListener is in the registry bool caught = false; try { registry.broadcastUpdateMessage(IterationListener::UpdateMessage(0,0)); } catch (exception& e) { if (e.what() == string("bad")) caught = true; } unit_assert(caught); // remove BadListener -- broadcast will throw if not removed properly registry.removeListener(badPtr); registry.broadcastUpdateMessage(IterationListener::UpdateMessage(0,0)); if (os_) *os_ << endl; }
void testSpectrumListWriteProgress() { if (os_) *os_ << "testSpectrumListWriteProgress()\n "; SpectrumListSimple a; for (size_t i=0; i<11; i++) { SpectrumPtr spectrum(new Spectrum); spectrum->id = "goober_" + lexical_cast<string>(i); spectrum->index = i; spectrum->defaultArrayLength = 666; a.spectra.push_back(spectrum); } ostringstream oss; XMLWriter writer(oss); TestIterationListener listener; IterationListenerRegistry registry; registry.addListener(listener, 3); // callbacks: 0,2,5,8,10 MSData dummy; IO::write(writer, a, dummy, BinaryDataEncoder::Config(), 0, ®istry); if (os_) { *os_ << "callback indices: "; copy(listener.indices().begin(), listener.indices().end(), ostream_iterator<size_t>(*os_, " ")); *os_ << "\n\n"; } unit_assert(listener.indices().size() == 5); unit_assert(listener.indices()[0] == 0); unit_assert(listener.indices()[1] == 2); unit_assert(listener.indices()[2] == 5); unit_assert(listener.indices()[3] == 8); unit_assert(listener.indices()[4] == 10); // test #2, this time with cancel at index 6 TestIterationListener_WithCancel cancelListener; IterationListenerRegistry registry2; registry2.addListener(cancelListener, 3); // callbacks: 0,2, cancel at 5 ostringstream oss2; XMLWriter writer2(oss2); IO::write(writer2, a, dummy, BinaryDataEncoder::Config(), 0, ®istry2); if (os_) { *os_ << "callback indices: "; copy(cancelListener.indices().begin(), cancelListener.indices().end(), ostream_iterator<size_t>(*os_, " ")); *os_ << "\n\n"; } unit_assert(cancelListener.indices().size() == 2); unit_assert(cancelListener.indices()[0] == 0); unit_assert(cancelListener.indices()[1] == 2); }