69 #include "allheaders.h" 71 extern l_int32 NumImageFileFormatExtensions;
72 extern const char *ImageFileFormatExtensions[];
123 char *testname, *vers;
127 PROCNAME(
"regTestSetup");
129 if (argc != 1 && argc != 2) {
130 snprintf(errormsg,
sizeof(errormsg),
131 "Syntax: %s [ [compare] | generate | display ]", argv[0]);
132 return ERROR_INT(errormsg, procName, 1);
136 return ERROR_INT(
"invalid root", procName, 1);
142 return ERROR_INT(
"rp not made", procName, 1);
156 if (argc == 1 || !strcmp(argv[1],
"compare")) {
157 rp->
mode = L_REG_COMPARE;
160 if (rp->
fp == NULL) {
162 return ERROR_INT(
"stream not opened for tempfile", procName, 1);
164 }
else if (!strcmp(argv[1],
"generate")) {
165 rp->
mode = L_REG_GENERATE;
167 }
else if (!strcmp(argv[1],
"display")) {
168 rp->
mode = L_REG_DISPLAY;
172 snprintf(errormsg,
sizeof(errormsg),
173 "Syntax: %s [ [generate] | compare | display ]", argv[0]);
174 return ERROR_INT(errormsg, procName, 1);
179 fprintf(stderr,
"\n////////////////////////////////////////////////\n" 180 "//////////////// %s_reg ///////////////\n" 181 "////////////////////////////////////////////////\n",
184 fprintf(stderr,
"%s : ", vers);
187 fprintf(stderr,
"%s\n", vers);
212 char *text, *message;
216 PROCNAME(
"regTestCleanup");
219 return ERROR_INT(
"rp not defined", procName, 1);
221 fprintf(stderr,
"Time: %7.3f sec\n", stopTimerNested(rp->
tstart));
239 return ERROR_INT(
"text not returned", procName, 1);
244 snprintf(result,
sizeof(result),
"SUCCESS: %s_reg\n", rp->
testname);
246 snprintf(result,
sizeof(result),
"FAILURE: %s_reg\n", rp->
testname);
249 results_file =
stringNew(
"/tmp/lept/reg_results.txt");
251 retval = (rp->
success) ? 0 : 1;
252 LEPT_FREE(results_file);
278 PROCNAME(
"regTestCompareValues");
281 return ERROR_INT(
"rp not defined", procName, 1);
284 diff = L_ABS(val2 - val1);
290 "Failure in %s_reg: value comparison for index %d\n" 291 "difference = %f but allowed delta = %f\n",
295 "Failure in %s_reg: value comparison for index %d\n" 296 "difference = %f but allowed delta = %f\n",
324 PROCNAME(
"regTestCompareStrings");
327 return ERROR_INT(
"rp not defined", procName, 1);
331 if (bytes1 != bytes2) fail = TRUE;
333 for (i = 0; i < bytes1; i++) {
334 if (string1[i] != string2[i]) {
344 snprintf(buf,
sizeof(buf),
"/tmp/lept/regout/string1_%d_%lu", rp->
index,
345 (
unsigned long)bytes1);
347 snprintf(buf,
sizeof(buf),
"/tmp/lept/regout/string2_%d_%lu", rp->
index,
348 (
unsigned long)bytes2);
352 snprintf(buf,
sizeof(buf),
"/tmp/lept/regout/string*_%d_*", rp->
index);
355 "Failure in %s_reg: string comp for index %d; " 359 "Failure in %s_reg: string comp for index %d; " 387 PROCNAME(
"regTestComparePix");
390 return ERROR_INT(
"rp not defined", procName, 1);
391 if (!pix1 || !pix2) {
393 return ERROR_INT(
"pix1 and pix2 not both defined", procName, 1);
402 fprintf(rp->
fp,
"Failure in %s_reg: pix comparison for index %d\n",
405 fprintf(stderr,
"Failure in %s_reg: pix comparison for index %d\n",
448 l_int32 w, h, factor, similar;
450 PROCNAME(
"regTestCompareSimilarPix");
453 return ERROR_INT(
"rp not defined", procName, 1);
454 if (!pix1 || !pix2) {
456 return ERROR_INT(
"pix1 and pix2 not both defined", procName, 1);
461 factor = L_MAX(w, h) / 400;
462 factor = L_MAX(1, L_MIN(factor, 4));
464 &similar, printstats);
470 "Failure in %s_reg: pix similarity comp for index %d\n",
473 fprintf(stderr,
"Failure in %s_reg: pix similarity comp for index %d\n",
508 const char *localname)
512 l_int32 ret, same, format;
515 PROCNAME(
"regTestCheckFile");
518 return ERROR_INT(
"rp not defined", procName, 1);
521 return ERROR_INT(
"local name not defined", procName, 1);
523 if (rp->
mode != L_REG_GENERATE && rp->
mode != L_REG_COMPARE &&
524 rp->
mode != L_REG_DISPLAY) {
526 return ERROR_INT(
"invalid mode", procName, 1);
531 if (rp->
mode == L_REG_DISPLAY)
return 0;
535 snprintf(namebuf,
sizeof(namebuf),
"/tmp/lept/golden/%s_golden.%02d%s",
540 if (rp->
mode == L_REG_GENERATE) {
547 L_INFO(
"Copy: %s to %s\n", procName, local, golden);
573 if (format == IFF_GIF) {
584 fprintf(rp->
fp,
"Failure in %s_reg, index %d: comparing %s with %s\n",
586 fprintf(stderr,
"Failure in %s_reg, index %d: comparing %s with %s\n",
623 PROCNAME(
"regTestCompareFiles");
626 return ERROR_INT(
"rp not defined", procName, 1);
627 if (index1 < 0 || index2 < 0) {
629 return ERROR_INT(
"index1 and/or index2 is negative", procName, 1);
631 if (index1 == index2) {
633 return ERROR_INT(
"index1 must differ from index2", procName, 1);
637 if (rp->
mode != L_REG_COMPARE)
return 0;
640 snprintf(namebuf,
sizeof(namebuf),
"%s_golden.%02d", rp->
testname, index1);
645 L_ERROR(
"golden file %s not found\n", procName, namebuf);
651 snprintf(namebuf,
sizeof(namebuf),
"%s_golden.%02d", rp->
testname, index2);
657 L_ERROR(
"golden file %s not found\n", procName, namebuf);
667 "Failure in %s_reg, index %d: comparing %s with %s\n",
670 "Failure in %s_reg, index %d: comparing %s with %s\n",
713 PROCNAME(
"regTestWritePixAndCheck");
716 return ERROR_INT(
"rp not defined", procName, 1);
719 return ERROR_INT(
"pix not defined", procName, 1);
721 if (format < 0 || format >= NumImageFileFormatExtensions) {
723 return ERROR_INT(
"invalid format", procName, 1);
727 snprintf(namebuf,
sizeof(namebuf),
"/tmp/lept/regout/%s.%02d.%s",
728 rp->
testname, rp->
index + 1, ImageFileFormatExtensions[format]);
731 if (pixGetDepth(pix) < 8)
733 pixWrite(namebuf, pix, format);
780 PROCNAME(
"regTestWriteDataAndCheck");
783 return ERROR_INT(
"rp not defined", procName, 1);
784 if (!data || nbytes == 0) {
786 return ERROR_INT(
"data not defined or size == 0", procName, 1);
790 snprintf(namebuf,
sizeof(namebuf),
"/tmp/lept/regout/%s.%02d.%s",
831 PROCNAME(
"regTestGenLocalFilename");
834 return (
char *)ERROR_PTR(
"rp not defined", procName, NULL);
836 ind = (index >= 0) ? index : rp->
index;
837 snprintf(buf,
sizeof(buf),
"/tmp/lept/regout/%s.%02d.%s",
838 rp->
testname, ind, ImageFileFormatExtensions[format]);
865 PROCNAME(
"getRootNameFromArgv0");
868 if ((len = strlen(root)) <= 4) {
870 return (
char *)ERROR_PTR(
"invalid argv0; too small", procName, NULL);
885 if (strstr(root,
".exe") != NULL)
889 root[len - 4] =
'\0';
L_TIMER startTimerNested(void)
startTimerNested(), stopTimerNested()
l_int32 lept_mkdir(const char *subdir)
lept_mkdir()
l_ok splitPathAtExtension(const char *pathname, char **pbasename, char **pextension)
splitPathAtExtension()
l_ok regTestWritePixAndCheck(L_REGPARAMS *rp, PIX *pix, l_int32 format)
regTestWritePixAndCheck()
char * genPathname(const char *dir, const char *fname)
genPathname()
l_ok fileCopy(const char *srcfile, const char *newfile)
fileCopy()
char * stringNew(const char *src)
stringNew()
char * getImagelibVersions()
getImagelibVersions()
static char * getRootNameFromArgv0(const char *argv0)
getRootNameFromArgv0()
l_ok regTestCheckFile(L_REGPARAMS *rp, const char *localname)
regTestCheckFile()
l_ok l_binaryWrite(const char *filename, const char *operation, const void *data, size_t nbytes)
l_binaryWrite()
l_uint8 * l_binaryRead(const char *filename, size_t *pnbytes)
l_binaryRead()
char * getLeptonicaVersion()
getLeptonicaVersion()
l_ok regTestCompareStrings(L_REGPARAMS *rp, l_uint8 *string1, size_t bytes1, l_uint8 *string2, size_t bytes2)
regTestCompareStrings()
l_ok regTestSetup(l_int32 argc, char **argv, L_REGPARAMS **prp)
regTestSetup()
l_ok fileAppendString(const char *filename, const char *str)
fileAppendString()
l_ok pixSetPadBits(PIX *pix, l_int32 val)
pixSetPadBits()
l_ok findFileFormat(const char *filename, l_int32 *pformat)
findFileFormat()
l_ok regTestWriteDataAndCheck(L_REGPARAMS *rp, void *data, size_t nbytes, const char *ext)
regTestWriteDataAndCheck()
char * sarrayGetString(SARRAY *sa, l_int32 index, l_int32 copyflag)
sarrayGetString()
l_ok regTestCompareValues(L_REGPARAMS *rp, l_float32 val1, l_float32 val2, l_float32 delta)
regTestCompareValues()
void pixDestroy(PIX **ppix)
pixDestroy()
l_ok regTestCompareFiles(L_REGPARAMS *rp, l_int32 index1, l_int32 index2)
regTestCompareFiles()
SARRAY * getSortedPathnamesInDirectory(const char *dirname, const char *substr, l_int32 first, l_int32 nfiles)
getSortedPathnamesInDirectory()
l_ok splitPathAtDirectory(const char *pathname, char **pdir, char **ptail)
splitPathAtDirectory()
l_ok regTestCleanup(L_REGPARAMS *rp)
regTestCleanup()
l_ok filesAreIdentical(const char *fname1, const char *fname2, l_int32 *psame)
filesAreIdentical()
l_ok pixGetDimensions(const PIX *pix, l_int32 *pw, l_int32 *ph, l_int32 *pd)
pixGetDimensions()
FILE * fopenWriteStream(const char *filename, const char *modestring)
fopenWriteStream()
l_int32 sarrayGetCount(SARRAY *sa)
sarrayGetCount()
PIX * pixRead(const char *filename)
pixRead()
l_ok regTestComparePix(L_REGPARAMS *rp, PIX *pix1, PIX *pix2)
regTestComparePix()
char * stringJoin(const char *src1, const char *src2)
stringJoin()
l_ok pixTestForSimilarity(PIX *pix1, PIX *pix2, l_int32 factor, l_int32 mindiff, l_float32 maxfract, l_float32 maxave, l_int32 *psimilar, l_int32 details)
pixTestForSimilarity()
l_ok pixEqual(PIX *pix1, PIX *pix2, l_int32 *psame)
pixEqual()
l_int32 stringFindSubstr(const char *src, const char *sub, l_int32 *ploc)
stringFindSubstr()
l_ok regTestCompareSimilarPix(L_REGPARAMS *rp, PIX *pix1, PIX *pix2, l_int32 mindiff, l_float32 maxfract, l_int32 printstats)
regTestCompareSimilarPix()
char * regTestGenLocalFilename(L_REGPARAMS *rp, l_int32 index, l_int32 format)
regTestGenLocalFilename()
void sarrayDestroy(SARRAY **psa)
sarrayDestroy()