xref: /aosp_15_r20/external/libvpx/test/tools_common.sh (revision fb1b10ab9aebc7c7068eedab379b749d7e3900be)
1*fb1b10abSAndroid Build Coastguard Worker#!/bin/sh
2*fb1b10abSAndroid Build Coastguard Worker##
3*fb1b10abSAndroid Build Coastguard Worker##  Copyright (c) 2014 The WebM project authors. All Rights Reserved.
4*fb1b10abSAndroid Build Coastguard Worker##
5*fb1b10abSAndroid Build Coastguard Worker##  Use of this source code is governed by a BSD-style license
6*fb1b10abSAndroid Build Coastguard Worker##  that can be found in the LICENSE file in the root of the source
7*fb1b10abSAndroid Build Coastguard Worker##  tree. An additional intellectual property rights grant can be found
8*fb1b10abSAndroid Build Coastguard Worker##  in the file PATENTS.  All contributing project authors may
9*fb1b10abSAndroid Build Coastguard Worker##  be found in the AUTHORS file in the root of the source tree.
10*fb1b10abSAndroid Build Coastguard Worker##
11*fb1b10abSAndroid Build Coastguard Worker##  This file contains shell code shared by test scripts for libvpx tools.
12*fb1b10abSAndroid Build Coastguard Worker
13*fb1b10abSAndroid Build Coastguard Worker# Use $VPX_TEST_TOOLS_COMMON_SH as a pseudo include guard.
14*fb1b10abSAndroid Build Coastguard Workerif [ -z "${VPX_TEST_TOOLS_COMMON_SH}" ]; then
15*fb1b10abSAndroid Build Coastguard WorkerVPX_TEST_TOOLS_COMMON_SH=included
16*fb1b10abSAndroid Build Coastguard Worker
17*fb1b10abSAndroid Build Coastguard Workerset -e
18*fb1b10abSAndroid Build Coastguard Workerdevnull='> /dev/null 2>&1'
19*fb1b10abSAndroid Build Coastguard WorkerVPX_TEST_PREFIX=""
20*fb1b10abSAndroid Build Coastguard Worker
21*fb1b10abSAndroid Build Coastguard Workerelog() {
22*fb1b10abSAndroid Build Coastguard Worker  echo "$@" 1>&2
23*fb1b10abSAndroid Build Coastguard Worker}
24*fb1b10abSAndroid Build Coastguard Worker
25*fb1b10abSAndroid Build Coastguard Workervlog() {
26*fb1b10abSAndroid Build Coastguard Worker  if [ "${VPX_TEST_VERBOSE_OUTPUT}" = "yes" ]; then
27*fb1b10abSAndroid Build Coastguard Worker    echo "$@"
28*fb1b10abSAndroid Build Coastguard Worker  fi
29*fb1b10abSAndroid Build Coastguard Worker}
30*fb1b10abSAndroid Build Coastguard Worker
31*fb1b10abSAndroid Build Coastguard Worker# Sets $VPX_TOOL_TEST to the name specified by positional parameter one.
32*fb1b10abSAndroid Build Coastguard Workertest_begin() {
33*fb1b10abSAndroid Build Coastguard Worker  VPX_TOOL_TEST="${1}"
34*fb1b10abSAndroid Build Coastguard Worker}
35*fb1b10abSAndroid Build Coastguard Worker
36*fb1b10abSAndroid Build Coastguard Worker# Clears the VPX_TOOL_TEST variable after confirming that $VPX_TOOL_TEST matches
37*fb1b10abSAndroid Build Coastguard Worker# positional parameter one.
38*fb1b10abSAndroid Build Coastguard Workertest_end() {
39*fb1b10abSAndroid Build Coastguard Worker  if [ "$1" != "${VPX_TOOL_TEST}" ]; then
40*fb1b10abSAndroid Build Coastguard Worker    echo "FAIL completed test mismatch!."
41*fb1b10abSAndroid Build Coastguard Worker    echo "  completed test: ${1}"
42*fb1b10abSAndroid Build Coastguard Worker    echo "  active test: ${VPX_TOOL_TEST}."
43*fb1b10abSAndroid Build Coastguard Worker    return 1
44*fb1b10abSAndroid Build Coastguard Worker  fi
45*fb1b10abSAndroid Build Coastguard Worker  VPX_TOOL_TEST='<unset>'
46*fb1b10abSAndroid Build Coastguard Worker}
47*fb1b10abSAndroid Build Coastguard Worker
48*fb1b10abSAndroid Build Coastguard Worker# Echoes the target configuration being tested.
49*fb1b10abSAndroid Build Coastguard Workertest_configuration_target() {
50*fb1b10abSAndroid Build Coastguard Worker  vpx_config_mk="${LIBVPX_CONFIG_PATH}/config.mk"
51*fb1b10abSAndroid Build Coastguard Worker  # Find the TOOLCHAIN line, split it using ':=' as the field separator, and
52*fb1b10abSAndroid Build Coastguard Worker  # print the last field to get the value. Then pipe the value to tr to consume
53*fb1b10abSAndroid Build Coastguard Worker  # any leading/trailing spaces while allowing tr to echo the output to stdout.
54*fb1b10abSAndroid Build Coastguard Worker  awk -F ':=' '/TOOLCHAIN/ { print $NF }' "${vpx_config_mk}" | tr -d ' '
55*fb1b10abSAndroid Build Coastguard Worker}
56*fb1b10abSAndroid Build Coastguard Worker
57*fb1b10abSAndroid Build Coastguard Worker# Trap function used for failure reports and tool output directory removal.
58*fb1b10abSAndroid Build Coastguard Worker# When the contents of $VPX_TOOL_TEST do not match the string '<unset>', reports
59*fb1b10abSAndroid Build Coastguard Worker# failure of test stored in $VPX_TOOL_TEST.
60*fb1b10abSAndroid Build Coastguard Workercleanup() {
61*fb1b10abSAndroid Build Coastguard Worker  if [ -n "${VPX_TOOL_TEST}" ] && [ "${VPX_TOOL_TEST}" != '<unset>' ]; then
62*fb1b10abSAndroid Build Coastguard Worker    echo "FAIL: $VPX_TOOL_TEST"
63*fb1b10abSAndroid Build Coastguard Worker  fi
64*fb1b10abSAndroid Build Coastguard Worker  if [ -n "${VPX_TEST_OUTPUT_DIR}" ] && [ -d "${VPX_TEST_OUTPUT_DIR}" ]; then
65*fb1b10abSAndroid Build Coastguard Worker    rm -rf "${VPX_TEST_OUTPUT_DIR}"
66*fb1b10abSAndroid Build Coastguard Worker  fi
67*fb1b10abSAndroid Build Coastguard Worker}
68*fb1b10abSAndroid Build Coastguard Worker
69*fb1b10abSAndroid Build Coastguard Worker# Echoes the git hash portion of the VERSION_STRING variable defined in
70*fb1b10abSAndroid Build Coastguard Worker# $LIBVPX_CONFIG_PATH/config.mk to stdout, or the version number string when
71*fb1b10abSAndroid Build Coastguard Worker# no git hash is contained in VERSION_STRING.
72*fb1b10abSAndroid Build Coastguard Workerconfig_hash() {
73*fb1b10abSAndroid Build Coastguard Worker  vpx_config_mk="${LIBVPX_CONFIG_PATH}/config.mk"
74*fb1b10abSAndroid Build Coastguard Worker  # Find VERSION_STRING line, split it with "-g" and print the last field to
75*fb1b10abSAndroid Build Coastguard Worker  # output the git hash to stdout.
76*fb1b10abSAndroid Build Coastguard Worker  vpx_version=$(awk -F -g '/VERSION_STRING/ {print $NF}' "${vpx_config_mk}")
77*fb1b10abSAndroid Build Coastguard Worker  # Handle two situations here:
78*fb1b10abSAndroid Build Coastguard Worker  # 1. The default case: $vpx_version is a git hash, so echo it unchanged.
79*fb1b10abSAndroid Build Coastguard Worker  # 2. When being run a non-dev tree, the -g portion is not present in the
80*fb1b10abSAndroid Build Coastguard Worker  #    version string: It's only the version number.
81*fb1b10abSAndroid Build Coastguard Worker  #    In this case $vpx_version is something like 'VERSION_STRING=v1.3.0', so
82*fb1b10abSAndroid Build Coastguard Worker  #    we echo only what is after the '='.
83*fb1b10abSAndroid Build Coastguard Worker  echo "${vpx_version##*=}"
84*fb1b10abSAndroid Build Coastguard Worker}
85*fb1b10abSAndroid Build Coastguard Worker
86*fb1b10abSAndroid Build Coastguard Worker# Echoes the short form of the current git hash.
87*fb1b10abSAndroid Build Coastguard Workercurrent_hash() {
88*fb1b10abSAndroid Build Coastguard Worker  if git --version > /dev/null 2>&1; then
89*fb1b10abSAndroid Build Coastguard Worker    (cd "$(dirname "${0}")"
90*fb1b10abSAndroid Build Coastguard Worker    git rev-parse --short HEAD)
91*fb1b10abSAndroid Build Coastguard Worker  else
92*fb1b10abSAndroid Build Coastguard Worker    # Return the config hash if git is unavailable: Fail silently, git hashes
93*fb1b10abSAndroid Build Coastguard Worker    # are used only for warnings.
94*fb1b10abSAndroid Build Coastguard Worker    config_hash
95*fb1b10abSAndroid Build Coastguard Worker  fi
96*fb1b10abSAndroid Build Coastguard Worker}
97*fb1b10abSAndroid Build Coastguard Worker
98*fb1b10abSAndroid Build Coastguard Worker# Echoes warnings to stdout when git hash in vpx_config.h does not match the
99*fb1b10abSAndroid Build Coastguard Worker# current git hash.
100*fb1b10abSAndroid Build Coastguard Workercheck_git_hashes() {
101*fb1b10abSAndroid Build Coastguard Worker  hash_at_configure_time=$(config_hash)
102*fb1b10abSAndroid Build Coastguard Worker  hash_now=$(current_hash)
103*fb1b10abSAndroid Build Coastguard Worker
104*fb1b10abSAndroid Build Coastguard Worker  if [ "${hash_at_configure_time}" != "${hash_now}" ]; then
105*fb1b10abSAndroid Build Coastguard Worker    echo "Warning: git hash has changed since last configure."
106*fb1b10abSAndroid Build Coastguard Worker  fi
107*fb1b10abSAndroid Build Coastguard Worker}
108*fb1b10abSAndroid Build Coastguard Worker
109*fb1b10abSAndroid Build Coastguard Worker# $1 is the name of an environment variable containing a directory name to
110*fb1b10abSAndroid Build Coastguard Worker# test.
111*fb1b10abSAndroid Build Coastguard Workertest_env_var_dir() {
112*fb1b10abSAndroid Build Coastguard Worker  local dir=$(eval echo "\${$1}")
113*fb1b10abSAndroid Build Coastguard Worker  if [ ! -d "${dir}" ]; then
114*fb1b10abSAndroid Build Coastguard Worker    elog "'${dir}': No such directory"
115*fb1b10abSAndroid Build Coastguard Worker    elog "The $1 environment variable must be set to a valid directory."
116*fb1b10abSAndroid Build Coastguard Worker    return 1
117*fb1b10abSAndroid Build Coastguard Worker  fi
118*fb1b10abSAndroid Build Coastguard Worker}
119*fb1b10abSAndroid Build Coastguard Worker
120*fb1b10abSAndroid Build Coastguard Worker# This script requires that the LIBVPX_BIN_PATH, LIBVPX_CONFIG_PATH, and
121*fb1b10abSAndroid Build Coastguard Worker# LIBVPX_TEST_DATA_PATH variables are in the environment: Confirm that
122*fb1b10abSAndroid Build Coastguard Worker# the variables are set and that they all evaluate to directory paths.
123*fb1b10abSAndroid Build Coastguard Workerverify_vpx_test_environment() {
124*fb1b10abSAndroid Build Coastguard Worker  test_env_var_dir "LIBVPX_BIN_PATH" \
125*fb1b10abSAndroid Build Coastguard Worker    && test_env_var_dir "LIBVPX_CONFIG_PATH" \
126*fb1b10abSAndroid Build Coastguard Worker    && test_env_var_dir "LIBVPX_TEST_DATA_PATH"
127*fb1b10abSAndroid Build Coastguard Worker}
128*fb1b10abSAndroid Build Coastguard Worker
129*fb1b10abSAndroid Build Coastguard Worker# Greps vpx_config.h in LIBVPX_CONFIG_PATH for positional parameter one, which
130*fb1b10abSAndroid Build Coastguard Worker# should be a LIBVPX preprocessor flag. Echoes yes to stdout when the feature
131*fb1b10abSAndroid Build Coastguard Worker# is available.
132*fb1b10abSAndroid Build Coastguard Workervpx_config_option_enabled() {
133*fb1b10abSAndroid Build Coastguard Worker  vpx_config_option="${1}"
134*fb1b10abSAndroid Build Coastguard Worker  vpx_config_file="${LIBVPX_CONFIG_PATH}/vpx_config.h"
135*fb1b10abSAndroid Build Coastguard Worker  config_line=$(grep "${vpx_config_option}" "${vpx_config_file}")
136*fb1b10abSAndroid Build Coastguard Worker  if echo "${config_line}" | grep -E -q '1$'; then
137*fb1b10abSAndroid Build Coastguard Worker    echo yes
138*fb1b10abSAndroid Build Coastguard Worker  fi
139*fb1b10abSAndroid Build Coastguard Worker}
140*fb1b10abSAndroid Build Coastguard Worker
141*fb1b10abSAndroid Build Coastguard Worker# Echoes yes when output of test_configuration_target() contains win32 or win64.
142*fb1b10abSAndroid Build Coastguard Workeris_windows_target() {
143*fb1b10abSAndroid Build Coastguard Worker  if test_configuration_target \
144*fb1b10abSAndroid Build Coastguard Worker     | grep -q -e win32 -e win64 > /dev/null 2>&1; then
145*fb1b10abSAndroid Build Coastguard Worker    echo yes
146*fb1b10abSAndroid Build Coastguard Worker  fi
147*fb1b10abSAndroid Build Coastguard Worker}
148*fb1b10abSAndroid Build Coastguard Worker
149*fb1b10abSAndroid Build Coastguard Worker# Echoes path to $1 when it's executable and exists in ${LIBVPX_BIN_PATH}, or an
150*fb1b10abSAndroid Build Coastguard Worker# empty string. Caller is responsible for testing the string once the function
151*fb1b10abSAndroid Build Coastguard Worker# returns.
152*fb1b10abSAndroid Build Coastguard Workervpx_tool_path() {
153*fb1b10abSAndroid Build Coastguard Worker  local tool_name="$1"
154*fb1b10abSAndroid Build Coastguard Worker  local tool_path="${LIBVPX_BIN_PATH}/${tool_name}${VPX_TEST_EXE_SUFFIX}"
155*fb1b10abSAndroid Build Coastguard Worker  if [ ! -x "${tool_path}" ]; then
156*fb1b10abSAndroid Build Coastguard Worker    # Try one directory up: when running via examples.sh the tool could be in
157*fb1b10abSAndroid Build Coastguard Worker    # the parent directory of $LIBVPX_BIN_PATH.
158*fb1b10abSAndroid Build Coastguard Worker    tool_path="${LIBVPX_BIN_PATH}/../${tool_name}${VPX_TEST_EXE_SUFFIX}"
159*fb1b10abSAndroid Build Coastguard Worker  fi
160*fb1b10abSAndroid Build Coastguard Worker
161*fb1b10abSAndroid Build Coastguard Worker  if [ ! -x "${tool_path}" ]; then
162*fb1b10abSAndroid Build Coastguard Worker    tool_path=""
163*fb1b10abSAndroid Build Coastguard Worker  fi
164*fb1b10abSAndroid Build Coastguard Worker  echo "${tool_path}"
165*fb1b10abSAndroid Build Coastguard Worker}
166*fb1b10abSAndroid Build Coastguard Worker
167*fb1b10abSAndroid Build Coastguard Worker# Echoes yes to stdout when the file named by positional parameter one exists
168*fb1b10abSAndroid Build Coastguard Worker# in LIBVPX_BIN_PATH, and is executable.
169*fb1b10abSAndroid Build Coastguard Workervpx_tool_available() {
170*fb1b10abSAndroid Build Coastguard Worker  local tool_name="$1"
171*fb1b10abSAndroid Build Coastguard Worker  local tool="${LIBVPX_BIN_PATH}/${tool_name}${VPX_TEST_EXE_SUFFIX}"
172*fb1b10abSAndroid Build Coastguard Worker  [ -x "${tool}" ] && echo yes
173*fb1b10abSAndroid Build Coastguard Worker}
174*fb1b10abSAndroid Build Coastguard Worker
175*fb1b10abSAndroid Build Coastguard Worker# Echoes yes to stdout when vpx_config_option_enabled() reports yes for
176*fb1b10abSAndroid Build Coastguard Worker# CONFIG_VP8_DECODER.
177*fb1b10abSAndroid Build Coastguard Workervp8_decode_available() {
178*fb1b10abSAndroid Build Coastguard Worker  [ "$(vpx_config_option_enabled CONFIG_VP8_DECODER)" = "yes" ] && echo yes
179*fb1b10abSAndroid Build Coastguard Worker}
180*fb1b10abSAndroid Build Coastguard Worker
181*fb1b10abSAndroid Build Coastguard Worker# Echoes yes to stdout when vpx_config_option_enabled() reports yes for
182*fb1b10abSAndroid Build Coastguard Worker# CONFIG_VP8_ENCODER.
183*fb1b10abSAndroid Build Coastguard Workervp8_encode_available() {
184*fb1b10abSAndroid Build Coastguard Worker  [ "$(vpx_config_option_enabled CONFIG_VP8_ENCODER)" = "yes" ] && echo yes
185*fb1b10abSAndroid Build Coastguard Worker}
186*fb1b10abSAndroid Build Coastguard Worker
187*fb1b10abSAndroid Build Coastguard Worker# Echoes yes to stdout when vpx_config_option_enabled() reports yes for
188*fb1b10abSAndroid Build Coastguard Worker# CONFIG_VP9_DECODER.
189*fb1b10abSAndroid Build Coastguard Workervp9_decode_available() {
190*fb1b10abSAndroid Build Coastguard Worker  [ "$(vpx_config_option_enabled CONFIG_VP9_DECODER)" = "yes" ] && echo yes
191*fb1b10abSAndroid Build Coastguard Worker}
192*fb1b10abSAndroid Build Coastguard Worker
193*fb1b10abSAndroid Build Coastguard Worker# Echoes yes to stdout when vpx_config_option_enabled() reports yes for
194*fb1b10abSAndroid Build Coastguard Worker# CONFIG_VP9_ENCODER.
195*fb1b10abSAndroid Build Coastguard Workervp9_encode_available() {
196*fb1b10abSAndroid Build Coastguard Worker  [ "$(vpx_config_option_enabled CONFIG_VP9_ENCODER)" = "yes" ] && echo yes
197*fb1b10abSAndroid Build Coastguard Worker}
198*fb1b10abSAndroid Build Coastguard Worker
199*fb1b10abSAndroid Build Coastguard Worker# Echoes yes to stdout when vpx_config_option_enabled() reports yes for
200*fb1b10abSAndroid Build Coastguard Worker# CONFIG_WEBM_IO.
201*fb1b10abSAndroid Build Coastguard Workerwebm_io_available() {
202*fb1b10abSAndroid Build Coastguard Worker  [ "$(vpx_config_option_enabled CONFIG_WEBM_IO)" = "yes" ] && echo yes
203*fb1b10abSAndroid Build Coastguard Worker}
204*fb1b10abSAndroid Build Coastguard Worker
205*fb1b10abSAndroid Build Coastguard Worker# Filters strings from $1 using the filter specified by $2. Filter behavior
206*fb1b10abSAndroid Build Coastguard Worker# depends on the presence of $3. When $3 is present, strings that match the
207*fb1b10abSAndroid Build Coastguard Worker# filter are excluded. When $3 is omitted, strings matching the filter are
208*fb1b10abSAndroid Build Coastguard Worker# included.
209*fb1b10abSAndroid Build Coastguard Worker# The filtered result is echoed to stdout.
210*fb1b10abSAndroid Build Coastguard Workerfilter_strings() {
211*fb1b10abSAndroid Build Coastguard Worker  strings=${1}
212*fb1b10abSAndroid Build Coastguard Worker  filter=${2}
213*fb1b10abSAndroid Build Coastguard Worker  exclude=${3}
214*fb1b10abSAndroid Build Coastguard Worker
215*fb1b10abSAndroid Build Coastguard Worker  if [ -n "${exclude}" ]; then
216*fb1b10abSAndroid Build Coastguard Worker    # When positional parameter three exists the caller wants to remove strings.
217*fb1b10abSAndroid Build Coastguard Worker    # Tell grep to invert matches using the -v argument.
218*fb1b10abSAndroid Build Coastguard Worker    exclude='-v'
219*fb1b10abSAndroid Build Coastguard Worker  else
220*fb1b10abSAndroid Build Coastguard Worker    unset exclude
221*fb1b10abSAndroid Build Coastguard Worker  fi
222*fb1b10abSAndroid Build Coastguard Worker
223*fb1b10abSAndroid Build Coastguard Worker  if [ -n "${filter}" ]; then
224*fb1b10abSAndroid Build Coastguard Worker    for s in ${strings}; do
225*fb1b10abSAndroid Build Coastguard Worker      if echo "${s}" | grep -E -q ${exclude} "${filter}" > /dev/null 2>&1; then
226*fb1b10abSAndroid Build Coastguard Worker        filtered_strings="${filtered_strings} ${s}"
227*fb1b10abSAndroid Build Coastguard Worker      fi
228*fb1b10abSAndroid Build Coastguard Worker    done
229*fb1b10abSAndroid Build Coastguard Worker  else
230*fb1b10abSAndroid Build Coastguard Worker    filtered_strings="${strings}"
231*fb1b10abSAndroid Build Coastguard Worker  fi
232*fb1b10abSAndroid Build Coastguard Worker  echo "${filtered_strings}"
233*fb1b10abSAndroid Build Coastguard Worker}
234*fb1b10abSAndroid Build Coastguard Worker
235*fb1b10abSAndroid Build Coastguard Worker# Runs user test functions passed via positional parameters one and two.
236*fb1b10abSAndroid Build Coastguard Worker# Functions in positional parameter one are treated as environment verification
237*fb1b10abSAndroid Build Coastguard Worker# functions and are run unconditionally. Functions in positional parameter two
238*fb1b10abSAndroid Build Coastguard Worker# are run according to the rules specified in vpx_test_usage().
239*fb1b10abSAndroid Build Coastguard Workerrun_tests() {
240*fb1b10abSAndroid Build Coastguard Worker  local env_tests="verify_vpx_test_environment $1"
241*fb1b10abSAndroid Build Coastguard Worker  local tests_to_filter="$2"
242*fb1b10abSAndroid Build Coastguard Worker  local test_name="${VPX_TEST_NAME}"
243*fb1b10abSAndroid Build Coastguard Worker
244*fb1b10abSAndroid Build Coastguard Worker  if [ -z "${test_name}" ]; then
245*fb1b10abSAndroid Build Coastguard Worker    test_name="$(basename "${0%.*}")"
246*fb1b10abSAndroid Build Coastguard Worker  fi
247*fb1b10abSAndroid Build Coastguard Worker
248*fb1b10abSAndroid Build Coastguard Worker  if [ "${VPX_TEST_RUN_DISABLED_TESTS}" != "yes" ]; then
249*fb1b10abSAndroid Build Coastguard Worker    # Filter out DISABLED tests.
250*fb1b10abSAndroid Build Coastguard Worker    tests_to_filter=$(filter_strings "${tests_to_filter}" ^DISABLED exclude)
251*fb1b10abSAndroid Build Coastguard Worker  fi
252*fb1b10abSAndroid Build Coastguard Worker
253*fb1b10abSAndroid Build Coastguard Worker  if [ -n "${VPX_TEST_FILTER}" ]; then
254*fb1b10abSAndroid Build Coastguard Worker    # Remove tests not matching the user's filter.
255*fb1b10abSAndroid Build Coastguard Worker    tests_to_filter=$(filter_strings "${tests_to_filter}" ${VPX_TEST_FILTER})
256*fb1b10abSAndroid Build Coastguard Worker  fi
257*fb1b10abSAndroid Build Coastguard Worker
258*fb1b10abSAndroid Build Coastguard Worker  # User requested test listing: Dump test names and return.
259*fb1b10abSAndroid Build Coastguard Worker  if [ "${VPX_TEST_LIST_TESTS}" = "yes" ]; then
260*fb1b10abSAndroid Build Coastguard Worker    for test_name in $tests_to_filter; do
261*fb1b10abSAndroid Build Coastguard Worker      echo ${test_name}
262*fb1b10abSAndroid Build Coastguard Worker    done
263*fb1b10abSAndroid Build Coastguard Worker    return
264*fb1b10abSAndroid Build Coastguard Worker  fi
265*fb1b10abSAndroid Build Coastguard Worker
266*fb1b10abSAndroid Build Coastguard Worker  # Don't bother with the environment tests if everything else was disabled.
267*fb1b10abSAndroid Build Coastguard Worker  [ -z "${tests_to_filter}" ] && return
268*fb1b10abSAndroid Build Coastguard Worker
269*fb1b10abSAndroid Build Coastguard Worker  # Combine environment and actual tests.
270*fb1b10abSAndroid Build Coastguard Worker  local tests_to_run="${env_tests} ${tests_to_filter}"
271*fb1b10abSAndroid Build Coastguard Worker
272*fb1b10abSAndroid Build Coastguard Worker  check_git_hashes
273*fb1b10abSAndroid Build Coastguard Worker
274*fb1b10abSAndroid Build Coastguard Worker  # Run tests.
275*fb1b10abSAndroid Build Coastguard Worker  for test in ${tests_to_run}; do
276*fb1b10abSAndroid Build Coastguard Worker    test_begin "${test}"
277*fb1b10abSAndroid Build Coastguard Worker    vlog "  RUN  ${test}"
278*fb1b10abSAndroid Build Coastguard Worker    "${test}"
279*fb1b10abSAndroid Build Coastguard Worker    vlog "  PASS ${test}"
280*fb1b10abSAndroid Build Coastguard Worker    test_end "${test}"
281*fb1b10abSAndroid Build Coastguard Worker  done
282*fb1b10abSAndroid Build Coastguard Worker
283*fb1b10abSAndroid Build Coastguard Worker  # C vs SIMD tests are run for x86 32-bit, 64-bit and ARM platform
284*fb1b10abSAndroid Build Coastguard Worker  if [ "${test_name}" = "vp9_c_vs_simd_encode" ]; then
285*fb1b10abSAndroid Build Coastguard Worker    local tested_config="$(current_hash)"
286*fb1b10abSAndroid Build Coastguard Worker  else
287*fb1b10abSAndroid Build Coastguard Worker    local tested_config="$(test_configuration_target) @ $(current_hash)"
288*fb1b10abSAndroid Build Coastguard Worker  fi
289*fb1b10abSAndroid Build Coastguard Worker  echo "${test_name}: Done, all tests pass for ${tested_config}."
290*fb1b10abSAndroid Build Coastguard Worker}
291*fb1b10abSAndroid Build Coastguard Worker
292*fb1b10abSAndroid Build Coastguard Workervpx_test_usage() {
293*fb1b10abSAndroid Build Coastguard Workercat << EOF
294*fb1b10abSAndroid Build Coastguard Worker  Usage: ${0##*/} [arguments]
295*fb1b10abSAndroid Build Coastguard Worker    --bin-path <path to libvpx binaries directory>
296*fb1b10abSAndroid Build Coastguard Worker    --config-path <path to libvpx config directory>
297*fb1b10abSAndroid Build Coastguard Worker    --filter <filter>: User test filter. Only tests matching filter are run.
298*fb1b10abSAndroid Build Coastguard Worker    --run-disabled-tests: Run disabled tests.
299*fb1b10abSAndroid Build Coastguard Worker    --help: Display this message and exit.
300*fb1b10abSAndroid Build Coastguard Worker    --test-data-path <path to libvpx test data directory>
301*fb1b10abSAndroid Build Coastguard Worker    --show-program-output: Shows output from all programs being tested.
302*fb1b10abSAndroid Build Coastguard Worker    --prefix: Allows for a user specified prefix to be inserted before all test
303*fb1b10abSAndroid Build Coastguard Worker              programs. Grants the ability, for example, to run test programs
304*fb1b10abSAndroid Build Coastguard Worker              within valgrind.
305*fb1b10abSAndroid Build Coastguard Worker    --list-tests: List all test names and exit without actually running tests.
306*fb1b10abSAndroid Build Coastguard Worker    --verbose: Verbose output.
307*fb1b10abSAndroid Build Coastguard Worker
308*fb1b10abSAndroid Build Coastguard Worker    When the --bin-path option is not specified the script attempts to use
309*fb1b10abSAndroid Build Coastguard Worker    \$LIBVPX_BIN_PATH and then the current directory.
310*fb1b10abSAndroid Build Coastguard Worker
311*fb1b10abSAndroid Build Coastguard Worker    When the --config-path option is not specified the script attempts to use
312*fb1b10abSAndroid Build Coastguard Worker    \$LIBVPX_CONFIG_PATH and then the current directory.
313*fb1b10abSAndroid Build Coastguard Worker
314*fb1b10abSAndroid Build Coastguard Worker    When the -test-data-path option is not specified the script attempts to use
315*fb1b10abSAndroid Build Coastguard Worker    \$LIBVPX_TEST_DATA_PATH and then the current directory.
316*fb1b10abSAndroid Build Coastguard WorkerEOF
317*fb1b10abSAndroid Build Coastguard Worker}
318*fb1b10abSAndroid Build Coastguard Worker
319*fb1b10abSAndroid Build Coastguard Worker# Returns non-zero (failure) when required environment variables are empty
320*fb1b10abSAndroid Build Coastguard Worker# strings.
321*fb1b10abSAndroid Build Coastguard Workervpx_test_check_environment() {
322*fb1b10abSAndroid Build Coastguard Worker  if [ -z "${LIBVPX_BIN_PATH}" ] || \
323*fb1b10abSAndroid Build Coastguard Worker     [ -z "${LIBVPX_CONFIG_PATH}" ] || \
324*fb1b10abSAndroid Build Coastguard Worker     [ -z "${LIBVPX_TEST_DATA_PATH}" ]; then
325*fb1b10abSAndroid Build Coastguard Worker    return 1
326*fb1b10abSAndroid Build Coastguard Worker  fi
327*fb1b10abSAndroid Build Coastguard Worker}
328*fb1b10abSAndroid Build Coastguard Worker
329*fb1b10abSAndroid Build Coastguard Worker# Parse the command line.
330*fb1b10abSAndroid Build Coastguard Workerwhile [ -n "$1" ]; do
331*fb1b10abSAndroid Build Coastguard Worker  case "$1" in
332*fb1b10abSAndroid Build Coastguard Worker    --bin-path)
333*fb1b10abSAndroid Build Coastguard Worker      LIBVPX_BIN_PATH="$2"
334*fb1b10abSAndroid Build Coastguard Worker      shift
335*fb1b10abSAndroid Build Coastguard Worker      ;;
336*fb1b10abSAndroid Build Coastguard Worker    --config-path)
337*fb1b10abSAndroid Build Coastguard Worker      LIBVPX_CONFIG_PATH="$2"
338*fb1b10abSAndroid Build Coastguard Worker      shift
339*fb1b10abSAndroid Build Coastguard Worker      ;;
340*fb1b10abSAndroid Build Coastguard Worker    --filter)
341*fb1b10abSAndroid Build Coastguard Worker      VPX_TEST_FILTER="$2"
342*fb1b10abSAndroid Build Coastguard Worker      shift
343*fb1b10abSAndroid Build Coastguard Worker      ;;
344*fb1b10abSAndroid Build Coastguard Worker    --run-disabled-tests)
345*fb1b10abSAndroid Build Coastguard Worker      VPX_TEST_RUN_DISABLED_TESTS=yes
346*fb1b10abSAndroid Build Coastguard Worker      ;;
347*fb1b10abSAndroid Build Coastguard Worker    --help)
348*fb1b10abSAndroid Build Coastguard Worker      vpx_test_usage
349*fb1b10abSAndroid Build Coastguard Worker      exit
350*fb1b10abSAndroid Build Coastguard Worker      ;;
351*fb1b10abSAndroid Build Coastguard Worker    --test-data-path)
352*fb1b10abSAndroid Build Coastguard Worker      LIBVPX_TEST_DATA_PATH="$2"
353*fb1b10abSAndroid Build Coastguard Worker      shift
354*fb1b10abSAndroid Build Coastguard Worker      ;;
355*fb1b10abSAndroid Build Coastguard Worker    --prefix)
356*fb1b10abSAndroid Build Coastguard Worker      VPX_TEST_PREFIX="$2"
357*fb1b10abSAndroid Build Coastguard Worker      shift
358*fb1b10abSAndroid Build Coastguard Worker      ;;
359*fb1b10abSAndroid Build Coastguard Worker    --verbose)
360*fb1b10abSAndroid Build Coastguard Worker      VPX_TEST_VERBOSE_OUTPUT=yes
361*fb1b10abSAndroid Build Coastguard Worker      ;;
362*fb1b10abSAndroid Build Coastguard Worker    --show-program-output)
363*fb1b10abSAndroid Build Coastguard Worker      devnull=
364*fb1b10abSAndroid Build Coastguard Worker      ;;
365*fb1b10abSAndroid Build Coastguard Worker    --list-tests)
366*fb1b10abSAndroid Build Coastguard Worker      VPX_TEST_LIST_TESTS=yes
367*fb1b10abSAndroid Build Coastguard Worker      ;;
368*fb1b10abSAndroid Build Coastguard Worker    *)
369*fb1b10abSAndroid Build Coastguard Worker      vpx_test_usage
370*fb1b10abSAndroid Build Coastguard Worker      exit 1
371*fb1b10abSAndroid Build Coastguard Worker      ;;
372*fb1b10abSAndroid Build Coastguard Worker  esac
373*fb1b10abSAndroid Build Coastguard Worker  shift
374*fb1b10abSAndroid Build Coastguard Workerdone
375*fb1b10abSAndroid Build Coastguard Worker
376*fb1b10abSAndroid Build Coastguard Worker# Handle running the tests from a build directory without arguments when running
377*fb1b10abSAndroid Build Coastguard Worker# the tests on *nix/macosx.
378*fb1b10abSAndroid Build Coastguard WorkerLIBVPX_BIN_PATH="${LIBVPX_BIN_PATH:-.}"
379*fb1b10abSAndroid Build Coastguard WorkerLIBVPX_CONFIG_PATH="${LIBVPX_CONFIG_PATH:-.}"
380*fb1b10abSAndroid Build Coastguard WorkerLIBVPX_TEST_DATA_PATH="${LIBVPX_TEST_DATA_PATH:-.}"
381*fb1b10abSAndroid Build Coastguard Worker
382*fb1b10abSAndroid Build Coastguard Worker# Create a temporary directory for output files, and a trap to clean it up.
383*fb1b10abSAndroid Build Coastguard Workerif [ -n "${TMPDIR}" ]; then
384*fb1b10abSAndroid Build Coastguard Worker  VPX_TEST_TEMP_ROOT="${TMPDIR}"
385*fb1b10abSAndroid Build Coastguard Workerelif [ -n "${TEMPDIR}" ]; then
386*fb1b10abSAndroid Build Coastguard Worker  VPX_TEST_TEMP_ROOT="${TEMPDIR}"
387*fb1b10abSAndroid Build Coastguard Workerelse
388*fb1b10abSAndroid Build Coastguard Worker  VPX_TEST_TEMP_ROOT=/tmp
389*fb1b10abSAndroid Build Coastguard Workerfi
390*fb1b10abSAndroid Build Coastguard Worker
391*fb1b10abSAndroid Build Coastguard WorkerVPX_TEST_OUTPUT_DIR="${VPX_TEST_TEMP_ROOT}/vpx_test_$$"
392*fb1b10abSAndroid Build Coastguard Worker
393*fb1b10abSAndroid Build Coastguard Workerif ! mkdir -p "${VPX_TEST_OUTPUT_DIR}" || \
394*fb1b10abSAndroid Build Coastguard Worker   [ ! -d "${VPX_TEST_OUTPUT_DIR}" ]; then
395*fb1b10abSAndroid Build Coastguard Worker  echo "${0##*/}: Cannot create output directory, giving up."
396*fb1b10abSAndroid Build Coastguard Worker  echo "${0##*/}:   VPX_TEST_OUTPUT_DIR=${VPX_TEST_OUTPUT_DIR}"
397*fb1b10abSAndroid Build Coastguard Worker  exit 1
398*fb1b10abSAndroid Build Coastguard Workerfi
399*fb1b10abSAndroid Build Coastguard Worker
400*fb1b10abSAndroid Build Coastguard Workerif [ "$(is_windows_target)" = "yes" ]; then
401*fb1b10abSAndroid Build Coastguard Worker  VPX_TEST_EXE_SUFFIX=".exe"
402*fb1b10abSAndroid Build Coastguard Workerfi
403*fb1b10abSAndroid Build Coastguard Worker
404*fb1b10abSAndroid Build Coastguard Worker# Variables shared by tests.
405*fb1b10abSAndroid Build Coastguard WorkerVP8_IVF_FILE="${LIBVPX_TEST_DATA_PATH}/vp80-00-comprehensive-001.ivf"
406*fb1b10abSAndroid Build Coastguard WorkerVP9_IVF_FILE="${LIBVPX_TEST_DATA_PATH}/vp90-2-09-subpixel-00.ivf"
407*fb1b10abSAndroid Build Coastguard Worker
408*fb1b10abSAndroid Build Coastguard WorkerVP9_WEBM_FILE="${LIBVPX_TEST_DATA_PATH}/vp90-2-00-quantizer-00.webm"
409*fb1b10abSAndroid Build Coastguard WorkerVP9_FPM_WEBM_FILE="${LIBVPX_TEST_DATA_PATH}/vp90-2-07-frame_parallel-1.webm"
410*fb1b10abSAndroid Build Coastguard WorkerVP9_LT_50_FRAMES_WEBM_FILE="${LIBVPX_TEST_DATA_PATH}/vp90-2-02-size-32x08.webm"
411*fb1b10abSAndroid Build Coastguard Worker
412*fb1b10abSAndroid Build Coastguard WorkerVP9_RAW_FILE="${LIBVPX_TEST_DATA_PATH}/crbug-1539.rawfile"
413*fb1b10abSAndroid Build Coastguard Worker
414*fb1b10abSAndroid Build Coastguard WorkerYUV_RAW_INPUT="${LIBVPX_TEST_DATA_PATH}/hantro_collage_w352h288.yuv"
415*fb1b10abSAndroid Build Coastguard WorkerYUV_RAW_INPUT_WIDTH=352
416*fb1b10abSAndroid Build Coastguard WorkerYUV_RAW_INPUT_HEIGHT=288
417*fb1b10abSAndroid Build Coastguard Worker
418*fb1b10abSAndroid Build Coastguard WorkerY4M_NOSQ_PAR_INPUT="${LIBVPX_TEST_DATA_PATH}/park_joy_90p_8_420_a10-1.y4m"
419*fb1b10abSAndroid Build Coastguard WorkerY4M_720P_INPUT="${LIBVPX_TEST_DATA_PATH}/niklas_1280_720_30.y4m"
420*fb1b10abSAndroid Build Coastguard WorkerY4M_720P_INPUT_WIDTH=1280
421*fb1b10abSAndroid Build Coastguard WorkerY4M_720P_INPUT_HEIGHT=720
422*fb1b10abSAndroid Build Coastguard Worker
423*fb1b10abSAndroid Build Coastguard Worker# Setup a trap function to clean up after tests complete.
424*fb1b10abSAndroid Build Coastguard Workertrap cleanup EXIT
425*fb1b10abSAndroid Build Coastguard Worker
426*fb1b10abSAndroid Build Coastguard Workervlog "$(basename "${0%.*}") test configuration:
427*fb1b10abSAndroid Build Coastguard Worker  LIBVPX_BIN_PATH=${LIBVPX_BIN_PATH}
428*fb1b10abSAndroid Build Coastguard Worker  LIBVPX_CONFIG_PATH=${LIBVPX_CONFIG_PATH}
429*fb1b10abSAndroid Build Coastguard Worker  LIBVPX_TEST_DATA_PATH=${LIBVPX_TEST_DATA_PATH}
430*fb1b10abSAndroid Build Coastguard Worker  VP8_IVF_FILE=${VP8_IVF_FILE}
431*fb1b10abSAndroid Build Coastguard Worker  VP9_IVF_FILE=${VP9_IVF_FILE}
432*fb1b10abSAndroid Build Coastguard Worker  VP9_WEBM_FILE=${VP9_WEBM_FILE}
433*fb1b10abSAndroid Build Coastguard Worker  VPX_TEST_EXE_SUFFIX=${VPX_TEST_EXE_SUFFIX}
434*fb1b10abSAndroid Build Coastguard Worker  VPX_TEST_FILTER=${VPX_TEST_FILTER}
435*fb1b10abSAndroid Build Coastguard Worker  VPX_TEST_LIST_TESTS=${VPX_TEST_LIST_TESTS}
436*fb1b10abSAndroid Build Coastguard Worker  VPX_TEST_OUTPUT_DIR=${VPX_TEST_OUTPUT_DIR}
437*fb1b10abSAndroid Build Coastguard Worker  VPX_TEST_PREFIX=${VPX_TEST_PREFIX}
438*fb1b10abSAndroid Build Coastguard Worker  VPX_TEST_RUN_DISABLED_TESTS=${VPX_TEST_RUN_DISABLED_TESTS}
439*fb1b10abSAndroid Build Coastguard Worker  VPX_TEST_SHOW_PROGRAM_OUTPUT=${VPX_TEST_SHOW_PROGRAM_OUTPUT}
440*fb1b10abSAndroid Build Coastguard Worker  VPX_TEST_TEMP_ROOT=${VPX_TEST_TEMP_ROOT}
441*fb1b10abSAndroid Build Coastguard Worker  VPX_TEST_VERBOSE_OUTPUT=${VPX_TEST_VERBOSE_OUTPUT}
442*fb1b10abSAndroid Build Coastguard Worker  YUV_RAW_INPUT=${YUV_RAW_INPUT}
443*fb1b10abSAndroid Build Coastguard Worker  YUV_RAW_INPUT_WIDTH=${YUV_RAW_INPUT_WIDTH}
444*fb1b10abSAndroid Build Coastguard Worker  YUV_RAW_INPUT_HEIGHT=${YUV_RAW_INPUT_HEIGHT}
445*fb1b10abSAndroid Build Coastguard Worker  Y4M_NOSQ_PAR_INPUT=${Y4M_NOSQ_PAR_INPUT}"
446*fb1b10abSAndroid Build Coastguard Worker
447*fb1b10abSAndroid Build Coastguard Workerfi  # End $VPX_TEST_TOOLS_COMMON_SH pseudo include guard.
448