| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136 |
- /*====================================================================*
- - Copyright (C) 2001 Leptonica. All rights reserved.
- -
- - Redistribution and use in source and binary forms, with or without
- - modification, are permitted provided that the following conditions
- - are met:
- - 1. Redistributions of source code must retain the above copyright
- - notice, this list of conditions and the following disclaimer.
- - 2. Redistributions in binary form must reproduce the above
- - copyright notice, this list of conditions and the following
- - disclaimer in the documentation and/or other materials
- - provided with the distribution.
- -
- - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY
- - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *====================================================================*/
- #ifndef LEPTONICA_REGUTILS_H
- #define LEPTONICA_REGUTILS_H
- /*
- * regutils.h
- *
- * Contains this regression test parameter packaging struct
- * struct L_RegParams
- *
- * The regression test utility allows you to write regression tests
- * that compare results with existing "golden files" and with
- * compiled in data.
- *
- * Regression tests can be called in three ways.
- * For example, for distance_reg:
- *
- * Case 1: distance_reg [generate]
- * This generates golden files in /tmp for the reg test.
- *
- * Case 2: distance_reg compare
- * This runs the test against the set of golden files. It
- * appends to 'outfile.txt' either "SUCCESS" or "FAILURE",
- * as well as the details of any parts of the test that failed.
- * It writes to a temporary file stream (fp)
- *
- * Case 3: distance_reg display
- * This runs the test but makes no comparison of the output
- * against the set of golden files. In addition, this displays
- * images and plots that are specified in the test under
- * control of the display variable. Display is enabled only
- * for this case. Using 'display' on the command line is optional.
- *
- * Regression tests follow the pattern given below. Tests are
- * automatically numbered sequentially, and it is convenient to
- * comment each with a number to keep track (for comparison tests
- * and for debugging). In an actual case, comparisons of pix and
- * of files can occur in any order. We give a specific order here
- * for clarity.
- *
- * L_REGPARAMS *rp; // holds data required by the test functions
- *
- * // Setup variables; optionally open stream
- * if (regTestSetup(argc, argv, &rp))
- * return 1;
- *
- * // Test pairs of generated pix for identity. This compares
- * // two pix; no golden file is generated.
- * regTestComparePix(rp, pix1, pix2); // 0
- *
- * // Test pairs of generated pix for similarity. This compares
- * // two pix; no golden file is generated. The last arg determines
- * // if stats are to be written to stderr.
- * regTestCompareSimilarPix(rp, pix1, pix2, 15, 0.001, 0); // 1
- *
- * // Generation of <newfile*> outputs and testing for identity
- * // These files can be anything, of course.
- * regTestCheckFile(rp, <newfile0>); // 2
- * regTestCheckFile(rp, <newfile1>); // 3
- *
- * // Test pairs of output golden files for identity. Here we
- * // are comparing golden files 2 and 3.
- * regTestCompareFiles(rp, 2, 3); // 4
- *
- * // "Write and check". This writes a pix using a canonical
- * // formulation for the local filename and either:
- * // case 1: generates a golden file
- * // case 2: compares the local file with a golden file
- * // case 3: generates local files and displays
- * // Here we write the pix compressed with png and jpeg, respectively;
- * // Then check against the golden file. The internal @index
- * // is incremented; it is embedded in the local filename and,
- * // if generating, in the golden file as well.
- * regTestWritePixAndCheck(rp, pix1, IFF_PNG); // 5
- * regTestWritePixAndCheck(rp, pix2, IFF_JFIF_JPEG); // 6
- *
- * // Display if reg test was called in 'display' mode
- * pixDisplayWithTitle(pix1, 100, 100, NULL, rp->display);
- *
- * // Clean up and output result
- * regTestCleanup(rp);
- */
- /*-------------------------------------------------------------------------*
- * Regression test parameter packer *
- *-------------------------------------------------------------------------*/
- struct L_RegParams
- {
- FILE *fp; /* stream to temporary output file for compare mode */
- char *testname; /* name of test, without '_reg' */
- char *tempfile; /* name of temp file for compare mode output */
- l_int32 mode; /* generate, compare or display */
- l_int32 index; /* index into saved files for this test; 0-based */
- l_int32 success; /* overall result of the test */
- l_int32 display; /* 1 if in display mode; 0 otherwise */
- L_TIMER tstart; /* marks beginning of the reg test */
- };
- typedef struct L_RegParams L_REGPARAMS;
- /* Running modes for the test */
- enum {
- L_REG_GENERATE = 0,
- L_REG_COMPARE = 1,
- L_REG_DISPLAY = 2
- };
- #endif /* LEPTONICA_REGUTILS_H */
|