65 #include "allheaders.h" 67 extern l_int32 NumImageFileFormatExtensions;
68 extern const char *ImageFileFormatExtensions[];
119 char *testname, *vers;
123 PROCNAME(
"regTestSetup");
125 if (argc != 1 && argc != 2) {
126 snprintf(errormsg,
sizeof(errormsg),
127 "Syntax: %s [ [compare] | generate | display ]", argv[0]);
128 return ERROR_INT(errormsg, procName, 1);
132 return ERROR_INT(
"invalid root", procName, 1);
136 return ERROR_INT(
"rp not made", procName, 1);
150 if (argc == 1 || !strcmp(argv[1],
"compare")) {
151 rp->
mode = L_REG_COMPARE;
154 if (rp->
fp == NULL) {
156 return ERROR_INT(
"stream not opened for tempfile", procName, 1);
158 }
else if (!strcmp(argv[1],
"generate")) {
159 rp->
mode = L_REG_GENERATE;
161 }
else if (!strcmp(argv[1],
"display")) {
162 rp->
mode = L_REG_DISPLAY;
166 snprintf(errormsg,
sizeof(errormsg),
167 "Syntax: %s [ [generate] | compare | display ]", argv[0]);
168 return ERROR_INT(errormsg, procName, 1);
173 fprintf(stderr,
"\n################ %s_reg ###############\n",
176 fprintf(stderr,
"%s\n", vers);
179 fprintf(stderr,
"%s\n", vers);
204 char *text, *message;
208 PROCNAME(
"regTestCleanup");
211 return ERROR_INT(
"rp not defined", procName, 1);
213 fprintf(stderr,
"Time: %7.3f sec\n", stopTimerNested(rp->
tstart));
214 fprintf(stderr,
"################################################\n");
232 return ERROR_INT(
"text not returned", procName, 1);
237 snprintf(result,
sizeof(result),
"SUCCESS: %s_reg\n", rp->
testname);
239 snprintf(result,
sizeof(result),
"FAILURE: %s_reg\n", rp->
testname);
242 results_file =
stringNew(
"/tmp/lept/reg_results.txt");
244 retval = (rp->
success) ? 0 : 1;
245 LEPT_FREE(results_file);
271 PROCNAME(
"regTestCompareValues");
274 return ERROR_INT(
"rp not defined", procName, 1);
277 diff = L_ABS(val2 - val1);
283 "Failure in %s_reg: value comparison for index %d\n" 284 "difference = %f but allowed delta = %f\n",
288 "Failure in %s_reg: value comparison for index %d\n" 289 "difference = %f but allowed delta = %f\n",
317 PROCNAME(
"regTestCompareStrings");
320 return ERROR_INT(
"rp not defined", procName, 1);
324 if (bytes1 != bytes2) fail = TRUE;
326 for (i = 0; i < bytes1; i++) {
327 if (string1[i] != string2[i]) {
337 snprintf(buf,
sizeof(buf),
"/tmp/lept/regout/string1_%d_%lu", rp->
index,
338 (
unsigned long)bytes1);
340 snprintf(buf,
sizeof(buf),
"/tmp/lept/regout/string2_%d_%lu", rp->
index,
341 (
unsigned long)bytes2);
345 snprintf(buf,
sizeof(buf),
"/tmp/lept/regout/string*_%d_*", rp->
index);
348 "Failure in %s_reg: string comp for index %d; " 352 "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 fprintf(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 fprintf(stderr,
"Failure in %s_reg: pix similarity comp for index %d\n",
498 const char *localname)
502 l_int32 ret, same, format;
505 PROCNAME(
"regTestCheckFile");
508 return ERROR_INT(
"rp not defined", procName, 1);
511 return ERROR_INT(
"local name not defined", procName, 1);
513 if (rp->
mode != L_REG_GENERATE && rp->
mode != L_REG_COMPARE &&
514 rp->
mode != L_REG_DISPLAY) {
516 return ERROR_INT(
"invalid mode", procName, 1);
521 if (rp->
mode == L_REG_DISPLAY)
return 0;
525 snprintf(namebuf,
sizeof(namebuf),
"/tmp/lept/golden/%s_golden.%02d%s",
530 if (rp->
mode == L_REG_GENERATE) {
537 L_INFO(
"Copy: %s to %s\n", procName, local, golden);
563 if (format == IFF_GIF) {
574 fprintf(rp->
fp,
"Failure in %s_reg, index %d: comparing %s with %s\n",
576 fprintf(stderr,
"Failure in %s_reg, index %d: comparing %s with %s\n",
613 PROCNAME(
"regTestCompareFiles");
616 return ERROR_INT(
"rp not defined", procName, 1);
617 if (index1 < 0 || index2 < 0) {
619 return ERROR_INT(
"index1 and/or index2 is negative", procName, 1);
621 if (index1 == index2) {
623 return ERROR_INT(
"index1 must differ from index2", procName, 1);
627 if (rp->
mode != L_REG_COMPARE)
return 0;
630 snprintf(namebuf,
sizeof(namebuf),
"%s_golden.%02d", rp->
testname, index1);
635 L_ERROR(
"golden file %s not found\n", procName, namebuf);
641 snprintf(namebuf,
sizeof(namebuf),
"%s_golden.%02d", rp->
testname, index2);
647 L_ERROR(
"golden file %s not found\n", procName, namebuf);
657 "Failure in %s_reg, index %d: comparing %s with %s\n",
660 "Failure in %s_reg, index %d: comparing %s with %s\n",
703 PROCNAME(
"regTestWritePixAndCheck");
706 return ERROR_INT(
"rp not defined", procName, 1);
709 return ERROR_INT(
"pix not defined", procName, 1);
711 if (format < 0 || format >= NumImageFileFormatExtensions) {
713 return ERROR_INT(
"invalid format", procName, 1);
717 snprintf(namebuf,
sizeof(namebuf),
"/tmp/lept/regout/%s.%02d.%s",
718 rp->
testname, rp->
index + 1, ImageFileFormatExtensions[format]);
721 if (pixGetDepth(pix) < 8)
723 pixWrite(namebuf, pix, format);
770 PROCNAME(
"regTestWriteDataAndCheck");
773 return ERROR_INT(
"rp not defined", procName, 1);
774 if (!data || nbytes == 0) {
776 return ERROR_INT(
"data not defined or size == 0", procName, 1);
780 snprintf(namebuf,
sizeof(namebuf),
"/tmp/lept/regout/%s.%02d.%s",
819 PROCNAME(
"regTestGenLocalFilename");
822 return (
char *)ERROR_PTR(
"rp not defined", procName, NULL);
824 ind = (index >= 0) ? index : rp->
index;
825 snprintf(buf,
sizeof(buf),
"/tmp/lept/regout/%s.%02d.%s",
826 rp->
testname, ind, ImageFileFormatExtensions[format]);
853 PROCNAME(
"getRootNameFromArgv0");
856 if ((len = strlen(root)) <= 4) {
858 return (
char *)ERROR_PTR(
"invalid argv0; too small", procName, NULL);
873 if (strstr(root,
".exe") != NULL)
877 root[len - 4] =
'\0';
L_TIMER startTimerNested(void)
startTimerNested(), stopTimerNested()
l_int32 lept_mkdir(const char *subdir)
lept_mkdir()
l_int32 regTestCompareValues(L_REGPARAMS *rp, l_float32 val1, l_float32 val2, l_float32 delta)
regTestCompareValues()
char * genPathname(const char *dir, const char *fname)
genPathname()
l_int32 regTestSetup(l_int32 argc, char **argv, L_REGPARAMS **prp)
regTestSetup()
l_int32 regTestCheckFile(L_REGPARAMS *rp, const char *localname)
regTestCheckFile()
l_int32 fileCopy(const char *srcfile, const char *newfile)
fileCopy()
char * stringNew(const char *src)
stringNew()
l_int32 regTestCompareFiles(L_REGPARAMS *rp, l_int32 index1, l_int32 index2)
regTestCompareFiles()
l_int32 splitPathAtDirectory(const char *pathname, char **pdir, char **ptail)
splitPathAtDirectory()
l_int32 filesAreIdentical(const char *fname1, const char *fname2, l_int32 *psame)
filesAreIdentical()
char * getImagelibVersions()
getImagelibVersions()
static char * getRootNameFromArgv0(const char *argv0)
regTestGenLocalFilename()
l_int32 findFileFormat(const char *filename, l_int32 *pformat)
findFileFormat()
l_uint8 * l_binaryRead(const char *filename, size_t *pnbytes)
l_binaryRead()
l_int32 splitPathAtExtension(const char *pathname, char **pbasename, char **pextension)
splitPathAtExtension()
char * getLeptonicaVersion()
getLeptonicaVersion()
l_int32 fileAppendString(const char *filename, const char *str)
fileAppendString()
l_int32 pixSetPadBits(PIX *pix, l_int32 val)
pixSetPadBits()
char * sarrayGetString(SARRAY *sa, l_int32 index, l_int32 copyflag)
sarrayGetString()
l_int32 regTestCleanup(L_REGPARAMS *rp)
regTestCleanup()
void pixDestroy(PIX **ppix)
pixDestroy()
l_int32 regTestWriteDataAndCheck(L_REGPARAMS *rp, void *data, size_t nbytes, const char *ext)
regTestWriteDataAndCheck()
SARRAY * getSortedPathnamesInDirectory(const char *dirname, const char *substr, l_int32 first, l_int32 nfiles)
getSortedPathnamesInDirectory()
FILE * fopenWriteStream(const char *filename, const char *modestring)
fopenWriteStream()
l_int32 sarrayGetCount(SARRAY *sa)
sarrayGetCount()
PIX * pixRead(const char *filename)
pixRead()
l_int32 l_binaryWrite(const char *filename, const char *operation, void *data, size_t nbytes)
l_binaryWrite()
l_int32 pixEqual(PIX *pix1, PIX *pix2, l_int32 *psame)
pixEqual()
l_int32 regTestCompareStrings(L_REGPARAMS *rp, l_uint8 *string1, size_t bytes1, l_uint8 *string2, size_t bytes2)
regTestCompareStrings()
l_int32 regTestComparePix(L_REGPARAMS *rp, PIX *pix1, PIX *pix2)
regTestComparePix()
char * stringJoin(const char *src1, const char *src2)
stringJoin()
l_int32 regTestWritePixAndCheck(L_REGPARAMS *rp, PIX *pix, l_int32 format)
regTestWritePixAndCheck()
l_int32 pixGetDimensions(PIX *pix, l_int32 *pw, l_int32 *ph, l_int32 *pd)
pixGetDimensions()
l_int32 regTestCompareSimilarPix(L_REGPARAMS *rp, PIX *pix1, PIX *pix2, l_int32 mindiff, l_float32 maxfract, l_int32 printstats)
regTestCompareSimilarPix()
l_int32 stringFindSubstr(const char *src, const char *sub, l_int32 *ploc)
stringFindSubstr()
l_int32 pixTestForSimilarity(PIX *pix1, PIX *pix2, l_int32 factor, l_int32 mindiff, l_float32 maxfract, l_float32 maxave, l_int32 *psimilar, l_int32 details)
pixTestForSimilarity()
void sarrayDestroy(SARRAY **psa)
sarrayDestroy()