mirror of
https://github.com/Z3Prover/z3
synced 2025-04-05 17:14:07 +00:00
123 lines
4.2 KiB
Bash
Executable file
123 lines
4.2 KiB
Bash
Executable file
#!/bin/bash
|
|
|
|
# This script tests Z3
|
|
|
|
SCRIPT_DIR="$( cd ${BASH_SOURCE[0]%/*} ; echo $PWD )"
|
|
. ${SCRIPT_DIR}/run_quiet.sh
|
|
|
|
set -x
|
|
set -e
|
|
set -o pipefail
|
|
: ${Z3_SRC_DIR?"Z3_SRC_DIR must be specified"}
|
|
: ${Z3_BUILD_DIR?"Z3_BUILD_DIR must be specified"}
|
|
: ${PYTHON_BINDINGS?"PYTHON_BINDINGS must be specified"}
|
|
: ${PYTHON_EXECUTABLE?"PYTHON_EXECUTABLE must be specified"}
|
|
: ${DOTNET_BINDINGS?"DOTNET_BINDINGS must be specified"}
|
|
: ${JAVA_BINDINGS?"JAVA_BINDINGS must be specified"}
|
|
: ${UBSAN_BUILD?"UBSAN_BUILD must be specified"}
|
|
: ${RUN_API_EXAMPLES?"RUN_API_EXAMPLES must be specified"}
|
|
|
|
if [ "X${RUN_API_EXAMPLES}" = "X0" ]; then
|
|
echo "Skipping run of API examples"
|
|
exit 0
|
|
fi
|
|
|
|
# Set compiler flags
|
|
source ${SCRIPT_DIR}/set_compiler_flags.sh
|
|
|
|
# Set CMake generator args
|
|
source ${SCRIPT_DIR}/set_generator_args.sh
|
|
|
|
# Sanitizer environment variables
|
|
source ${SCRIPT_DIR}/sanitizer_env.sh
|
|
|
|
cd "${Z3_BUILD_DIR}"
|
|
|
|
# Build and run C example
|
|
cmake --build $(pwd) --target c_example "${GENERATOR_ARGS[@]}"
|
|
run_quiet examples/c_example_build_dir/c_example
|
|
|
|
# Build and run C++ example
|
|
cmake --build $(pwd) --target cpp_example "${GENERATOR_ARGS[@]}"
|
|
run_quiet examples/cpp_example_build_dir/cpp_example
|
|
|
|
# Build and run tptp5 example
|
|
cmake --build $(pwd) --target z3_tptp5 "${GENERATOR_ARGS[@]}"
|
|
# FIXME: Do something more useful with example
|
|
run_quiet examples/tptp_build_dir/z3_tptp5 -help
|
|
|
|
# Build an run c_maxsat_example
|
|
cmake --build $(pwd) --target c_maxsat_example "${GENERATOR_ARGS[@]}"
|
|
# FIXME: It is known that the maxsat example leaks memory and the
|
|
# the Z3 developers have stated this is "wontfix".
|
|
# See https://github.com/Z3Prover/z3/issues/1299
|
|
run_no_lsan \
|
|
run_quiet \
|
|
examples/c_maxsat_example_build_dir/c_maxsat_example \
|
|
${Z3_SRC_DIR}/examples/maxsat/ex.smt
|
|
|
|
if [ "X${UBSAN_BUILD}" = "X1" ]; then
|
|
# FIXME: We really need libz3 to link against a shared UBSan runtime.
|
|
# Right now we link against the static runtime which breaks all the
|
|
# non-native language bindings.
|
|
echo "FIXME: Can't run other examples when building with UBSan"
|
|
exit 0
|
|
fi
|
|
|
|
|
|
if [ "X${PYTHON_BINDINGS}" = "X1" ]; then
|
|
# Run python examples
|
|
# `all_interval_series.py` produces a lot of output so just throw
|
|
# away output.
|
|
# TODO: This example is slow should we remove it from testing?
|
|
if [ "X${ASAN_BUILD}" = "X1" -a "X${Z3_BUILD_TYPE}" = "XDebug" ]; then
|
|
# Too slow when doing ASan Debug build
|
|
echo "Skipping all_interval_series.py under ASan Debug build"
|
|
else
|
|
run_quiet run_non_native_binding ${PYTHON_EXECUTABLE} python/all_interval_series.py
|
|
fi
|
|
run_quiet run_non_native_binding ${PYTHON_EXECUTABLE} python/complex.py
|
|
run_quiet run_non_native_binding ${PYTHON_EXECUTABLE} python/example.py
|
|
# FIXME: `hamiltonian.py` example is disabled because its too slow.
|
|
#${PYTHON_EXECUTABLE} python/hamiltonian.py
|
|
run_quiet run_non_native_binding ${PYTHON_EXECUTABLE} python/marco.py
|
|
run_quiet run_non_native_binding ${PYTHON_EXECUTABLE} python/mss.py
|
|
run_quiet run_non_native_binding ${PYTHON_EXECUTABLE} python/socrates.py
|
|
run_quiet run_non_native_binding ${PYTHON_EXECUTABLE} python/visitor.py
|
|
run_quiet run_non_native_binding ${PYTHON_EXECUTABLE} python/z3test.py
|
|
fi
|
|
|
|
if [ "X${DOTNET_BINDINGS}" = "X1" ]; then
|
|
# Build .NET example
|
|
# FIXME: Move compliation step into CMake target
|
|
mcs ${Z3_SRC_DIR}/examples/dotnet/Program.cs /target:exe /out:dotnet_test.exe /reference:Microsoft.Z3.dll /r:System.Numerics.dll
|
|
# Run .NET example
|
|
run_quiet run_non_native_binding mono ./dotnet_test.exe
|
|
fi
|
|
|
|
if [ "X${JAVA_BINDINGS}" = "X1" ]; then
|
|
# Build Java example
|
|
# FIXME: Move compilation step into CMake target
|
|
mkdir -p examples/java
|
|
cp ${Z3_SRC_DIR}/examples/java/JavaExample.java examples/java/
|
|
javac examples/java/JavaExample.java -classpath com.microsoft.z3.jar
|
|
# Run Java example
|
|
if [ "$(uname)" = "Darwin" ]; then
|
|
# macOS
|
|
export DYLD_LIBRARY_PATH=$(pwd):${DYLD_LIBRARY_PATH}
|
|
else
|
|
# Assume Linux for now
|
|
export LD_LIBRARY_PATH=$(pwd):${LD_LIBRARY_PATH}
|
|
fi
|
|
if [ "X${ASAN_BUILD}" = "X1" ]; then
|
|
# The JVM seems to crash (SEGV) if we pre-load ASan
|
|
# so don't run it for now.
|
|
echo "Skipping JavaExample under ASan build"
|
|
else
|
|
run_quiet \
|
|
run_non_native_binding \
|
|
java -cp .:examples/java:com.microsoft.z3.jar JavaExample
|
|
fi
|
|
fi
|
|
|