69 #include <config_auto.h> 73 #include "allheaders.h" 75 extern l_int32 NumImageFileFormatExtensions;
76 extern const char *ImageFileFormatExtensions[];
127 char *testname, *vers;
131 PROCNAME(
"regTestSetup");
133 if (argc != 1 && argc != 2) {
134 snprintf(errormsg,
sizeof(errormsg),
135 "Syntax: %s [ [compare] | generate | display ]", argv[0]);
136 return ERROR_INT(errormsg, procName, 1);
140 return ERROR_INT(
"invalid root", procName, 1);
157 if (argc == 1 || !strcmp(argv[1],
"compare")) {
158 rp->
mode = L_REG_COMPARE;
161 if (rp->
fp == NULL) {
163 return ERROR_INT(
"stream not opened for tempfile", procName, 1);
165 }
else if (!strcmp(argv[1],
"generate")) {
166 rp->
mode = L_REG_GENERATE;
168 }
else if (!strcmp(argv[1],
"display")) {
169 rp->
mode = L_REG_DISPLAY;
173 snprintf(errormsg,
sizeof(errormsg),
174 "Syntax: %s [ [generate] | compare | display ]", argv[0]);
175 return ERROR_INT(errormsg, procName, 1);
180 lept_stderr(
"\n////////////////////////////////////////////////\n" 181 "//////////////// %s_reg ///////////////\n" 182 "////////////////////////////////////////////////\n",
213 char *text, *message;
217 PROCNAME(
"regTestCleanup");
220 return ERROR_INT(
"rp not defined", procName, 1);
240 return ERROR_INT(
"text not returned", procName, 1);
245 snprintf(result,
sizeof(result),
"SUCCESS: %s_reg\n", rp->
testname);
247 snprintf(result,
sizeof(result),
"FAILURE: %s_reg\n", rp->
testname);
250 results_file =
stringNew(
"/tmp/lept/reg_results.txt");
252 retval = (rp->
success) ? 0 : 1;
253 LEPT_FREE(results_file);
280 PROCNAME(
"regTestCompareValues");
283 return ERROR_INT(
"rp not defined", procName, 1);
286 diff = L_ABS(val2 - val1);
292 "Failure in %s_reg: value comparison for index %d\n" 293 "difference = %f but allowed delta = %f\n",
296 lept_stderr(
"Failure in %s_reg: value comparison for index %d\n" 297 "difference = %f but allowed delta = %f\n",
326 PROCNAME(
"regTestCompareStrings");
329 return ERROR_INT(
"rp not defined", procName, 1);
337 snprintf(buf,
sizeof(buf),
"/tmp/lept/regout/string1_%d_%zu",
340 snprintf(buf,
sizeof(buf),
"/tmp/lept/regout/string2_%d_%zu",
345 snprintf(buf,
sizeof(buf),
"/tmp/lept/regout/string*_%d_*", rp->
index);
348 "Failure in %s_reg: string comp for index %d; " 351 lept_stderr(
"Failure in %s_reg: string comp for index %d; " 380 PROCNAME(
"regTestComparePix");
383 return ERROR_INT(
"rp not defined", procName, 1);
384 if (!pix1 || !pix2) {
386 return ERROR_INT(
"pix1 and pix2 not both defined", procName, 1);
395 fprintf(rp->
fp,
"Failure in %s_reg: pix comparison for index %d\n",
398 lept_stderr(
"Failure in %s_reg: pix comparison for index %d\n",
441 l_int32 w, h, factor, similar;
443 PROCNAME(
"regTestCompareSimilarPix");
446 return ERROR_INT(
"rp not defined", procName, 1);
447 if (!pix1 || !pix2) {
449 return ERROR_INT(
"pix1 and pix2 not both defined", procName, 1);
454 factor = L_MAX(w, h) / 400;
455 factor = L_MAX(1, L_MIN(factor, 4));
457 &similar, printstats);
463 "Failure in %s_reg: pix similarity comp for index %d\n",
466 lept_stderr(
"Failure in %s_reg: pix similarity comp for index %d\n",
502 const char *localname)
506 l_int32 ret, same, format;
509 PROCNAME(
"regTestCheckFile");
512 return ERROR_INT(
"rp not defined", procName, 1);
515 return ERROR_INT(
"local name not defined", procName, 1);
517 if (rp->
mode != L_REG_GENERATE && rp->
mode != L_REG_COMPARE &&
518 rp->
mode != L_REG_DISPLAY) {
520 return ERROR_INT(
"invalid mode", procName, 1);
525 if (rp->
mode == L_REG_DISPLAY)
return 0;
529 snprintf(namebuf,
sizeof(namebuf),
"/tmp/lept/golden/%s_golden.%02d%s",
534 if (rp->
mode == L_REG_GENERATE) {
541 L_INFO(
"Copy: %s to %s\n", procName, local, golden);
567 if (format == IFF_GIF) {
578 fprintf(rp->
fp,
"Failure in %s_reg, index %d: comparing %s with %s\n",
580 lept_stderr(
"Failure in %s_reg, index %d: comparing %s with %s\n",
618 PROCNAME(
"regTestCompareFiles");
621 return ERROR_INT(
"rp not defined", procName, 1);
622 if (index1 < 0 || index2 < 0) {
624 return ERROR_INT(
"index1 and/or index2 is negative", procName, 1);
626 if (index1 == index2) {
628 return ERROR_INT(
"index1 must differ from index2", procName, 1);
632 if (rp->
mode != L_REG_COMPARE)
return 0;
635 snprintf(namebuf,
sizeof(namebuf),
"%s_golden.%02d", rp->
testname, index1);
640 L_ERROR(
"golden file %s not found\n", procName, namebuf);
646 snprintf(namebuf,
sizeof(namebuf),
"%s_golden.%02d", rp->
testname, index2);
652 L_ERROR(
"golden file %s not found\n", procName, namebuf);
662 "Failure in %s_reg, index %d: comparing %s with %s\n",
664 lept_stderr(
"Failure in %s_reg, index %d: comparing %s with %s\n",
708 PROCNAME(
"regTestWritePixAndCheck");
711 return ERROR_INT(
"rp not defined", procName, 1);
714 return ERROR_INT(
"pix not defined", procName, 1);
716 if (format < 0 || format >= NumImageFileFormatExtensions) {
718 return ERROR_INT(
"invalid format", procName, 1);
723 changeFormatForMissingLib(&format);
726 snprintf(namebuf,
sizeof(namebuf),
"/tmp/lept/regout/%s.%02d.%s",
727 rp->
testname, rp->
index + 1, ImageFileFormatExtensions[format]);
730 if (pixGetDepth(pix) < 8)
732 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);
886 if (strstr(root,
".exe") != NULL)
888 if (strstr(root,
"_reg") == root + len - 4)
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()
void lept_stderr(const char *fmt,...)
lept_stderr()
static char * getRootNameFromArgv0(const char *argv0)
getRootNameFromArgv0()
l_ok l_binaryCompare(const l_uint8 *data1, size_t size1, const l_uint8 *data2, size_t size2, l_int32 *psame)
l_binaryCompare()
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()
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 * getLeptonicaVersion(void)
getLeptonicaVersion()
char * getImagelibVersions(void)
getImagelibVersions()
char * regTestGenLocalFilename(L_REGPARAMS *rp, l_int32 index, l_int32 format)
regTestGenLocalFilename()
void sarrayDestroy(SARRAY **psa)
sarrayDestroy()