Пример #1
0
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;
}