The OpenVX conformance tests README
===================================

Building the conformance tests
------------------------------

The included CMake script provides support for linking the tests with your
pre-built OpenVX library binaries.

The following CMake variables are supported:

* OPENVX_USE_IX      - Compile export/import test case or not.

* OPENVX_USE_NN      - Compile neural network test case or not.

* OPENVX_USE_U1      - Compile binary image test cases or not.

* OPENVX_LIBRARIES   - semicolon separated list of shared/static libraries to link
                       with. If there are link order dependencies between your
                       libraries, then the libraries have to be specified in
                       correct order. Use absolute paths if your librarieas are
                       not in system path.

* OPENVX_INCLUDES    - absolute path to the OpenVX headers (excluding the "VX"
                       sub-folder).

* OPENVX_DEFINITIONS - semicolon separated list of preprocessor definitions
                       required to compile the suite for target platform.

* OPENVX_CFLAGS      - semicolon separated list of extra compiler flags
                       required to compile/link the suite for target platform.

Examples for Linux:

Use the following commands to build the test suite for the OpenVX baseline only:

    export OPENVX_DIR=<path to prebuilt OpenVX>
    cd <build dir>
    cmake \
        -DOPENVX_INCLUDES=$OPENVX_DIR/include \
        -DOPENVX_LIBRARIES=$OPENVX_DIR/lib/libopenvx.so\;$OPENVX_DIR/lib/libvxu.so\;pthread\;dl\;m\;rt \
        ../conformance_tests/
    cmake --build .


Use the following commands to build the test suite with import-export, neural
network and binary image KHR extensions activated:

    export OPENVX_DIR=<path to prebuilt OpenVX>
    cd <build dir>
    cmake \
        -DOPENVX_INCLUDES=$OPENVX_DIR/include \
        -DOPENVX_LIBRARIES=$OPENVX_DIR/lib/libopenvx.so\;$OPENVX_DIR/lib/libvxu.so\;pthread\;dl\;m\;rt \
        -DOPENVX_USE_IX=ON \
        -DOPENVX_USE_NN=ON \
        -DOPENVX_USE_U1=ON \
        ../conformance_tests/
    cmake --build .


Running the tests
-----------------

1. Set your VX_TEST_DATA_PATH environment variable to point to the
   "<conformance_tests>/test_data" directory.

2. For Linux/Mac OS X you might need to set the LD_LIBRARY_PATH

3. To run the tests:

    Usage:

    <build binary path>/vx_test_conformance [--filter=<filter>]
        [--run_disabled] [--global_context=0|1] [--check_any_size=0|1]
        [--show_test_duration=0|1] [--verbose] [--testid=<testid>]
        [--list_tests] [--quiet]

    Options:

        --filter=<filter> - selects only matching tests for execution

                 <filter> - specifies a filter as in Google Test: "a
                            ':'-separated list of wildcard patterns (called the
                            positive patterns) optionally followed by a '-' and
                            another ':'-separated pattern list (called the
                            negative patterns). A test matches the filter if and
                            only if it matches any of the positive patterns but
                            does not match any of the negative patterns."

        --run_disabled    - include a set of tests that are disabled by default,
                            which are not part of the conformance suite

        --global_context  - create new a vx_context for every test (default, "=0")
                            or execute all the tests inside single vx_context ("=1")

        --check_any_size  - use a restricted set of image sizes (usually VGA) for
                            testing nodes and immediate mode functions (default,
                            "=0") or include other sizes as well ("=1").
                            Conformance only requires the default, restricted set.

        --show_test_duration - enable/disable test time in the test log.  If
                               this option is not selected (default) no timing
                               information will be printed.

        --list_tests      - list the tests without running them

        --testid=<testid> - specifies report custom identifier for tests run

        --verbose         - enable extra output

        --quiet           - minimize extra/headers output


In order to pass the conformance test, the tests should be run with all the
options set to their default values, so you can run without specifying any
options, i.e., just:

     <build binary path>/vx_test_conformance

with no options.  The options are for information and debug purposes only.


Test data
---------

The test data directory contains:
- several natural images (VGA resolution) used as inputs for tested algorithms;
- generated reference output data provided by OpenCV 2.4.7 algorithms.

All the required test data is included in the conformance tests package.
You do NOT need to regenerate this data in most cases.

Refer to the README from the "test_data_generator" directory for more
information.
