static wbBool wbSolution_correctQ(char *expectedOutputFile, wbSolution_t sol) { if (expectedOutputFile == NULL) { _solution_correctQ = "Failed to determined the expected output file."; return wbFalse; } else if (!wbFile_existsQ(expectedOutputFile)) { _solution_correctQ = wbString("The file ", expectedOutputFile, " does not exist."); return wbFalse; } else if (wbString_sameQ(wbSolution_getType(sol), "image")) { wbBool res; wbImage_t solutionImage = NULL; wbImage_t expectedImage = wbImport(expectedOutputFile); if (expectedImage == NULL) { _solution_correctQ = "Failed to open expected output file."; res = wbFalse; } else if (wbImage_getWidth(expectedImage) != wbSolution_getWidth(sol)) { _solution_correctQ = "The image width of the expected image does not " "match that of the solution."; res = wbFalse; } else if (wbImage_getHeight(expectedImage) != wbSolution_getHeight(sol)) { _solution_correctQ = "The image height of the expected image does not " "match that of the solution."; res = wbFalse; } else if (wbImage_getChannels(expectedImage) != wbSolution_getChannels(sol)) { _solution_correctQ = "The image channels of the expected image does not " "match that of the solution."; res = wbFalse; } else { solutionImage = (wbImage_t)wbSolution_getData(sol); wbAssert(solutionImage != NULL); res = wbImage_sameQ(solutionImage, expectedImage, _onUnsameImageFunction); } if (expectedImage != NULL) { wbImage_delete(expectedImage); } return res; } else if (wbString_sameQ(wbSolution_getType(sol), "histogram")) { return wbSolution_listCorrectQ<unsigned char>(expectedOutputFile, sol, "Integer"); } else if (wbString_sameQ(wbSolution_getType(sol), "integral_vector")) { return wbSolution_listCorrectQ<int>(expectedOutputFile, sol, "Integer"); } else if (wbString_sameQ(wbSolution_getType(sol), "vector") || wbString_sameQ(wbSolution_getType(sol), "matrix")) { return wbSolution_listCorrectQ<wbReal_t>(expectedOutputFile, sol, "Real"); } else { wbAssert(wbFalse); return wbFalse; } }
static wbBool wbSolution_correctQ(char * expectedOutputFile, wbSolution_t sol) { wbBool res; if (expectedOutputFile == NULL) { _solution_correctQ = json_string("Failed to determined the expected output file."); return wbFalse; } else if (!wbFile_existsQ(expectedOutputFile)) { string str = wbString("The file ", expectedOutputFile, " does not exist."); _solution_correctQ = json_string(str.c_str()); return wbFalse; } else if (wbString_sameQ(wbSolution_getType(sol), "image")) { wbImage_t solutionImage = NULL; wbImage_t expectedImage = wbImport(expectedOutputFile); if (expectedImage == NULL) { _solution_correctQ = json_string("Failed to open expected output file."); res = wbFalse; } else if (wbImage_getWidth(expectedImage) != wbSolution_getWidth(sol)) { _solution_correctQ = json_string("The image width of the expected image does not match that of the solution."); res = wbFalse; } else if (wbImage_getHeight(expectedImage) != wbSolution_getHeight(sol)) { _solution_correctQ = json_string("The image height of the expected image does not match that of the solution."); res = wbFalse; } else { solutionImage = (wbImage_t) wbSolution_getData(sol); wbAssert(solutionImage != NULL); res = wbImage_sameQ(solutionImage, expectedImage, _onUnsameImageFunction); } if (expectedImage != NULL) { wbImage_delete(expectedImage); } return res; } else if (wbString_sameQ(wbSolution_getType(sol), "vector") || wbString_sameQ(wbSolution_getType(sol), "matrix")) { wbReal_t * expectedData; int expectedRows, expectedColumns; expectedData = (wbReal_t *) wbImport(expectedOutputFile, &expectedRows, &expectedColumns); if (expectedData == NULL) { _solution_correctQ = json_string("Failed to open expected output file."); res = wbFalse; } else if (expectedRows != wbSolution_getRows(sol)) { wbLog(TRACE, "Number of rows in the solution is ", wbSolution_getRows(sol), ". Expected number of rows is ", expectedRows, "."); _solution_correctQ = json_string("The number of rows in the solution did not match that of the expected results."); res = wbFalse; } else if (expectedColumns != wbSolution_getColumns(sol)) { wbLog(TRACE, "Number of columns in the solution is ", wbSolution_getColumns(sol), ". Expected number of columns is ", expectedColumns, "."); _solution_correctQ = json_string("The number of columns in the solution did not match that of the expected results."); res = wbFalse; } else { int ii, jj, idx; wbReal_t * solutionData; solutionData = (wbReal_t *) wbSolution_getData(sol); for (ii = 0; ii < expectedRows; ii++) { for (jj = 0; jj < expectedColumns; jj++) { idx = ii * expectedColumns + jj; if (wbUnequalQ(expectedData[idx], solutionData[idx])) { string str; if (expectedColumns == 1) { str = wbString("The solution did not match the expected results at row ", ii, ". Expecting ", expectedData[idx], " but got ", solutionData[idx], "."); } else { str = wbString("The solution did not match the expected results at column ", jj, " and row ", ii, ". Expecting ", expectedData[idx], " but got ", solutionData[idx], "."); } _solution_correctQ = json_string(str.c_str()); res = wbFalse; goto matrixCleanup; } } } res = wbTrue; } matrixCleanup: if (expectedData != NULL) { wbFree(expectedData); } return res; } else { wbAssert(wbFalse); return wbFalse; } }