int assertAllZeroes(HyPerCol * hc, int argc, char * argv[]) { const char * targetLayerName = "comparison"; HyPerLayer * layer = hc->getLayerFromName(targetLayerName); assert(layer); LayerProbe * probe = NULL; int np = layer->getNumProbes(); for (int p=0; p<np; p++) { if (!strcmp(layer->getProbe(p)->getName(), "ComparisonTest")) { probe = layer->getProbe(p); break; } } RequireAllZeroActivityProbe * allzeroProbe = dynamic_cast<RequireAllZeroActivityProbe *>(probe); assert(allzeroProbe); if (allzeroProbe->getNonzeroFound()) { if (hc->columnId()==0) { double t = allzeroProbe->getNonzeroTime(); fprintf(stderr, "%s \"%s\" had at least one nonzero activity value, beginning at time %f\n", layer->getKeyword(), targetLayerName, t); } MPI_Barrier(hc->icCommunicator()->communicator()); exit(EXIT_FAILURE); } return PV_SUCCESS; }
int customexit(HyPerCol * hc, int argc, char * argv[]) { HyPerLayer * layer = hc->getLayerFromName("comparison"); assert(layer!=NULL); assert(layer->getNumProbes()>0); RequireAllZeroActivityProbe * probe = NULL; for (int k=0; k<layer->getNumProbes(); k++) { LayerProbe * p = layer->getProbe(k); probe = dynamic_cast<RequireAllZeroActivityProbe *>(p); if (probe != NULL) { break; } } assert(probe!=NULL); int status = PV_SUCCESS; if (probe->getNonzeroFound()) { if (hc->columnId()==0) { fprintf(stderr, "comparison layer had a nonzero activity at time %f\n", probe->getNonzeroTime()); status = PV_FAILURE; } } return status; }
// check that the input layer has become nonzero at some point // If the comparison layer ever has a nonzero value, TestAllZerosProbe // should catch it and exit with an error. // However, there are some bugs that could cause Movie to // have all zeros in the activity. In that case, OriginalMovie and // GeneratedMovie would always be zero, so the comparison would always // be zero, so the test would pass even though there's a bug. // // The problem of what to do if comparison reports zero when given // nonzero input is best left for a different test. int checkProbesOnExit(HyPerCol * hc, int argc, char * argv[]) { BaseLayer * layer = hc->getLayerFromName("OriginalMovie"); assert(layer); HyPerLayer * originalMovieLayer = dynamic_cast<HyPerLayer *>(layer); assert(originalMovieLayer); int numProbes = originalMovieLayer->getNumProbes(); assert(numProbes==1); LayerProbe * originalMovieProbe = originalMovieLayer->getProbe(0); assert(originalMovieProbe); TestNotAlwaysAllZerosProbe * testNonzero = dynamic_cast<TestNotAlwaysAllZerosProbe *>(originalMovieProbe); assert(testNonzero->nonzeroValueHasOccurred()); return PV_SUCCESS; }