int FilterManagerTEST::T_applyFilterChain() { int fail = 0; logger->trace("=============================="); logger->trace("Testing applyFilterChain():"); logger->trace(" Creating FM under normal mode..."); FilterManager* fm = new FilterManager("fm"); logger->trace(" Using factory, making 4 random filters..."); Filter* f1,*f2,*f3,*f4; f1 = FilterFactory::createFilter(); f2 = FilterFactory::createNullImgFilter(); f3 = FilterFactory::createNullFPGAFilter(); f4 = FilterFactory::createFilter(); logger->trace(" Inserting f1 as \"task 3\" to FRONT..."); fm->insertFilter("task 3",f1,"FRONT"); logger->trace(" Inserting f2 as \"task 1\"..."); fm->insertFilter("task 1",f2,"task 3"); logger->trace(" Inserting f3 as \"task 2\" between f1,f2..."); fm->insertFilter("task 2",f3,"task 3"); logger->trace(" Inserting f4 as \"task 4\" to REAR..."); fm->insertFilter("task 4",f4); logger->trace(" Making img objs..."); cv::Mat img = cv::Mat::zeros(2,2,CV_8UC1); ImgData* data = new ImgData("input",img); logger->trace(" Applying all filters..."); int res = fm->applyFilterChain(data); logger->trace(" Checking data ID..."); logger->trace(" "+data->getID()); if (data->getID() == "fm") logger->trace(" ok"); else { logger->warn(" NOT ok, ID not set!"); fail++; } logger->trace(" "+data->getTrack()+"error code "+std::to_string(res)); if (data->getTrack() == "task 1; task 2-1; task 3; task 4; ") if (res == 1) logger->trace(" ok"); else { logger->warn(" NOT ok, error code incorrect"); } else { logger->warn(" NOT ok, track record not expected"); } img.release(); delete data; delete fm; logger->trace("Testing complete."); if (fail > 0) logger->warn(" TEST FAILED: applyFilterChain"); logger->trace("=============================="); return fail; }
int FilterManagerTEST::T_replaceFilter() { int fail = 0; logger->trace("=============================="); logger->trace("Testing replaceFilter():"); logger->trace(" Test under custom ID mode..."); FilterManager* fm = new FilterManager("fm"); logger->trace(" Using factory, making 4 general filters..."); Filter* f1,*f2,*f3,*f4,*f5,*f6,*f7,*f8; f1 = FilterFactory::createFilter(); f2 = FilterFactory::createFilter(); f3 = FilterFactory::createFilter(); f4 = FilterFactory::createFilter(); f5 = FilterFactory::createNullImgFilter(); f6 = FilterFactory::createNullFPGAFilter(); f7 = FilterFactory::createFilter(); f8 = FilterFactory::createFilter(); logger->trace(" Inserting f1 as \"task 3\" to FRONT..."); fm->insertFilter("task 3",f1,"FRONT"); logger->trace(" Inserting f2 as \"task 1\"..."); fm->insertFilter("task 1",f2,"task 3"); logger->trace(" Inserting f3 as \"task 2\" between f1,f2..."); fm->insertFilter("task 2",f3,"task 3"); logger->trace(" Inserting f4 as \"task 4\" to REAR..."); fm->insertFilter("task 4",f4); logger->trace(" Replacing \"task 3\" with f5 under key \"task 5\"..."); fm->replaceFilter("task 5",f5,"task 3"); logger->trace(" Replacing \"FRONT\" with f2 under key \"task 6\"..."); fm->replaceFilter("task 6",f6,"FRONT"); logger->trace(" Using getFilterChainIDs()..."); std::vector<std::string> list = fm->getFilterChainIDs(); std::string res; for (std::vector<std::string>::iterator it = list.begin(); it != list.end(); it++) res += " "+*it; logger->trace(" "+res); if (res == " task 6 task 2 task 5 task 4") logger->trace(" ok"); else { logger->warn(" NOT ok, list unexpected"); fail += 1; } logger->trace(" Try replacing w/ non unique ID..."); res = std::to_string(fm->replaceFilter("task 5",f7,"task 5")); logger->trace(" error code: "+res); if (res == "2") logger->trace(" ok"); else { logger->warn(" NOT ok, incorrect error"); fail += 1; } logger->trace(" Try replacing out of range..."); res = std::to_string(fm->replaceFilter("task 8",f8,"what task?")); logger->trace(" error code: "+res); if (res == "1") logger->trace(" ok"); else { logger->warn(" NOT ok, incorrect error"); fail += 1; } logger->trace(" Try replacing using auto ID mode..."); res = std::to_string(fm->replaceFilter(f8,"task 2")); logger->trace(" error code: "+res); if (res == "4") logger->trace(" ok"); else { logger->warn(" NOT ok, incorrect error"); fail += 1; } delete fm; delete f7; delete f8; logger->trace(" Test under auto ID mode..."); fm = new FilterManager("fm",1); logger->trace(" Using factory..."); // Filter* f1,*f2,*f3,*f4,*f5,*f6,*f7,*f8; f1 = FilterFactory::createFilter(); f2 = FilterFactory::createFilter(); f3 = FilterFactory::createFilter(); f4 = FilterFactory::createFilter(); f5 = FilterFactory::createNullImgFilter(); f6 = FilterFactory::createNullFPGAFilter(); f7 = FilterFactory::createFilter(); f8 = FilterFactory::createFilter(); logger->trace(" Inserting f1 to FRONT..."); fm->insertFilter(f1,"FRONT"); logger->trace(" Inserting f2..."); fm->insertFilter(f2); logger->trace(" Inserting f3 between f1,f2..."); fm->insertFilter(f3,"2 GenericFilter"); logger->trace(" Inserting f4 to REAR..."); fm->insertFilter(f4,"REAR"); logger->trace(" Replacing \"2 GenericFilter\" with f5..."); fm->replaceFilter(f5,"2 GenericFilter"); logger->trace(" Replacing \"FRONT\" with f6..."); fm->replaceFilter(f6,"FRONT"); logger->trace(" Using getFilterChainIDs()..."); list = fm->getFilterChainIDs(); res = ""; for (std::vector<std::string>::iterator it = list.begin(); it != list.end(); it++) res += " "+*it; logger->trace(" "+res); if (res == " 6 NullFPGAFilter 3 GenericFilter 5 NullImgFilter 4 GenericFilter") logger->trace(" ok"); else { logger->warn(" NOT ok, list unexpected"); fail += 1; } logger->trace(" Try replacing out of range..."); res = std::to_string(fm->insertFilter(f7,"what task?")); logger->trace(" error code: "+res); if (res == "1") logger->trace(" ok"); else { logger->warn(" NOT ok, incorrect error"); fail += 1; } delete fm; delete f7; delete f8; logger->trace("Testing complete."); if (fail > 0) logger->warn(" TEST FAILED: replaceFilter()"); logger->trace("=============================="); return fail; }
int FilterManagerTEST::T_insertFilter() { int fail = 0; logger->trace("=============================="); logger->trace("Testing insertFilter():"); logger->trace(" Test under custom ID mode..."); FilterManager* fm = new FilterManager("fm"); logger->trace(" Using factory, making 4 general filters..."); Filter* f1,*f2,*f3,*f4,*f5; f1 = FilterFactory::createFilter(); f2 = FilterFactory::createFilter(); f3 = FilterFactory::createFilter(); f4 = FilterFactory::createFilter(); f5 = FilterFactory::createFilter(); logger->trace(" Inserting f1 as \"task 3\" to FRONT..."); fm->insertFilter("task 3",f1,"FRONT"); logger->trace(" Inserting f2 as \"task 1\"..."); fm->insertFilter("task 1",f2,"task 3"); logger->trace(" Inserting f3 as \"task 2\" between f1,f2..."); fm->insertFilter("task 2",f3,"task 3"); logger->trace(" Inserting f4 as \"task 4\" to REAR..."); fm->insertFilter("task 4",f4); logger->trace(" Using getFilterChainIDs()..."); std::vector<std::string> list = fm->getFilterChainIDs(); std::string res; for (std::vector<std::string>::iterator it = list.begin(); it != list.end(); it++) res += " "+*it; logger->trace(" "+res); if (res == " task 1 task 2 task 3 task 4") logger->trace(" ok"); else { logger->warn(" NOT ok, list unexpected"); fail += 1; } logger->trace(" Try inserting w/ non unique ID..."); res = std::to_string(fm->insertFilter("task 2",f5)); logger->trace(" error code: "+res); if (res == "2") logger->trace(" ok"); else { logger->warn(" NOT ok, incorrect error"); fail += 1; } logger->trace(" Try inserting out of range..."); res = std::to_string(fm->insertFilter("task 2",f5,"what task?")); logger->trace(" error code: "+res); if (res == "1") logger->trace(" ok"); else { logger->warn(" NOT ok, incorrect error"); fail += 1; } logger->trace(" Try inserting with no filterID arg..."); res = std::to_string(fm->insertFilter(f5,"Task 2")); logger->trace(" error code: "+res); if (res == "4") logger->trace(" ok"); else { logger->warn(" NOT ok, incorrect error"); fail += 1; } delete f5; delete fm; logger->trace(" Test under auto ID mode..."); fm = new FilterManager("fm",1); logger->trace(" Using factory, making 4 general filters..."); f1 = FilterFactory::createFilter(); f2 = FilterFactory::createFilter(); f3 = FilterFactory::createFilter(); f4 = FilterFactory::createFilter(); f5 = FilterFactory::createFilter(); logger->trace(" Inserting f1 to FRONT..."); fm->insertFilter(f1,"FRONT"); logger->trace(" Inserting f2..."); fm->insertFilter(f2); logger->trace(" Inserting f3 between f1,f2..."); fm->insertFilter(f3,"2 GenericFilter"); logger->trace(" Inserting f4 to REAR..."); fm->insertFilter(f4,"REAR"); res = ""; logger->trace(" Using getFilterChainIDs()..."); list = fm->getFilterChainIDs(); for (std::vector<std::string>::iterator it = list.begin(); it != list.end(); it++) res += " "+*it; logger->trace(" "+res); if (res == " 1 GenericFilter 3 GenericFilter 2 GenericFilter 4 GenericFilter") logger->trace(" ok"); else { logger->warn(" NOT ok, list unexpected"); fail += 1; } logger->trace(" Try inserting w/ custom ID..."); res = std::to_string(fm->insertFilter("task 2",f5)); logger->trace(" error code: "+res); if (res == "0") logger->trace(" ok"); else { logger->warn(" NOT ok, incorrect error"); fail += 1; } logger->trace(" Try inserting out of range..."); res = std::to_string(fm->insertFilter(f5,"what task?")); logger->trace(" error code: "+res); if (res == "1") logger->trace(" ok"); else { logger->warn(" NOT ok, incorrect error"); fail += 1; } logger->trace("Testing complete."); delete fm; if (fail > 0) logger->warn(" TEST FAILED: insertFilter()"); logger->trace("=============================="); return fail; }
int RGBFilterTEST::T_filter() { int fail = 0; logger->trace("=============================="); logger->trace("Testing filter():"); // logger->trace(" Using imread..."); // cv::Mat img = cv::imread("rgb_mode_0.jpg",CV_LOAD_IMAGE_COLOR); // if (! img.data) // logger->warn(" OH NO, img not read"); logger->trace(" Using camCap..."); ImgDataTEST* imgTest = new ImgDataTEST(); cv::Mat img = imgTest->camCap(); cvDestroyWindow("camCap"); logger->trace(" Loading test image into a ImgData wrapper..."); ImgData* testImg = new ImgData("raw",img); logger->trace(" Copying ImgData to second wrapper..."); ImgData* testImg2 = new ImgData(*testImg); logger->trace(" Showing one copy of test image (should be named \"raw\")..."); testImg->showImg(); logger->trace(" Filtering first data w/ full luminosity specturm, aka mode 0..."); logger->trace(" Init int arr[3]..."); int arr[] = {25,-15,-20}; logger->trace(" Using filter factory, create mode 0 filter..."); RGBFilter* rgbFilter = new RGBFilter(arr);//(RGBFilter*)FilterFactory::createRGBFilter(arr); logger->trace(" Creating filter manager w/ id \"RGBFilter MODE 0\"..."); FilterManager* fm = new FilterManager("RGBFilter MODE 0"); logger->trace(" Inserting filter as \"rgb mode 0\"..."); fm->insertFilter("rgb mode 0",rgbFilter); logger->trace(" Attempt filtering using filter manager..."); fm->applyFilterChain(testImg); logger->trace(" Showing filtered test image..."); testImg->showImg(); logger->trace(" Expect 2 windows, \"raw\" and \"RGBFilter MODE 0\", the latter should be red shifted"); logger->trace(" If true, hit space, else hit esc"); char key; while (1) { key = cvWaitKey(0); if (char(key) == 32) { logger->trace(" ok"); break; } else if (char(key) == 27) { logger->warn(" NOT ok, details of output under mode 0 not correct"); fail++; break; } } logger->trace(" Filtering data 2 w/ 3 zones of luminosity separately, aka mode 1..."); logger->trace(" Init int high[3],mid[3],shad[3]..."); int high[] = {255,255,255}; int mid[] = {50,-30,-30}; int shad[] = {-255,-255,-255}; logger->trace(" Using filter factory, create mode 1 filter..."); RGBFilter* rgbFilter2 = new RGBFilter(high,mid,shad);//(RGBFilter*)FilterFactory::createRGBFilter(high,mid,shad); logger->trace(" Creating filter manager w/ id \"RGBFilter MODE 1\"..."); FilterManager* fm2 = new FilterManager("RGBFilter MODE 1"); logger->trace(" Inserting filter as \"rgb mode 1\"..."); fm2->insertFilter("rgb mode 1",rgbFilter2); logger->trace(" Attempt filtering using filter manager..."); fm2->applyFilterChain(testImg2); logger->trace(" Showing filtered test image..."); testImg2->showImg(); logger->trace(" Expect 3 windows in total, \"raw\" and \"RGBFilter MODE 0\" and \"RGBFilter MODE 1\", the latter should be red shifted, but a bit differently"); logger->trace(" If true, hit space, else hit esc"); while (1) { key = cvWaitKey(0); if (char(key) == 32) { logger->trace(" ok"); break; } else if (char(key) == 27) { logger->warn(" NOT ok, details of output under mode 1 not correct"); fail++; break; } } delete fm; delete fm2; cvDestroyWindow("raw"); testImg->closeImg(); testImg2->closeImg(); delete testImg; delete testImg2; img.release(); if (fail > 0) logger->warn(" TEST FAILED: filter()"); logger->trace("=============================="); return fail; }