-
Notifications
You must be signed in to change notification settings - Fork 295
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Signed-off-by: Vasyl Gello <[email protected]>
- Loading branch information
1 parent
cccf41a
commit 7eeda21
Showing
1 changed file
with
275 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,275 @@ | ||
#!/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" |