mirror of
https://github.com/mborgerding/kissfft.git
synced 2025-05-25 12:10:27 -04:00
276 lines
6.2 KiB
Bash
276 lines
6.2 KiB
Bash
#!/bin/sh
|
|
|
|
#
|
|
# Test suite for kissfft
|
|
#
|
|
# Copyright (c) 2021, Vasyl Gello.
|
|
# This file is part of KISS FFT - https://github.com/mborgerding/kissfft
|
|
#
|
|
# SPDX-License-Identifier: BSD-3-Clause
|
|
# See COPYING file for more information.
|
|
#
|
|
|
|
if [ ! -f CHANGELOG ] && [ ! -f kiss_fft.h ]; then
|
|
echo "ERROR: Please run this testsuite from top level of kissfft source tree!" >&2
|
|
return 1
|
|
fi
|
|
|
|
TESTSUITEOUTDIR="$2"
|
|
|
|
if [ -z "$TESTSUITEOUTDIR" ]; then
|
|
TESTSUITEOUTDIR="/tmp/kissfft-testsuite"
|
|
fi
|
|
|
|
if ! mkdir -p "$TESTSUITEOUTDIR"; then
|
|
echo "ERROR: Can not create directory '$TESTSUITEOUTDIR'!" >&2
|
|
return 1
|
|
fi
|
|
|
|
#
|
|
# Test runner function
|
|
#
|
|
# Parameters:
|
|
#
|
|
# $1 - Action: "test" or "install"
|
|
# $2 - Build type: "make" or "cmake"
|
|
# $3 - Data type: "float" "double" "int16_t" "int32_t" "simd"
|
|
# $4 - library type: "shared" or "static"
|
|
# $5 - Include tools: "yes" or "no"
|
|
# $6 - Install root dir: "existing writable directory"
|
|
#
|
|
|
|
test_runner() {
|
|
_ACTION="$1"
|
|
_BUILD_TYPE="$2"
|
|
_DATA_TYPE="$3"
|
|
_LIB_TYPE="$4"
|
|
_OPENMP="$5"
|
|
_INCLUDE_TOOLS="$6"
|
|
_INSTALL_ROOT_DIR="$7"
|
|
|
|
_CMAKE_OPTS=""
|
|
_MAKE_OPTS=""
|
|
|
|
# Prepare install directory name without "$_OPENMP" and "$_INCLUDE_TOOLS"
|
|
|
|
_INSTALL_DIR="$_INSTALL_ROOT_DIR/$_BUILD_TYPE/$_DATA_TYPE/$_LIB_TYPE"
|
|
|
|
# Prepare log file without "$_OPENMP" and "$_INCLUDE_TOOLS"
|
|
|
|
_LOG_FILE="$_INSTALL_ROOT_DIR/$_ACTION-$_BUILD_TYPE-$_DATA_TYPE-$_LIB_TYPE"
|
|
|
|
# Validate parameters
|
|
|
|
# Create install root directory
|
|
|
|
if [ -z "$_INSTALL_ROOT_DIR" ]; then
|
|
echo "" >&2
|
|
echo "ERROR: Empty path to writeable directory" >&2
|
|
echo "" >&2
|
|
return 1
|
|
fi
|
|
|
|
if [ ! -d "$_INSTALL_ROOT_DIR" ]; then
|
|
if ! mkdir -p "$_INSTALL_ROOT_DIR"; then
|
|
echo "" >&2
|
|
echo "ERROR: Can not create directory '$_INSTALL_ROOT_DIR'" >&2
|
|
echo "" >&2
|
|
return 1
|
|
fi
|
|
fi
|
|
|
|
if [ "$_BUILD_TYPE" != "make" ] && [ "$_BUILD_TYPE" != "cmake" ]; then
|
|
echo "ERROR: Build type must be one of: cmake make" >&2
|
|
echo "" >&2
|
|
return 1
|
|
fi
|
|
|
|
if [ "$_DATA_TYPE" != "double" ] &&
|
|
[ "$_DATA_TYPE" != "float" ] &&
|
|
[ "$_DATA_TYPE" != "int16_t" ] &&
|
|
[ "$_DATA_TYPE" != "int32_t" ] &&
|
|
[ "$_DATA_TYPE" != "simd" ];
|
|
then
|
|
echo "ERROR: Data type must be one of: double float int16_t int32_t simd" >&2
|
|
echo "" >&2
|
|
return 1
|
|
else
|
|
_MAKE_OPTS="$_MAKE_OPTS KISSFFT_DATATYPE=$_DATA_TYPE"
|
|
_CMAKE_OPTS="$_CMAKE_OPTS -DKISSFFT_DATATYPE=$_DATA_TYPE"
|
|
fi
|
|
|
|
if [ "$_LIB_TYPE" != "shared" ] && [ "$_LIB_TYPE" != "static" ]; then
|
|
echo "ERROR: Library type must be one of: shared static" >&2
|
|
echo "" >&2
|
|
return 1
|
|
fi
|
|
|
|
case "$_LIB_TYPE" in
|
|
"shared")
|
|
;;
|
|
"static")
|
|
_MAKE_OPTS="$_MAKE_OPTS KISSFFT_STATIC=1"
|
|
_CMAKE_OPTS="$_CMAKE_OPTS -DKISSFFT_STATIC=ON"
|
|
;;
|
|
"*")
|
|
echo "ERROR: OpenMP inclusion must be one of: no yes" >&2
|
|
echo "" >&2
|
|
return 1
|
|
;;
|
|
esac
|
|
|
|
case "$_OPENMP" in
|
|
"yes")
|
|
_INSTALL_DIR="$_INSTALL_DIR/openmp"
|
|
_LOG_FILE="$_LOG_FILE-openmp"
|
|
_MAKE_OPTS="$_MAKE_OPTS KISSFFT_OPENMP=1"
|
|
_CMAKE_OPTS="$_CMAKE_OPTS -DKISSFFT_OPENMP=ON"
|
|
;;
|
|
"no")
|
|
_INSTALL_DIR="$_INSTALL_DIR/noopenmp"
|
|
_LOG_FILE="$_LOG_FILE-noopenmp"
|
|
;;
|
|
"*")
|
|
echo "ERROR: OpenMP inclusion must be one of: no yes" >&2
|
|
echo "" >&2
|
|
return 1
|
|
;;
|
|
esac
|
|
|
|
case "$_INCLUDE_TOOLS" in
|
|
"yes")
|
|
_INSTALL_DIR="$_INSTALL_DIR/tools"
|
|
_LOG_FILE="$_LOG_FILE-tools"
|
|
;;
|
|
"no")
|
|
_INSTALL_DIR="$_INSTALL_DIR/notools"
|
|
_LOG_FILE="$_LOG_FILE-notools"
|
|
_MAKE_OPTS="$_MAKE_OPTS KISSFFT_TOOLS=0"
|
|
_CMAKE_OPTS="$_CMAKE_OPTS -DKISSFFT_TOOLS=OFF"
|
|
;;
|
|
"*")
|
|
echo "ERROR: Tools inclusion must be one of: no yes" >&2
|
|
echo "" >&2
|
|
return 1
|
|
;;
|
|
esac
|
|
|
|
# Clean kissfft
|
|
|
|
rm -rf build 1>/dev/null 2>/dev/null
|
|
make clean 1>/dev/null 2>&1
|
|
|
|
# Prepare status line
|
|
|
|
_STATUS_LINE="Running: $(printf "% 10s" "$_ACTION") |"
|
|
_STATUS_LINE="$_STATUS_LINE Build Type: $(printf "% 7s" "$_BUILD_TYPE") |"
|
|
_STATUS_LINE="$_STATUS_LINE Data Type: $(printf "% 7s" "$_DATA_TYPE") |"
|
|
_STATUS_LINE="$_STATUS_LINE Lib Type: $(printf "% 7s" "$_LIB_TYPE") |"
|
|
_STATUS_LINE="$_STATUS_LINE OpenMP: $(printf "% 3s" "$_OPENMP") |"
|
|
_STATUS_LINE="$_STATUS_LINE Tools: $(printf "% 3s" "$_INCLUDE_TOOLS") |"
|
|
|
|
# Skip tests with tools not installed as they are same as with tools
|
|
|
|
if [ "$_ACTION" = "test" ] && [ "$_INCLUDE_TOOLS" = "no" ]; then
|
|
return 2
|
|
fi
|
|
|
|
# Run selected action
|
|
|
|
echo "$_STATUS_LINE"
|
|
|
|
case "$_ACTION" in
|
|
"test")
|
|
_MAKE_OPTS="$_MAKE_OPTS PREFIX=$_INSTALL_DIR"
|
|
_CMAKE_OPTS="$_CMAKE_OPTS -DCMAKE_INSTALL_PREFIX=$_INSTALL_DIR"
|
|
|
|
case "$_BUILD_TYPE" in
|
|
"make")
|
|
make $_MAKE_OPTS all 1>>"$_LOG_FILE" 2>&1 &&
|
|
make $_MAKE_OPTS testsingle 1>>"$_LOG_FILE" 2>&1 &&
|
|
_RET=$?
|
|
;;
|
|
"cmake")
|
|
mkdir build 1>/dev/null 2>&1 &&
|
|
cd build &&
|
|
cmake $_CMAKE_OPTS .. 1>"$_LOG_FILE" 2>&1 &&
|
|
make all 1>>"$_LOG_FILE" 2>&1 &&
|
|
make test 1>>"$_LOG_FILE" 2>&1
|
|
_RET=$?
|
|
cd ..
|
|
;;
|
|
esac
|
|
;;
|
|
"install")
|
|
_MAKE_OPTS="$_MAKE_OPTS PREFIX=$_INSTALL_DIR"
|
|
_CMAKE_OPTS="$_CMAKE_OPTS -DCMAKE_INSTALL_PREFIX=$_INSTALL_DIR"
|
|
|
|
case "$_BUILD_TYPE" in
|
|
"make")
|
|
make $_MAKE_OPTS install 1>>"$_LOG_FILE" 2>&1
|
|
_RET=$?
|
|
;;
|
|
"cmake")
|
|
mkdir build 1>/dev/null 2>&1 &&
|
|
cd build &&
|
|
cmake $_CMAKE_OPTS .. 1>"$_LOG_FILE" 2>&1 &&
|
|
make all 1>>"$_LOG_FILE" 2>&1 &&
|
|
make install 1>>"$_LOG_FILE" 2>&1
|
|
_RET=$?
|
|
cd ..
|
|
;;
|
|
esac
|
|
;;
|
|
*)
|
|
echo "ERROR: Action must be one of: test install" >&2
|
|
echo "" >&2
|
|
return 1
|
|
;;
|
|
esac
|
|
|
|
# Clean kissfft
|
|
|
|
rm -rf build 1>/dev/null 2>/dev/null
|
|
make clean 1>/dev/null 2>&1
|
|
|
|
# Return result
|
|
|
|
[ $_RET -eq 0 ] && return 0 || return 1
|
|
}
|
|
|
|
# Main script
|
|
|
|
for ACTION in test install; do
|
|
for BUILD_TYPE in make cmake; do
|
|
for DATA_TYPE in float double int16_t int32_t simd; do
|
|
for LIB_TYPE in shared static; do
|
|
for OPENMP in no yes; do
|
|
for INCLUDE_TOOLS in no yes; do
|
|
test_runner \
|
|
"$ACTION" \
|
|
"$BUILD_TYPE" \
|
|
"$DATA_TYPE" \
|
|
"$LIB_TYPE" \
|
|
"$OPENMP" \
|
|
"$INCLUDE_TOOLS" \
|
|
"$TESTSUITEOUTDIR"
|
|
|
|
case $? in
|
|
0)
|
|
echo "Result: OK"
|
|
;;
|
|
1)
|
|
echo "Result: FAIL"
|
|
;;
|
|
2)
|
|
# Ignore it
|
|
echo "Result: IGNORE" 1>/dev/null
|
|
;;
|
|
esac
|
|
done
|
|
done
|
|
done
|
|
done
|
|
done
|
|
done 2>&1 | tee "$TESTSUITEOUTDIR/all-tests.log"
|