blob: eb07be74388c00602a0a074bd51f98c7b0c01e6f [file] [log] [blame]
#!/bin/sh
#
# Purpose: test all configurations with all supported python versions.
#
# Synopsis: ./runall-memorydebugger.sh [--all-configs64 | --all-configs32]
#
# Requirements:
#
# Programs:
#
# hg, valgrind
#
# Directory structure (path names are hardcoded):
#
# hgdir/2.5
# hgdir/2.6
# hgdir/2.7
# hgdir/3.1
# hgdir/3.2
# hgdir/default
#
# hgdir/mpdecimal/python -> run script from this directory
#
# Specific configurations for setup.py
CONFIGS_64="x64 uint128 ansi64 universal"
CONFIGS_32="ppro ansi32 ansi-legacy universal"
PY2_VERSIONS="2.5 2.6 2.7"
PY3_VERSIONS="3.1 3.2 default"
VALGRIND="valgrind --tool=memcheck --leak-check=full --leak-resolution=high \
--db-attach=yes --show-reachable=yes --suppressions="
# Get args
case $@ in
*--all-configs64*)
CONFIGS=$CONFIGS_64
;;
*--all-configs32*)
CONFIGS=$CONFIGS_32
;;
*)
CONFIGS="auto"
;;
esac
# gmake required
GMAKE=`which gmake`
if [ X"$GMAKE" = X"" ]; then
GMAKE=make
fi
# Pretty print configurations
print_config ()
{
len=`echo $@ | wc -c`
margin="#%"`expr \( 74 - $len \) / 2`"s"
echo ""
echo "# ========================================================================"
printf $margin ""
echo $@
echo "# ========================================================================"
echo ""
}
cp -R ../../default/Lib/test/decimaltestdata .
# Refleak tests
./build_all_branches.sh --with-pydebug
for py_version in $PY2_VERSIONS $PY3_VERSIONS; do
for pyargs in "--without-threads" ""; do
for config in $CONFIGS; do
for failapi in "yes" "no"; do
if [ X"$failapi" = X"yes" ]; then
cd .. || exit 1
patch < python/failapi2.diff
patch < python/failapi3.diff
cd python || exit 1
fi
################### Arguments for setup.py ####################
if [ "$config" = "auto" ]; then
args=$pyargs
else
args=$pyargs" --with-machine="$config
fi
py_exec="$py_version/python"
regrtest="../../$py_version/Lib/test/regrtest.py -uall -R 2:2:reflog.txt"
#################### Print section header #####################
print_config $py_version $args "failapi=$failapi"
########################## Unit tests #########################
cd .. || exit 1
$GMAKE clean
../$py_exec setup.py build $args || exit 1
cd python || exit 1
echo ""
echo ""
echo "======================== Unit tests =========================="
echo ""
case "$py_version" in
2.5) decimal_tests=test_cdecimal2.5.py;;
2.6|2.7) decimal_tests=test_cdecimal2.py;;
3*|default) decimal_tests=test_cdecimal3.py;;
*) exit 1;;
esac
cp cdecimal*.so ../../$py_version/Lib/ || exit 1
cp $decimal_tests ../../$py_version/Lib/test/test_cdecimal.py || exit 1
../../$py_exec $regrtest test_cdecimal
if [ X"$failapi" = X"yes" ]; then
cd .. || exit 1
patch -R < python/failapi2.diff
patch -R < python/failapi3.diff
cd python || exit 1
fi
done
done
done
done
# Valgrind tests
./build_all_branches.sh --without-pymalloc
for py_version in $PY2_VERSIONS $PY3_VERSIONS; do
for pyargs in "--without-threads" ""; do
for config in $CONFIGS; do
################### Arguments for setup.py ####################
if [ "$config" = "auto" ]; then
args=$pyargs
else
args=$pyargs" --with-machine="$config
fi
################### Valgrind command line #####################
py_exec="$py_version/python"
valgrind="$VALGRIND../../$py_version/Misc/valgrind-python.supp"
case "$config" in
# Valgrind has no support for 80 bit long double arithmetic.
ppro) valgrind= ;;
auto) case `uname -m` in
i386|i486|i586|i686) valgrind= ;;
esac
esac
################ Select version specific tests ################
case "$py_version" in
2.5)
decimal_tests=test_cdecimal2.5.py
deccheck=deccheck2.py
ctx_deccheck=ctx-deccheck2.py
;;
2.6|2.7)
decimal_tests=test_cdecimal2.py
deccheck=deccheck2.py
ctx_deccheck=ctx-deccheck2.py
;;
3*|default)
decimal_tests=test_cdecimal3.py
deccheck=deccheck3.py
ctx_deccheck='-c print("\ndeccheck3_includes_context_tests\n\n")'
;;
*) exit 1 ;;
esac
#################### Print section header #####################
print_config $py_version $args
################### Unit tests with FailAPI ###################
cd .. || exit 1
patch < python/failapi2.diff
patch < python/failapi3.diff
cd python || exit 1
cd .. || exit 1
$GMAKE clean
../$py_exec setup.py build $args || exit 1
cd python || exit 1
echo ""
echo ""
echo "======================= FailAPI tests ========================"
echo ""
$valgrind ../../$py_exec $decimal_tests
cd .. || exit 1
patch -R < python/failapi2.diff
patch -R < python/failapi3.diff
cd python || exit 1
###################### Regular unit tests #####################
cd .. || exit 1
$GMAKE clean
../$py_exec setup.py build $args || exit 1
cd python || exit 1
echo ""
echo ""
echo "======================== Unit tests =========================="
echo ""
$valgrind ../../$py_exec $decimal_tests
########################### deccheck ##########################
echo ""
echo ""
echo "========================= deccheck ==========================="
echo ""
$valgrind ../../$py_exec $deccheck || exit 1
######################## ctx-deccheck #########################
echo ""
echo ""
echo "======================= ctx-deccheck ========================="
echo ""
$valgrind ../../$py_exec $ctx_deccheck || exit 1
done
done
done