Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Run C++ tests on CI with run_test.py #99956

Closed
wants to merge 40 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
40 commits
Select commit Hold shift + click to select a range
e83019f
Run libtorch C++ tests
huydhn Apr 25, 2023
c67cba0
Fix wrong test name
huydhn Apr 25, 2023
0c11b24
Merge branch 'main' into pytest-cpp-ci
huydhn Apr 26, 2023
fc97201
Switch all Linux tests
huydhn Apr 26, 2023
f8c7d34
Try this out on Windows too
huydhn Apr 26, 2023
e34ea40
Make CPP_TESTS_DIR configurable
huydhn Apr 27, 2023
3c18cbb
Add aten test
huydhn Apr 27, 2023
d209f43
Run C++ test first while debugging
huydhn Apr 27, 2023
8ba3173
Fix wrong variable
huydhn Apr 27, 2023
f4c208f
Tidy it up
huydhn Apr 27, 2023
171ebf7
Need to use abs path
huydhn Apr 27, 2023
c9cc57f
Fix path
huydhn Apr 27, 2023
c1034a4
Fix the selection of multiple tests
huydhn Apr 27, 2023
6f8e96b
Add macos too
huydhn Apr 27, 2023
668f038
Fix test_jit
huydhn Apr 27, 2023
d3faa07
Fix test_tensorexpr
huydhn Apr 28, 2023
e1298ee
Merge branch 'main' into pytest-cpp-ci
huydhn Apr 28, 2023
9bd4863
Fix test discovery on Windows
huydhn Apr 28, 2023
6d5e30f
Try again with Windows C++ tests
huydhn Apr 28, 2023
f0fddd1
Fix wrong path in test_libtorch
huydhn Apr 28, 2023
c461de0
Remove .exe suffix on Windows
huydhn Apr 28, 2023
6ece6a0
Setup mnist test on Windows
huydhn Apr 28, 2023
d9b2631
ASAN test failures is annoying
huydhn Apr 28, 2023
4c5c73c
Merge branch 'main' into pytest-cpp-ci
huydhn Apr 29, 2023
68021d6
Handle c10_intrusive_ptr_benchmark on Windows
huydhn Apr 29, 2023
3a08e73
Merge branch 'main' into pytest-cpp-ci
huydhn Apr 29, 2023
0481b34
Fix cpp/static_runtime_test
huydhn Apr 29, 2023
a1e9d26
Add pytest -k to run_test
huydhn Apr 29, 2023
a894369
Run test_api differently on ASAN
huydhn Apr 30, 2023
c948726
Skip CUDA test_jit on non-CUDA
huydhn Apr 30, 2023
ed88a60
Run more C++ tests on ASAN natively
huydhn Apr 30, 2023
2d49eb9
Merge branch 'main' into pytest-cpp-ci
huydhn May 4, 2023
91aecac
Merge branch 'main' into pytest-cpp-ci
huydhn May 5, 2023
19b60af
Replicate conftest.py to C++ test dir
huydhn May 5, 2023
689631b
Fix lint
huydhn May 5, 2023
a54855c
Merge branch 'main' into pytest-cpp-ci
huydhn May 8, 2023
ded76cf
Merge branch 'main' into pytest-cpp-ci
huydhn May 8, 2023
35819be
Use $TORCH_BIN_DIR
huydhn May 9, 2023
d878a43
Some final tweaks
huydhn May 9, 2023
4d545dd
C++ test_aot_inductor is under build/bin
huydhn May 9, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
5 changes: 3 additions & 2 deletions .ci/pytorch/macos-test.sh
Original file line number Diff line number Diff line change
Expand Up @@ -71,13 +71,14 @@ test_libtorch() {
VERBOSE=1 DEBUG=1 python "$BUILD_LIBTORCH_PY"
popd

python tools/download_mnist.py --quiet -d test/cpp/api/mnist
MNIST_DIR="${PWD}/test/cpp/api/mnist"
python tools/download_mnist.py --quiet -d "${MNIST_DIR}"

# Unfortunately it seems like the test can't load from miniconda3
# without these paths being set
export DYLD_LIBRARY_PATH="$DYLD_LIBRARY_PATH:$PWD/miniconda3/lib"
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$PWD/miniconda3/lib"
TORCH_CPP_TEST_MNIST_PATH="test/cpp/api/mnist" "$CPP_BUILD"/caffe2/bin/test_api
TORCH_CPP_TEST_MNIST_PATH="${MNIST_DIR}" CPP_TESTS_DIR="${CPP_BUILD}/caffe2/bin" python test/run_test.py --cpp --verbose -i cpp/test_api

assert_git_not_dirty
fi
Expand Down
105 changes: 59 additions & 46 deletions .ci/pytorch/test.sh
Original file line number Diff line number Diff line change
Expand Up @@ -271,7 +271,7 @@ test_inductor() {
# docker build uses bdist_wheel which does not work with test_aot_inductor
# TODO: need a faster way to build
BUILD_AOT_INDUCTOR_TEST=1 python setup.py develop
LD_LIBRARY_PATH="$TORCH_LIB_DIR $TORCH_BIN_DIR"/test_aot_inductor
CPP_TESTS_DIR="${BUILD_BIN_DIR}" LD_LIBRARY_PATH="${TORCH_LIB_DIR}" python test/run_test.py --cpp --verbose -i cpp/test_aot_inductor
}

# "Global" flags for inductor benchmarking controlled by TEST_CONFIG
Expand Down Expand Up @@ -547,43 +547,60 @@ test_libtorch() {
ln -sf "$TORCH_LIB_DIR"/libtbb* "$TORCH_BIN_DIR"
ln -sf "$TORCH_LIB_DIR"/libnvfuser* "$TORCH_BIN_DIR"

export CPP_TESTS_DIR="${TORCH_BIN_DIR}"

# Start background download
python tools/download_mnist.py --quiet -d test/cpp/api/mnist &
MNIST_DIR="${PWD}/test/cpp/api/mnist"
python tools/download_mnist.py --quiet -d "${MNIST_DIR}" &

# Make test_reports directory
# NB: the ending test_libtorch must match the current function name for the current
# test reporting process to function as expected.
TEST_REPORTS_DIR=test/test-reports/cpp-unittest/test_libtorch
mkdir -p $TEST_REPORTS_DIR
# Prepare the model used by test_jit, the model needs to be in the test directory
# to get picked up by run_test
pushd test
python cpp/jit/tests_setup.py setup
popd

# Run JIT cpp tests
python test/cpp/jit/tests_setup.py setup

if [[ "$BUILD_ENVIRONMENT" == *cuda* ]]; then
"$TORCH_BIN_DIR"/test_jit --gtest_output=xml:$TEST_REPORTS_DIR/test_jit.xml
"$TORCH_BIN_DIR"/nvfuser_tests --gtest_output=xml:$TEST_REPORTS_DIR/nvfuser_tests.xml
python test/run_test.py --cpp --verbose -i cpp/test_jit cpp/nvfuser_tests
else
"$TORCH_BIN_DIR"/test_jit --gtest_filter='-*CUDA' --gtest_output=xml:$TEST_REPORTS_DIR/test_jit.xml
# CUDA tests have already been skipped when CUDA is not available
python test/run_test.py --cpp --verbose -i cpp/test_jit -k "not CUDA"
fi

# Run Lazy Tensor cpp tests
if [[ "$BUILD_ENVIRONMENT" == *cuda* && "$TEST_CONFIG" != *nogpu* ]]; then
LTC_TS_CUDA=1 "$TORCH_BIN_DIR"/test_lazy --gtest_output=xml:$TEST_REPORTS_DIR/test_lazy.xml
LTC_TS_CUDA=1 python test/run_test.py --cpp --verbose -i cpp/test_lazy
else
"$TORCH_BIN_DIR"/test_lazy --gtest_output=xml:$TEST_REPORTS_DIR/test_lazy.xml
python test/run_test.py --cpp --verbose -i cpp/test_lazy
fi

python test/cpp/jit/tests_setup.py shutdown
# Cleaning up test artifacts in the test folder
pushd test
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm curious why the pushd/popd was needed now when it wasn't needed before

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This script test/cpp/jit/tests_setup.py creates and cleans up a dummy JIT output for testing to the current directory. Previously, when the C++ tests was run directly as an executable, there was no need to change the directory. On the other hand, run_test.py changes the working directory to test, thus I need to do the same here to create that dummy output in test folder instead.

python cpp/jit/tests_setup.py shutdown
popd

# Wait for background download to finish
wait
# Exclude IMethodTest that relies on torch::deploy, which will instead be ran in test_deploy.
OMP_NUM_THREADS=2 TORCH_CPP_TEST_MNIST_PATH="test/cpp/api/mnist" "$TORCH_BIN_DIR"/test_api --gtest_filter='-IMethodTest.*' --gtest_output=xml:$TEST_REPORTS_DIR/test_api.xml
"$TORCH_BIN_DIR"/test_tensorexpr --gtest_output=xml:$TEST_REPORTS_DIR/test_tensorexpr.xml

if [[ "$BUILD_ENVIRONMENT" == *asan* ]]; then
TEST_REPORTS_DIR=test/test-reports/cpp-unittest/test_libtorch
mkdir -p $TEST_REPORTS_DIR

# TODO: Not quite sure why these tests time out only on ASAN, probably
# this is due to the fact that a python executable is used and ASAN
# treats that differently
OMP_NUM_THREADS=2 TORCH_CPP_TEST_MNIST_PATH="${MNIST_DIR}" "$TORCH_BIN_DIR"/test_api --gtest_filter='-IMethodTest.*' --gtest_output=xml:$TEST_REPORTS_DIR/test_api.xml
"$TORCH_BIN_DIR"/test_tensorexpr --gtest_output=xml:$TEST_REPORTS_DIR/test_tensorexpr.xml
else
# Exclude IMethodTest that relies on torch::deploy, which will instead be ran in test_deploy
OMP_NUM_THREADS=2 TORCH_CPP_TEST_MNIST_PATH="${MNIST_DIR}" python test/run_test.py --cpp --verbose -i cpp/test_api -k "not IMethodTest"
python test/run_test.py --cpp --verbose -i cpp/test_tensorexpr
fi

if [[ "${BUILD_ENVIRONMENT}" != *android* && "${BUILD_ENVIRONMENT}" != *cuda* && "${BUILD_ENVIRONMENT}" != *asan* ]]; then
# TODO: Consider to run static_runtime_test from $TORCH_BIN_DIR (may need modify build script)
"$BUILD_BIN_DIR"/static_runtime_test --gtest_output=xml:$TEST_REPORTS_DIR/static_runtime_test.xml
# NB: This test is not under TORCH_BIN_DIR but under BUILD_BIN_DIR
export CPP_TESTS_DIR="${BUILD_BIN_DIR}"
python test/run_test.py --cpp --verbose -i cpp/static_runtime_test
fi

assert_git_not_dirty
Expand All @@ -595,26 +612,21 @@ test_aot_compilation() {
ln -sf "$TORCH_LIB_DIR"/libc10* "$TORCH_BIN_DIR"
ln -sf "$TORCH_LIB_DIR"/libtorch* "$TORCH_BIN_DIR"

# Make test_reports directory
# NB: the ending test_libtorch must match the current function name for the current
# test reporting process to function as expected.
TEST_REPORTS_DIR=test/test-reports/cpp-unittest/test_aot_compilation
mkdir -p $TEST_REPORTS_DIR
if [ -f "$TORCH_BIN_DIR"/test_mobile_nnc ]; then "$TORCH_BIN_DIR"/test_mobile_nnc --gtest_output=xml:$TEST_REPORTS_DIR/test_mobile_nnc.xml; fi
# shellcheck source=test/mobile/nnc/test_aot_compile.sh
if [ -f "$TORCH_BIN_DIR"/aot_model_compiler_test ]; then source test/mobile/nnc/test_aot_compile.sh; fi
if [ -f "$TORCH_BIN_DIR"/test_mobile_nnc ]; then
CPP_TESTS_DIR="${TORCH_BIN_DIR}" python test/run_test.py --cpp --verbose -i cpp/test_mobile_nnc
fi

if [ -f "$TORCH_BIN_DIR"/aot_model_compiler_test ]; then
source test/mobile/nnc/test_aot_compile.sh
fi
}

test_vulkan() {
if [[ "$BUILD_ENVIRONMENT" == *vulkan* ]]; then
ln -sf "$TORCH_LIB_DIR"/libtorch* "$TORCH_TEST_DIR"
ln -sf "$TORCH_LIB_DIR"/libc10* "$TORCH_TEST_DIR"
export VK_ICD_FILENAMES=/var/lib/jenkins/swiftshader/swiftshader/build/Linux/vk_swiftshader_icd.json
# NB: the ending test_vulkan must match the current function name for the current
# test reporting process to function as expected.
TEST_REPORTS_DIR=test/test-reports/cpp-vulkan/test_vulkan
mkdir -p $TEST_REPORTS_DIR
LD_LIBRARY_PATH=/var/lib/jenkins/swiftshader/swiftshader/build/Linux/ "$TORCH_TEST_DIR"/vulkan_api_test --gtest_output=xml:$TEST_REPORTS_DIR/vulkan_test.xml
CPP_TESTS_DIR="${TORCH_TEST_DIR}" LD_LIBRARY_PATH=/var/lib/jenkins/swiftshader/swiftshader/build/Linux/ python test/run_test.py --cpp --verbose -i cpp/vulkan_api_test
fi
}

Expand All @@ -631,22 +643,24 @@ test_distributed() {
echo "Testing distributed C++ tests"
ln -sf "$TORCH_LIB_DIR"/libtorch* "$TORCH_BIN_DIR"
ln -sf "$TORCH_LIB_DIR"/libc10* "$TORCH_BIN_DIR"
# NB: the ending test_distributed must match the current function name for the current
# test reporting process to function as expected.
TEST_REPORTS_DIR=test/test-reports/cpp-distributed/test_distributed
mkdir -p $TEST_REPORTS_DIR
"$TORCH_BIN_DIR"/FileStoreTest --gtest_output=xml:$TEST_REPORTS_DIR/FileStoreTest.xml
"$TORCH_BIN_DIR"/HashStoreTest --gtest_output=xml:$TEST_REPORTS_DIR/HashStoreTest.xml
"$TORCH_BIN_DIR"/TCPStoreTest --gtest_output=xml:$TEST_REPORTS_DIR/TCPStoreTest.xml

export CPP_TESTS_DIR="${TORCH_BIN_DIR}"
# These are distributed tests, so let's continue running them sequentially here to avoid
# any surprise
python test/run_test.py --cpp --verbose -i cpp/FileStoreTest
python test/run_test.py --cpp --verbose -i cpp/HashStoreTest
python test/run_test.py --cpp --verbose -i cpp/TCPStoreTest

MPIEXEC=$(command -v mpiexec)
if [[ -n "$MPIEXEC" ]]; then
# NB: mpiexec only works directly with the C++ test binary here
MPICMD="${MPIEXEC} -np 2 $TORCH_BIN_DIR/ProcessGroupMPITest"
eval "$MPICMD"
fi
"$TORCH_BIN_DIR"/ProcessGroupGlooTest --gtest_output=xml:$TEST_REPORTS_DIR/ProcessGroupGlooTest.xml
"$TORCH_BIN_DIR"/ProcessGroupNCCLTest --gtest_output=xml:$TEST_REPORTS_DIR/ProcessGroupNCCLTest.xml
"$TORCH_BIN_DIR"/ProcessGroupNCCLErrorsTest --gtest_output=xml:$TEST_REPORTS_DIR/ProcessGroupNCCLErrorsTest.xml

python test/run_test.py --cpp --verbose -i cpp/ProcessGroupGlooTest
python test/run_test.py --cpp --verbose -i cpp/ProcessGroupNCCLTest
python test/run_test.py --cpp --verbose -i cpp/ProcessGroupNCCLErrorsTest
fi
}

Expand All @@ -658,9 +672,8 @@ test_rpc() {
ln -sf "$TORCH_LIB_DIR"/libtorch* "$TORCH_BIN_DIR"
ln -sf "$TORCH_LIB_DIR"/libc10* "$TORCH_BIN_DIR"
ln -sf "$TORCH_LIB_DIR"/libtbb* "$TORCH_BIN_DIR"
TEST_REPORTS_DIR=test/test-reports/cpp-rpc/test_rpc
mkdir -p $TEST_REPORTS_DIR
"$TORCH_BIN_DIR"/test_cpp_rpc --gtest_output=xml:$TEST_REPORTS_DIR/test_cpp_rpc.xml

CPP_TESTS_DIR="${TORCH_BIN_DIR}" python test/run_test.py --cpp --verbose -i cpp/test_cpp_rpc
fi
}

Expand Down
24 changes: 15 additions & 9 deletions .ci/pytorch/win-test-helpers/test_libtorch.bat
Original file line number Diff line number Diff line change
Expand Up @@ -5,14 +5,16 @@ if "%USE_CUDA%" == "0" IF NOT "%CUDA_VERSION%" == "cpu" exit /b 0
call %SCRIPT_HELPERS_DIR%\setup_pytorch_env.bat
if errorlevel 1 exit /b 1

cd %TMP_DIR_WIN%\build\torch\bin
set TEST_OUT_DIR=%~dp0\..\..\..\test\test-reports\cpp-unittest
md %TEST_OUT_DIR%
:: Save the current working directory so that we can go back there
set CWD=%cd%

set CPP_TESTS_DIR=%TMP_DIR_WIN%\build\torch\bin
set PATH=C:\Program Files\NVIDIA Corporation\NvToolsExt\bin\x64;%TMP_DIR_WIN%\build\torch\lib;%PATH%

set TEST_API_OUT_DIR=%TEST_OUT_DIR%\test_api
md %TEST_API_OUT_DIR%
test_api.exe --gtest_filter="-IntegrationTest.MNIST*" --gtest_output=xml:%TEST_API_OUT_DIR%\test_api.xml
set TORCH_CPP_TEST_MNIST_PATH=%CWD%\test\cpp\api\mnist
python tools\download_mnist.py --quiet -d %TORCH_CPP_TEST_MNIST_PATH%

python test\run_test.py --cpp --verbose -i cpp/test_api
if errorlevel 1 exit /b 1
if not errorlevel 0 exit /b 1

Expand All @@ -25,6 +27,10 @@ for /r "." %%a in (*.exe) do (
goto :eof

:libtorch_check

cd %CWD%
set CPP_TESTS_DIR=%TMP_DIR_WIN%\build\torch\test

:: Skip verify_api_visibility as it a compile level test
if "%~1" == "verify_api_visibility" goto :eof

Expand All @@ -42,12 +48,12 @@ if "%~1" == "utility_ops_gpu_test" goto :eof

echo Running "%~2"
if "%~1" == "c10_intrusive_ptr_benchmark" (
:: NB: This is not a gtest executable file, thus couldn't be handled by pytest-cpp
call "%~2"
goto :eof
)
:: Differentiating the test report directories is crucial for test time reporting.
md %TEST_OUT_DIR%\%~n2
call "%~2" --gtest_output=xml:%TEST_OUT_DIR%\%~n2\%~1.xml

python test\run_test.py --cpp --verbose -i "cpp/%~1"
if errorlevel 1 (
echo %1 failed with exit code %errorlevel%
exit /b 1
Expand Down
79 changes: 41 additions & 38 deletions aten/tools/run_tests.sh
Original file line number Diff line number Diff line change
Expand Up @@ -3,75 +3,78 @@ set -x
set -e

VALGRIND_SUP="${PWD}/`dirname $0`/valgrind.sup"
pushd $1
export CPP_TESTS_DIR=$1

VALGRIND=${VALGRIND:=ON}
./basic
./atest
./scalar_test
./broadcast_test
./wrapdim_test
./apply_utils_test
./dlconvertor_test
./native_test
./scalar_tensor_test
python test/run_test.py --cpp --verbose -i \
cpp/basic \
cpp/atest \
cpp/scalar_test \
cpp/broadcast_test \
cpp/wrapdim_test \
cpp/apply_utils_test \
cpp/dlconvertor_test \
cpp/native_test \
cpp/scalar_tensor_test \
cpp/undefined_tensor_test \
cpp/extension_backend_test \
cpp/lazy_tensor_test \
cpp/tensor_iterator_test \
cpp/Dimname_test \
cpp/Dict_test \
cpp/NamedTensor_test \
cpp/cpu_generator_test \
cpp/legacy_vmap_test \
cpp/operators_test

if [[ -x ./tensor_interop_test ]]; then
./tensor_interop_test
python test/run_test.py --cpp --verbose -i cpp/tensor_interop_test
fi
./undefined_tensor_test
./extension_backend_test
./lazy_tensor_test
./tensor_iterator_test
./Dimname_test
./Dict_test
./NamedTensor_test
./cpu_generator_test
./legacy_vmap_test
./operators_test
if [[ -x ./cudnn_test ]]; then
./cudnn_test
python test/run_test.py --cpp --verbose -i cpp/cudnn_test
fi
if [[ -x ./cuda_generator_test ]]; then
./cuda_generator_test
python test/run_test.py --cpp --verbose -i cpp/cuda_generator_test
fi
if [[ -x ./apply_test ]]; then
./apply_test
python test/run_test.py --cpp --verbose -i cpp/apply_test
fi
if [[ -x ./stream_test ]]; then
./stream_test
python test/run_test.py --cpp --verbose -i cpp/stream_test
fi
if [[ -x ./cuda_half_test ]]; then
./cuda_half_test
python test/run_test.py --cpp --verbose -i cpp/cuda_half_test
fi
if [[ -x ./cuda_vectorized_test ]]; then
./cuda_vectorized_test
python test/run_test.py --cpp --verbose -i cpp/cuda_vectorized_test
fi
if [[ -x ./cuda_distributions_test ]]; then
./cuda_distributions_test
python test/run_test.py --cpp --verbose -i cpp/cuda_distributions_test
fi
if [[ -x ./cuda_optional_test ]]; then
./cuda_optional_test
python test/run_test.py --cpp --verbose -i cpp/cuda_optional_test
fi
if [[ -x ./cuda_tensor_interop_test ]]; then
./cuda_tensor_interop_test
python test/run_test.py --cpp --verbose -i cpp/cuda_tensor_interop_test
fi
if [[ -x ./cuda_complex_test ]]; then
./cuda_complex_test
python test/run_test.py --cpp --verbose -i cpp/cuda_complex_test
fi
if [[ -x ./cuda_complex_math_test ]]; then
./cuda_complex_math_test
python test/run_test.py --cpp --verbose -i cpp/cuda_complex_math_test
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why make these verbose? Does this turn them into "as verbose as normal python tests" mode, or do cpp tests need to be extra verbose for some reason?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Just a force of habit I guess as other Python tests all run with --verbose. Now that you point it out, there is no difference in this case from what I see between python test/run_test.py --cpp -i cpp/basic --verbose and python test/run_test.py --cpp -i cpp/basic for example.

fi
if [[ -x ./cuda_cub_test ]]; then
./cuda_cub_test
python test/run_test.py --cpp --verbose -i cpp/cuda_cub_test
fi
if [[ -x ./cuda_atomic_ops_test ]]; then
./cuda_atomic_ops_test
python test/run_test.py --cpp --verbose -i cpp/cuda_atomic_ops_test
fi

if [ "$VALGRIND" == "ON" ]; then
valgrind --suppressions="$VALGRIND_SUP" --error-exitcode=1 ./basic --gtest_filter='-*CUDA'
# NB: As these tests are invoked by valgrind, let's leave them for now as it's
# unclear if valgrind -> python -> gtest would work
valgrind --suppressions="$VALGRIND_SUP" --error-exitcode=1 "${CPP_TESTS_DIR}/basic" --gtest_filter='-*CUDA'
if [[ -x ./tensor_interop_test ]]; then
valgrind --suppressions="$VALGRIND_SUP" --error-exitcode=1 ./tensor_interop_test
valgrind --suppressions="$VALGRIND_SUP" --error-exitcode=1 "${CPP_TESTS_DIR}/tensor_interop_test"
fi
fi

popd