int ImgDataTEST::T_cpConstructor() { int fail = 0; logger->trace("=============================="); logger->trace("Testing Copy Constructor:"); logger->trace(" Using camCap() to get Mat obj..."); cv::Mat img = ImgDataTEST::camCap(); cvDestroyWindow("camCap"); logger->trace(" Constructing new ImgData obj with arg \"data\" and Mat obj..."); ImgData* data = new ImgData("data",img); logger->trace(" Setting Msg to \"SubZero rox\"..."); data->setMsg("SubZero rox"); logger->trace(" Invoking Copy Constructor..."); ImgData* copy = new ImgData(*data); logger->trace(" Checking variables..."); logger->trace(" Using getID()..."); if (copy->getID() == "data") logger->trace(" ok"); else { logger->warn(" NOT ok, ID copy incorrect"); fail += 1; } logger->trace(" Using getMsg()..."); if (copy->getMsg() == "SubZero rox") logger->trace(" ok"); else { logger->warn(" NOT ok, Msg copy incorrect"); fail += 1; } logger->trace(" Showing imgs using showImg()..."); logger->trace(" If both imgs are identical press spacebar, else press esc..."); data->showImg("data"); copy->showImg("copy"); char key; while (1) { key = cvWaitKey(0); if (char(key) == 32) { logger->trace(" ok"); break; } else if (char(key) == 27) { logger->warn(" NOT ok, img not same"); fail++; break; } } logger->trace(" Changing msg of copy to \"whatever\"..."); copy->setMsg("whatever"); // logger->trace(" Changing org img content..."); // data->closeImg(); // copy->closeImg(); // img = ImgDataTEST::camCap(); // cvDestroyWindow("camCap"); // data->setImg(&img); logger->trace(" Checking variables..."); logger->trace(" Using getMsg() on original..."); if (copy->getMsg() == "whatever" && data->getMsg() == "SubZero rox") logger->trace(" ok"); else { logger->warn(" NOT ok, org or copy Msg incorrect"); fail += 1; } logger->trace(" Using refcount to check independence..."); int datarc, copyrc; datarc = data->img.u->refcount; copyrc = copy->img.u->refcount; logger->trace(" \"data\" img refcount: "+StringTools::intToStr(datarc)); logger->trace(" \"copy\" img refcount: "+StringTools::intToStr(copyrc)); if (datarc==2 && copyrc ==1) { logger->trace(" ok"); fail--; } else if (datarc==3) logger->warn(" NOT ok, copy's img points to data's img obj"); else logger->warn(" NOT ok, data ref should be 2, copy ref should be 1"); fail++; // logger->trace(" Showing imgs using showImg()..."); // data->showImg("data"); // copy->showImg("copy"); // logger->trace(" If copy different from data then deep copy ok press spacebar, else press esc..."); // while (1) { // key = cvWaitKey(0); // if (char(key) == 32) { // logger->trace(" ok"); // break; // } // else if (char(key) == 27) { // logger->warn(" NOT ok, img not same"); // fail++; // break; // } // } logger->trace("Test complete."); logger->trace("Deleting data..."); delete data; delete copy; if (fail > 0) logger->warn(" TEST FAILED: ImgData Copy Constructor"); logger->trace("=============================="); return fail; }