Skip to content

Commit

Permalink
Add testsuite
Browse files Browse the repository at this point in the history
Signed-off-by: Vasyl Gello <[email protected]>
  • Loading branch information
basilgello committed Feb 5, 2021
1 parent cccf41a commit 7eeda21
Showing 1 changed file with 275 additions and 0 deletions.
275 changes: 275 additions & 0 deletions test/kissfft-testsuite.sh
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"

0 comments on commit 7eeda21

Please sign in to comment.