cmake: implements tests using CTest suite

the new tests are implemented with CTest suite of CMake.
To enable the tests you need to run cmake with -DBUILD_TESTING=ON
There are optional tests (that might not work) that can be enabled with
-DOPTIONAL_TEST=ON

So, to enable all tests and run it use the following command

mkdir build
cmake -DBUILD_TESTING=ON -DOPTIONA_TEST=ON ..
make
ctest

to debug the errors use

ctest --debug

You can always find all tests binary on build/test/

Implementation:
- check-modem* tests are implemented with shell script because it
  requires to execute many commands and therefore will be easy to
  manage. The file is configured at configuration time.
- for single binary we verify the exit status (default = 0) so you
  only need to build the binary and add it to add_test()
This commit is contained in:
Davide Gerhard 2019-08-30 12:22:26 +02:00
parent de98f26229
commit 0e5049c08a
No known key found for this signature in database
GPG Key ID: 7CBEFA144857DC97
11 changed files with 654 additions and 62 deletions

View File

@ -1,8 +1,3 @@
# TODO:
# - check which MSVC are compatible
# - cpack
# - ctest
cmake_minimum_required(VERSION 3.1.0) cmake_minimum_required(VERSION 3.1.0)
project(direwolf) project(direwolf)
@ -17,6 +12,7 @@ set(direwolf_VERSION_SUFFIX "")
option(FORCE_SSE "Compile with SSE instruction only" OFF) option(FORCE_SSE "Compile with SSE instruction only" OFF)
option(FORCE_SSSE3 "Compile with SSSE3 instruction only" OFF) option(FORCE_SSSE3 "Compile with SSSE3 instruction only" OFF)
option(FORCE_SSE41 "Compile with SSE4.1 instruction only" OFF) option(FORCE_SSE41 "Compile with SSE4.1 instruction only" OFF)
option(OPTIONAL_TEST "Compile optional test (might be broken)" OFF)
# where cmake find custom modules # where cmake find custom modules
list(APPEND CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake/modules) list(APPEND CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake/modules)
@ -70,6 +66,7 @@ if(direwolf_VERSION_COMMIT)
add_definitions("-DEXTRA_VERSION=${direwolf_VERSION_COMMIT}") add_definitions("-DEXTRA_VERSION=${direwolf_VERSION_COMMIT}")
endif() endif()
set(CUSTOM_SRC_DIR "${CMAKE_SOURCE_DIR}/src")
set(CUSTOM_EXTERNAL_DIR "${CMAKE_SOURCE_DIR}/external") set(CUSTOM_EXTERNAL_DIR "${CMAKE_SOURCE_DIR}/external")
set(CUSTOM_MISC_DIR "${CUSTOM_EXTERNAL_DIR}/misc") set(CUSTOM_MISC_DIR "${CUSTOM_EXTERNAL_DIR}/misc")
set(CUSTOM_REGEX_DIR "${CUSTOM_EXTERNAL_DIR}/regex") set(CUSTOM_REGEX_DIR "${CUSTOM_EXTERNAL_DIR}/regex")
@ -80,6 +77,9 @@ set(CUSTOM_TELEMETRY_DIR "${CUSTOM_SCRIPTS_DIR}/telemetry-toolkit")
set(CUSTOM_CONF_DIR "${CMAKE_SOURCE_DIR}/conf") set(CUSTOM_CONF_DIR "${CMAKE_SOURCE_DIR}/conf")
set(CUSTOM_DOC_DIR "${CMAKE_SOURCE_DIR}/doc") set(CUSTOM_DOC_DIR "${CMAKE_SOURCE_DIR}/doc")
set(CUSTOM_MAN_DIR "${CMAKE_SOURCE_DIR}/man") set(CUSTOM_MAN_DIR "${CMAKE_SOURCE_DIR}/man")
set(CUSTOM_TEST_DIR "${CMAKE_SOURCE_DIR}/test")
set(CUSTOM_TEST_SCRIPTS_DIR "${CUSTOM_TEST_DIR}/scripts")
set(CUSTOM_SHELL_SHABANG "#!/bin/sh -e")
# if we don't set build_type # if we don't set build_type
if(NOT DEFINED CMAKE_BUILD_TYPE OR "${CMAKE_BUILD_TYPE}" STREQUAL "") if(NOT DEFINED CMAKE_BUILD_TYPE OR "${CMAKE_BUILD_TYPE}" STREQUAL "")
@ -124,6 +124,8 @@ elseif (WIN32)
# compile with full multicore # compile with full multicore
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /MP") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /MP")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /MP") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /MP")
set(CUSTOM_SHELL_BIN "")
endif() endif()
if (C_CLANG OR C_GCC) if (C_CLANG OR C_GCC)
@ -191,6 +193,15 @@ add_subdirectory(${CUSTOM_MISC_DIR})
# direwolf source code and utilities # direwolf source code and utilities
add_subdirectory(src) add_subdirectory(src)
# ctest
# Note CMake will generate tests only if the enable_testing() command
# has been invoked. The CTest module invokes the command automatically
# when the BUILD_TESTING option is ON.
include(CTest)
if(BUILD_TESTING)
add_subdirectory(test)
endif()
# manage scripts # manage scripts
add_subdirectory(scripts) add_subdirectory(scripts)

View File

@ -1,5 +1,6 @@
# global includes # global includes
# not ideal but not so slow # not ideal but not so slow
# otherwise use target_include_directories
include_directories( include_directories(
${GPSD_INCLUDE_DIRS} ${GPSD_INCLUDE_DIRS}
${HAMLIB_INCLUDE_DIRS} ${HAMLIB_INCLUDE_DIRS}
@ -11,8 +12,7 @@ include_directories(
# build gen_fff to create fsk_fast_filter.h # build gen_fff to create fsk_fast_filter.h
# optimization for slow processors # optimization for slow processors
set(gen_fff_SOURCES list(APPEND gen_fff_SOURCES
${gen_fff_SOURCES}
demod_afsk.c demod_afsk.c
dsp.c dsp.c
textcolor.c textcolor.c
@ -32,9 +32,9 @@ add_custom_command(TARGET gen_fff
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
) )
# direwolf # direwolf
set(direwolf_SOURCES list(APPEND direwolf_SOURCES
${direwolf_SOURCES}
direwolf.c direwolf.c
aprs_tt.c aprs_tt.c
audio_stats.c audio_stats.c
@ -97,29 +97,25 @@ set(direwolf_SOURCES
) )
if(LINUX) if(LINUX)
set(direwolf_SOURCES list(APPEND direwolf_SOURCES
${direwolf_SOURCES}
audio.c audio.c
) )
if(UDEV_FOUND) if(UDEV_FOUND)
set(direwolf_SOURCES list(APPEND direwolf_SOURCES
${direwolf_SOURCES}
cm108.c cm108.c
) )
endif() endif()
elseif(WIN32) # windows elseif(WIN32) # windows
set(direwolf_SOURCES list(APPEND direwolf_SOURCES
${direwolf_SOURCES} audio_win.c
audio_win.c
# icon # icon
${CMAKE_SOURCE_DIR}/cmake/cpack/direwolf.rc ${CMAKE_SOURCE_DIR}/cmake/cpack/direwolf.rc
) )
else() # macOS freebsd openbsd else() # macOS freebsd openbsd
set(direwolf_SOURCES list(APPEND direwolf_SOURCES
${direwolf_SOURCES} audio_portaudio.c
audio_portaudio.c )
)
endif() endif()
add_executable(direwolf add_executable(direwolf
@ -141,8 +137,7 @@ target_link_libraries(direwolf
) )
# decode_aprs # decode_aprs
set(decode_aprs_SOURCES list(APPEND decode_aprs_SOURCES
${decode_aprs_SOURCES}
decode_aprs.c decode_aprs.c
kiss_frame.c kiss_frame.c
ax25_pad.c ax25_pad.c
@ -178,8 +173,7 @@ target_link_libraries(decode_aprs
# Convert between text and touch tone representation. # Convert between text and touch tone representation.
# text2tt # text2tt
set(text2tt_SOURCES list(APPEND text2tt_SOURCES
${text2tt_SOURCES}
tt_text.c tt_text.c
) )
@ -196,8 +190,7 @@ target_link_libraries(text2tt
) )
# tt2text # tt2text
set(tt2text_SOURCES list(APPEND tt2text_SOURCES
${tt2text_SOURCES}
tt_text.c tt_text.c
) )
@ -216,8 +209,7 @@ target_link_libraries(tt2text
# Convert between Latitude/Longitude and UTM coordinates. # Convert between Latitude/Longitude and UTM coordinates.
# ll2utm # ll2utm
set(ll2utm_SOURCES list(APPEND ll2utm_SOURCES
${ll2utm_SOURCES}
ll2utm.c ll2utm.c
textcolor.c textcolor.c
) )
@ -232,8 +224,7 @@ target_link_libraries(ll2utm
) )
# utm2ll # utm2ll
set(utm2ll_SOURCES list(APPEND utm2ll_SOURCES
${utm2ll_SOURCES}
utm2ll.c utm2ll.c
textcolor.c textcolor.c
) )
@ -250,8 +241,7 @@ target_link_libraries(utm2ll
# Convert from log file to GPX. # Convert from log file to GPX.
# log2gpx # log2gpx
set(log2gpx_SOURCES list(APPEND log2gpx_SOURCES
${log2gpx_SOURCES}
log2gpx.c log2gpx.c
textcolor.c textcolor.c
) )
@ -267,8 +257,7 @@ target_link_libraries(log2gpx
# Test application to generate sound. # Test application to generate sound.
# gen_packets # gen_packets
set(gen_packets_SOURCES list(APPEND gen_packets_SOURCES
${gen_packets_SOURCES}
gen_packets.c gen_packets.c
ax25_pad.c ax25_pad.c
hdlc_send.c hdlc_send.c
@ -291,8 +280,7 @@ target_link_libraries(gen_packets
# Unit test for AFSK demodulator # Unit test for AFSK demodulator
# atest # atest
set(atest_SOURCES list(APPEND atest_SOURCES
${atest_SOURCES}
atest.c atest.c
demod.c demod.c
demod_afsk.c demod_afsk.c
@ -333,8 +321,7 @@ target_link_libraries(atest
# Multiple AGWPE network or serial port clients to test TNCs side by side. # Multiple AGWPE network or serial port clients to test TNCs side by side.
# aclients # aclients
set(aclients_SOURCES list(APPEND aclients_SOURCES
${aclients_SOURCES}
aclients.c aclients.c
ax25_pad.c ax25_pad.c
fcs_calc.c fcs_calc.c
@ -354,8 +341,7 @@ target_link_libraries(aclients
# Talk to a KISS TNC. # Talk to a KISS TNC.
# Note: kiss_frame.c has conditional compilation on KISSUTIL. # Note: kiss_frame.c has conditional compilation on KISSUTIL.
# kissutil # kissutil
set(kissutil_SOURCES list(APPEND kissutil_SOURCES
${kissutil_SOURCES}
kissutil.c kissutil.c
kiss_frame.c kiss_frame.c
ax25_pad.c ax25_pad.c
@ -383,8 +369,7 @@ target_link_libraries(kissutil
# List USB audio adapters than can use GPIO for PTT. # List USB audio adapters than can use GPIO for PTT.
# cm108 # cm108
if(UDEV_FOUND) if(UDEV_FOUND)
set(cm108_SOURCES list(APPEND cm108_SOURCES
${cm108_SOURCES}
cm108.c cm108.c
textcolor.c textcolor.c
) )
@ -406,8 +391,7 @@ endif()
# Touch Tone to Speech sample application. # Touch Tone to Speech sample application.
# ttcalc # ttcalc
set(ttcalc_SOURCES list(APPEND ttcalc_SOURCES
${ttcalc_SOURCES}
ttcalc.c ttcalc.c
ax25_pad.c ax25_pad.c
fcs_calc.c fcs_calc.c
@ -438,18 +422,3 @@ install(TARGETS kissutil DESTINATION bin)
if(UDEV_FOUND) if(UDEV_FOUND)
install(TARGETS cm108 DESTINATION bin) install(TARGETS cm108 DESTINATION bin)
endif() endif()
## TESTS
# Note CMake will generate tests only if the enable_testing() command
# has been invoked. The CTest module invokes the command automatically
# when the BUILD_TESTING option is ON.
include(CTest)
if(BUILD_TESTING)
# add_test(NAME <name> COMMAND <command> [<arg>...]
# [CONFIGURATIONS <config>...]
# [WORKING_DIRECTORY <dir>])
endif()

569
test/CMakeLists.txt Normal file
View File

@ -0,0 +1,569 @@
# this is a trick to avoid to more complication
# because configure_file() is done a configuration time
set(CUSTOM_TEST_BINARY_DIR "${CMAKE_BINARY_DIR}/test")
set(GEN_PACKETS_BIN "${CMAKE_BINARY_DIR}/src/gen_packets${CMAKE_EXECUTABLE_SUFFIX}")
set(ATEST_BIN "${CMAKE_BINARY_DIR}/src/atest${CMAKE_EXECUTABLE_SUFFIX}")
if(WIN32)
set(CUSTOM_SCRIPT_SUFFIX ".bat")
else()
set(CUSTOM_SCRIPT_SUFFIX "")
endif()
set(TEST_CHECK-MODEM1200_FILE "check-modem1200")
set(TEST_CHECK-MODEM300_FILE "check-modem300")
set(TEST_CHECK-MODEM9600_FILE "check-modem9600")
set(TEST_CHECK-MODEM19200_FILE "check-modem19200")
set(TEST_CHECK-MODEM2400-a_FILE "check-modem2400-a")
set(TEST_CHECK-MODEM2400-b_FILE "check-modem2400-b")
set(TEST_CHECK-MODEM2400-g_FILE "check-modem2400-g")
set(TEST_CHECK-MODEM4800_FILE "check-modem4800")
# generate the scripts that run the tests
configure_file(
"${CUSTOM_TEST_SCRIPTS_DIR}/${TEST_CHECK-MODEM1200_FILE}"
"${CUSTOM_TEST_BINARY_DIR}/${TEST_CHECK-MODEM1200_FILE}${CUSTOM_SCRIPT_SUFFIX}"
@ONLY
)
configure_file(
"${CUSTOM_TEST_SCRIPTS_DIR}/${TEST_CHECK-MODEM300_FILE}"
"${CUSTOM_TEST_BINARY_DIR}${CUSTOM_SCRIPT_SUFFIX}"
@ONLY
)
configure_file(
"${CUSTOM_TEST_SCRIPTS_DIR}/${TEST_CHECK-MODEM9600_FILE}"
"${CUSTOM_TEST_BINARY_DIR}/${TEST_CHECK-MODEM9600_FILE}${CUSTOM_SCRIPT_SUFFIX}"
@ONLY
)
configure_file(
"${CUSTOM_TEST_SCRIPTS_DIR}/${TEST_CHECK-MODEM19200_FILE}"
"${CUSTOM_TEST_BINARY_DIR}/${TEST_CHECK-MODEM19200_FILE}${CUSTOM_SCRIPT_SUFFIX}"
@ONLY
)
configure_file(
"${CUSTOM_TEST_SCRIPTS_DIR}/${TEST_CHECK-MODEM2400-a_FILE}"
"${CUSTOM_TEST_BINARY_DIR}/${TEST_CHECK-MODEM2400-a_FILE}${CUSTOM_SCRIPT_SUFFIX}"
@ONLY
)
configure_file(
"${CUSTOM_TEST_SCRIPTS_DIR}/${TEST_CHECK-MODEM2400-b_FILE}"
"${CUSTOM_TEST_BINARY_DIR}/${TEST_CHECK-MODEM2400-b_FILE}${CUSTOM_SCRIPT_SUFFIX}"
@ONLY
)
configure_file(
"${CUSTOM_TEST_SCRIPTS_DIR}/${TEST_CHECK-MODEM2400-g_FILE}"
"${CUSTOM_TEST_BINARY_DIR}/${TEST_CHECK-MODEM2400-g_FILE}${CUSTOM_SCRIPT_SUFFIX}"
@ONLY
)
configure_file(
"${CUSTOM_TEST_SCRIPTS_DIR}/${TEST_CHECK-MODEM4800_FILE}"
"${CUSTOM_TEST_BINARY_DIR}/${TEST_CHECK-MODEM4800_FILE}${CUSTOM_SCRIPT_SUFFIX}"
@ONLY
)
# global includes
# not ideal but not so slow
# otherwise use target_include_directories
include_directories(
${CUSTOM_SRC_DIR}
${GPSD_INCLUDE_DIRS}
${HAMLIB_INCLUDE_DIRS}
${ALSA_INCLUDE_DIRS}
${UDEV_INCLUDE_DIRS}
${PORTAUDIO_INCLUDE_DIRS}
${CUSTOM_GEOTRANZ_DIR}
${CMAKE_BINARY_DIR}/src
)
# Unit test for demodulators
list(APPEND atest9_SOURCES
${CUSTOM_SRC_DIR}/atest.c
${CUSTOM_SRC_DIR}/demod.c
${CUSTOM_SRC_DIR}/dsp.c
${CUSTOM_SRC_DIR}/demod_afsk.c
${CUSTOM_SRC_DIR}/demod_psk.c
${CUSTOM_SRC_DIR}/demod_9600.c
${CUSTOM_SRC_DIR}/hdlc_rec.c
${CUSTOM_SRC_DIR}/hdlc_rec2.c
${CUSTOM_SRC_DIR}/multi_modem.c
${CUSTOM_SRC_DIR}/rrbb.c
${CUSTOM_SRC_DIR}/fcs_calc.c
${CUSTOM_SRC_DIR}/ax25_pad.c
${CUSTOM_SRC_DIR}/decode_aprs.c
${CUSTOM_SRC_DIR}/dwgpsnmea.c
${CUSTOM_SRC_DIR}/dwgps.c
${CUSTOM_SRC_DIR}/dwgpsd.c
${CUSTOM_SRC_DIR}/serial_port.c
${CUSTOM_SRC_DIR}/latlong.c
${CUSTOM_SRC_DIR}/symbols.c
${CUSTOM_SRC_DIR}/textcolor.c
${CUSTOM_SRC_DIR}/telemetry.c
${CUSTOM_SRC_DIR}/dtime_now.c
${CUSTOM_SRC_DIR}/tt_text.c
)
add_executable(atest9
${atest9_SOURCES}
)
add_dependencies(atest9 gen_fff)
target_link_libraries(atest9
${MISC_LIBRARIES}
${GPSD_LIBRARIES}
Threads::Threads
)
# Unit test for inner digipeater algorithm
list(APPEND dtest_SOURCES
${CUSTOM_SRC_DIR}/digipeater.c
${CUSTOM_SRC_DIR}/dedupe.c
${CUSTOM_SRC_DIR}/pfilter.c
${CUSTOM_SRC_DIR}/ax25_pad.c
${CUSTOM_SRC_DIR}/fcs_calc.c
${CUSTOM_SRC_DIR}/tq.c
${CUSTOM_SRC_DIR}/textcolor.c
${CUSTOM_SRC_DIR}/decode_aprs.c
${CUSTOM_SRC_DIR}/dwgpsnmea.c
${CUSTOM_SRC_DIR}/dwgps.c
${CUSTOM_SRC_DIR}/dwgpsd.c
${CUSTOM_SRC_DIR}/serial_port.c
${CUSTOM_SRC_DIR}/latlong.c
${CUSTOM_SRC_DIR}/telemetry.c
${CUSTOM_SRC_DIR}/symbols.c
${CUSTOM_SRC_DIR}/tt_text.c
)
add_executable(dtest
${dtest_SOURCES}
)
set_target_properties(dtest
PROPERTIES COMPILE_FLAGS "-DDIGITEST"
)
target_link_libraries(dtest
${MISC_LIBRARIES}
${REGEX_LIBRARIES}
${GPSD_LIBRARIES}
Threads::Threads
)
# Unit test for APRStt tone seqence parsing.
list(APPEND ttest_SOURCES
${CUSTOM_SRC_DIR}/aprs_tt.c
${CUSTOM_SRC_DIR}/tt_text.c
${CUSTOM_SRC_DIR}/latlong.c
${CUSTOM_SRC_DIR}/textcolor.c
)
add_executable(ttest
${ttest_SOURCES}
)
set_target_properties(ttest
PROPERTIES COMPILE_FLAGS "-DTT_MAIN"
)
target_link_libraries(ttest
${MISC_LIBRARIES}
${GEOTRANZ_LIBRARIES}
)
# Unit test for APRStt tone sequence / text conversions.
list(APPEND tttexttest_SOURCES
${CUSTOM_SRC_DIR}/tt_text.c
${CUSTOM_SRC_DIR}/textcolor.c
)
add_executable(tttexttest
${tttexttest_SOURCES}
)
set_target_properties(tttexttest
PROPERTIES COMPILE_FLAGS "-DTTT_TEST"
)
target_link_libraries(tttexttest
${MISC_LIBRARIES}
)
# Unit test for Packet Filtering.
list(APPEND pftest_SOURCES
${CUSTOM_SRC_DIR}/pfilter.c
${CUSTOM_SRC_DIR}/ax25_pad.c
${CUSTOM_SRC_DIR}/textcolor.c
${CUSTOM_SRC_DIR}/fcs_calc.c
${CUSTOM_SRC_DIR}/decode_aprs.c
${CUSTOM_SRC_DIR}/dwgpsnmea.c
${CUSTOM_SRC_DIR}/dwgps.c
${CUSTOM_SRC_DIR}/dwgpsd.c
${CUSTOM_SRC_DIR}/serial_port.c
${CUSTOM_SRC_DIR}/latlong.c
${CUSTOM_SRC_DIR}/symbols.c
${CUSTOM_SRC_DIR}/telemetry.c
${CUSTOM_SRC_DIR}/tt_text.c
)
add_executable(pftest
${pftest_SOURCES}
)
set_target_properties(pftest
PROPERTIES COMPILE_FLAGS "-DPFTEST"
)
target_link_libraries(pftest
${MISC_LIBRARIES}
${REGEX_LIBRARIES}
${GPSD_LIBRARIES}
Threads::Threads
)
# Unit test for telemetry decoding.
list(APPEND tlmtest_SOURCES
${CUSTOM_SRC_DIR}/telemetry.c
${CUSTOM_SRC_DIR}/ax25_pad.c
${CUSTOM_SRC_DIR}/fcs_calc.c
${CUSTOM_SRC_DIR}/textcolor.c
)
add_executable(tlmtest
${tlmtest_SOURCES}
)
set_target_properties(tlmtest
PROPERTIES COMPILE_FLAGS "-DTEST"
)
target_link_libraries(tlmtest
${MISC_LIBRARIES}
${REGEX_LIBRARIES}
)
# Unit test for location coordinate conversion.
list(APPEND lltest_SOURCES
${CUSTOM_SRC_DIR}/latlong.c
${CUSTOM_SRC_DIR}/textcolor.c
)
add_executable(lltest
${lltest_SOURCES}
)
set_target_properties(lltest
PROPERTIES COMPILE_FLAGS "-DLLTEST"
)
target_link_libraries(lltest
${MISC_LIBRARIES}
)
# Unit test for encoding position & object report.
list(APPEND enctest_SOURCES
${CUSTOM_SRC_DIR}/encode_aprs.c
${CUSTOM_SRC_DIR}/latlong.c
${CUSTOM_SRC_DIR}/textcolor.c
)
add_executable(enctest
${enctest_SOURCES}
)
set_target_properties(enctest
PROPERTIES COMPILE_FLAGS "-DEN_MAIN"
)
target_link_libraries(enctest
${MISC_LIBRARIES}
)
# Unit test for KISS encapsulation.
list(APPEND kisstest_SOURCES
${CUSTOM_SRC_DIR}/kiss_frame.c
)
add_executable(kisstest
${kisstest_SOURCES}
)
set_target_properties(kisstest
PROPERTIES COMPILE_FLAGS "-DKISSTEST"
)
# Unit test for constructing frames besides UI.
list(APPEND pad2test_SOURCES
${CUSTOM_SRC_DIR}/ax25_pad2.c
${CUSTOM_SRC_DIR}/ax25_pad.c
${CUSTOM_SRC_DIR}/fcs_calc.c
${CUSTOM_SRC_DIR}/textcolor.c
)
add_executable(pad2test
${pad2test_SOURCES}
)
set_target_properties(pad2test
PROPERTIES COMPILE_FLAGS "-DPAD2TEST"
)
target_link_libraries(pad2test
${MISC_LIBRARIES}
${REGEX_LIBRARIES}
)
# Unit Test for XID frame encode/decode.
list(APPEND xidtest_SOURCES
${CUSTOM_SRC_DIR}/xid.c
${CUSTOM_SRC_DIR}/textcolor.c
)
add_executable(xidtest
${xidtest_SOURCES}
)
set_target_properties(xidtest
PROPERTIES COMPILE_FLAGS "-DXIDTEST"
)
target_link_libraries(xidtest
${MISC_LIBRARIES}
)
# Unit Test for DTMF encode/decode.
list(APPEND dtmftest_SOURCES
${CUSTOM_SRC_DIR}/dtmf.c
${CUSTOM_SRC_DIR}/textcolor.c
)
add_executable(dtmftest
${dtmftest_SOURCES}
)
set_target_properties(dtmftest
PROPERTIES COMPILE_FLAGS "-DDTMF_TEST"
)
# doing ctest on previous programs
add_test(dtest dtest)
add_test(ttest ttest)
add_test(tttexttest tttexttest)
add_test(pftest pftest)
add_test(tlmtest tlmtest)
add_test(lltest lltest)
add_test(enctest enctest)
add_test(kisstest kisstest)
add_test(pad2test pad2test)
add_test(xidtest xidtest)
add_test(dtmftest dtmftest)
add_test(check-modem1200 "${CUSTOM_TEST_BINARY_DIR}/${TEST_CHECK-MODEM1200_FILE}${CUSTOM_SCRIPT_SUFFIX}")
add_test(check-modem300 "${CUSTOM_TEST_BINARY_DIR}/${TEST_CHECK-MODEM300_FILE}${CUSTOM_SCRIPT_SUFFIX}")
add_test(check-modem9600 "${CUSTOM_TEST_BINARY_DIR}/${TEST_CHECK-MODEM9600_FILE}${CUSTOM_SCRIPT_SUFFIX}")
add_test(check-modem19200 "${CUSTOM_TEST_BINARY_DIR}/${TEST_CHECK-MODEM19200_FILE}${CUSTOM_SCRIPT_SUFFIX}")
add_test(check-modem2400-a "${CUSTOM_TEST_BINARY_DIR}/${TEST_CHECK-MODEM2400-a_FILE}${CUSTOM_SCRIPT_SUFFIX}")
add_test(check-modem2400-b "${CUSTOM_TEST_BINARY_DIR}/${TEST_CHECK-MODEM2400-b_FILE}${CUSTOM_SCRIPT_SUFFIX}")
add_test(check-modem2400-g "${CUSTOM_TEST_BINARY_DIR}/${TEST_CHECK-MODEM2400-g_FILE}${CUSTOM_SCRIPT_SUFFIX}")
add_test(check-modem4800 "${CUSTOM_TEST_BINARY_DIR}/${TEST_CHECK-MODEM4800_FILE}${CUSTOM_SCRIPT_SUFFIX}")
# TODO miss the audio file
# ./atest9 -B 9600 ../walkabout9600.wav | grep "packets decoded in" >atest.out
# ----------------------------- Manual tests and experiments ---------------------------
if(OPTIONAL_TEST)
# Unit test for IGate
list(APPEND itest_SOURCES
${CUSTOM_SRC_DIR}/igate.c
${CUSTOM_SRC_DIR}/ax25_pad.c
${CUSTOM_SRC_DIR}/fcs_calc.c
${CUSTOM_SRC_DIR}/mheard.c
${CUSTOM_SRC_DIR}/pfilter.c
${CUSTOM_SRC_DIR}/telemetry.c
${CUSTOM_SRC_DIR}/decode_aprs.c
${CUSTOM_SRC_DIR}/dwgpsnmea.c
${CUSTOM_SRC_DIR}/dwgps.c
${CUSTOM_SRC_DIR}/dwgpsd.c
${CUSTOM_SRC_DIR}/serial_port.c
${CUSTOM_SRC_DIR}/textcolor.c
${CUSTOM_SRC_DIR}/dtime_now.c
${CUSTOM_SRC_DIR}/latlong.c
${CUSTOM_SRC_DIR}/tt_text.c
${CUSTOM_SRC_DIR}/symbols.c
)
add_executable(itest
${itest_SOURCES}
)
set_target_properties(itest
PROPERTIES COMPILE_FLAGS "-DITEST"
)
target_link_libraries(itest
${MISC_LIBRARIES}
${GPSD_LIBRARIES}
Threads::Threads
)
# For demodulator tweaking experiments.
list(APPEND testagc_SOURCES
${CUSTOM_SRC_DIR}/atest.c
${CUSTOM_SRC_DIR}/demod.c
${CUSTOM_SRC_DIR}/dsp.c
${CUSTOM_SRC_DIR}/demod_afsk.c
${CUSTOM_SRC_DIR}/demod_psk.c
${CUSTOM_SRC_DIR}/demod_9600.c
${CUSTOM_SRC_DIR}/hdlc_rec.c
${CUSTOM_SRC_DIR}/hdlc_rec2.c
${CUSTOM_SRC_DIR}/multi_modem.c
${CUSTOM_SRC_DIR}/rrbb.c
${CUSTOM_SRC_DIR}/fcs_calc.c
${CUSTOM_SRC_DIR}/ax25_pad.c
${CUSTOM_SRC_DIR}/decode_aprs.c
${CUSTOM_SRC_DIR}/dwgpsnmea.c
${CUSTOM_SRC_DIR}/dwgps.c
${CUSTOM_SRC_DIR}/dwgpsd.c
${CUSTOM_SRC_DIR}/serial_port.c
${CUSTOM_SRC_DIR}/telemetry.c
${CUSTOM_SRC_DIR}/dtime_now.c
${CUSTOM_SRC_DIR}/latlong.c
${CUSTOM_SRC_DIR}/tt_text.c
${CUSTOM_SRC_DIR}/symbols.c
${CUSTOM_SRC_DIR}/textcolor.c
)
add_executable(testagc
${testagc_SOURCES}
)
add_dependencies(testagc gen_fff)
target_link_libraries(testagc
${MISC_LIBRARIES}
${GPSD_LIBRARIES}
Threads::Threads
)
# Send GPS location to KISS TNC each second.
list(APPEND walk96_SOURCES
${CUSTOM_SRC_DIR}/walk96.c
${CUSTOM_SRC_DIR}/dwgps.c
${CUSTOM_SRC_DIR}/dwgpsnmea.c
${CUSTOM_SRC_DIR}/dwgpsd.c
${CUSTOM_SRC_DIR}/kiss_frame.c
${CUSTOM_SRC_DIR}/latlong.c
${CUSTOM_SRC_DIR}/encode_aprs.c
${CUSTOM_SRC_DIR}/serial_port.c
${CUSTOM_SRC_DIR}/textcolor.c
${CUSTOM_SRC_DIR}/ax25_pad.c
${CUSTOM_SRC_DIR}/fcs_calc.c
${CUSTOM_SRC_DIR}/xmit.c
${CUSTOM_SRC_DIR}/xid.c
${CUSTOM_SRC_DIR}/hdlc_send.c
${CUSTOM_SRC_DIR}/gen_tone.c
${CUSTOM_SRC_DIR}/ptt.c
${CUSTOM_SRC_DIR}/tq.c
${CUSTOM_SRC_DIR}/hdlc_rec.c
${CUSTOM_SRC_DIR}/hdlc_rec2.c
${CUSTOM_SRC_DIR}/rrbb.c
${CUSTOM_SRC_DIR}/dsp.c
${CUSTOM_SRC_DIR}/multi_modem.c
${CUSTOM_SRC_DIR}/demod.c
${CUSTOM_SRC_DIR}/demod_afsk.c
${CUSTOM_SRC_DIR}/demod_psk.c
${CUSTOM_SRC_DIR}/demod_9600.c
${CUSTOM_SRC_DIR}/rdq.c
${CUSTOM_SRC_DIR}/server.c
${CUSTOM_SRC_DIR}/morse.c
${CUSTOM_SRC_DIR}/dtmf.c
${CUSTOM_SRC_DIR}/audio_stats.c
${CUSTOM_SRC_DIR}/dtime_now.c
${CUSTOM_SRC_DIR}/dlq.c
)
if(LINUX)
list(APPEND walk96_SOURCES
${CUSTOM_SRC_DIR}/audio.c
)
if(UDEV_FOUND)
list(APPEND walk96_SOURCES
${CUSTOM_SRC_DIR}/cm108.c
)
endif()
elseif(WIN32) # windows
list(APPEND walk96_SOURCES
${CUSTOM_SRC_DIR}/audio_win.c
)
else() # macOS freebsd openbsd
list(APPEND walk96_SOURCES
${CUSTOM_SRC_DIR}/audio_portaudio.c
)
endif()
add_executable(walk96
${walk96_SOURCES}
)
set_target_properties(walk96
PROPERTIES COMPILE_FLAGS "-DWALK96"
)
target_link_libraries(walk96
${MISC_LIBRARIES}
${REGEX_LIBRARIES}
${GPSD_LIBRARIES}
${HAMLIB_LIBRARIES}
${ALSA_LIBRARIES}
${PORTAUDIO_LIBRARIES}
${UDEV_LIBRARIES}
Threads::Threads
)
# TODO miss the audio file
# testagc
# ./atest -P H+ -F 0 ../01_Track_1.wav ../02_Track_2.wav | grep "packets decoded in" >atest.out
# testagc3
# ./gen_packets -B 300 -n 100 -o noisy3.wav
# ./atest3 -B 300 -P D -D 3 noisy3.wav | grep "packets decoded in" >atest.out
# testagc96
# ./gen_packets -B 9600 -n 100 -o noisy96.wav
# ./atest96 -B 9600 ../walkabout9600c.wav noisy96.wav zzz16.wav zzz16.wav zzz16.wav zzz8.wav zzz8.wav zzz8.wav | grep "packets decoded in" >atest.out
# testagc24
# ./atest24 -B 2400 test2400.wav | grep "packets decoded in" >atest.out
# testagc24mfj
# ./atest24mfj -F 1 -B 2400 ../ref-doc/MFJ-2400-PSK/2k4_short.wav
# testagc48
# ./atest48 -B 4800 test4800.wav | grep "packets decoded in" >atest.out
endif() # OPTIONAL_TEST

5
test/scripts/check-modem1200 Executable file
View File

@ -0,0 +1,5 @@
@CUSTOM_SHELL_SHABANG@
@GEN_PACKETS_BIN@ -n 100 -o test12.wav
@ATEST_BIN@ -F0 -PE -L64 -G72 test12.wav
@ATEST_BIN@ -F1 -PE -L70 -G75 test12.wav

7
test/scripts/check-modem19200 Executable file
View File

@ -0,0 +1,7 @@
@CUSTOM_SHELL_SHABANG@
@GEN_PACKETS_BIN@ -r 96000 -B19200 -a 170 -o test19.wav
@ATEST_BIN@ -B19200 -F0 -L4 test19.wav
@GEN_PACKETS_BIN@ -r 96000 -B19200 -n 100 -o test19.wav
@ATEST_BIN@ -B19200 -F0 -L60 -G64 test19.wav
@ATEST_BIN@ -B19200 -F1 -L64 -G68 test19.wav

5
test/scripts/check-modem2400-a Executable file
View File

@ -0,0 +1,5 @@
@CUSTOM_SHELL_SHABANG@
@GEN_PACKETS_BIN@ -B2400 -j -n 100 -o test24-a.wav
@ATEST_BIN@ -B2400 -j -F0 -L76 -G80 test24-a.wav
@ATEST_BIN@ -B2400 -j -F1 -L84 -G88 test24-a.wav

5
test/scripts/check-modem2400-b Executable file
View File

@ -0,0 +1,5 @@
@CUSTOM_SHELL_SHABANG@
@GEN_PACKETS_BIN@ -B2400 -J -n 100 -o test24-b.wav
@ATEST_BIN@ -B2400 -J -F0 -L79 -G83 test24-b.wav
@ATEST_BIN@ -B2400 -J -F1 -L87 -G91 test24-b.wav

4
test/scripts/check-modem2400-g Executable file
View File

@ -0,0 +1,4 @@
@CUSTOM_SHELL_SHABANG@
@GEN_PACKETS_BIN@ -B2400 -g -n 100 -o test24-g.wav
@ATEST_BIN@ -B2400 -g -F0 -L99 -G100 test24-g.wav

5
test/scripts/check-modem300 Executable file
View File

@ -0,0 +1,5 @@
@CUSTOM_SHELL_SHABANG@
@GEN_PACKETS_BIN@ -B300 -n 100 -o test3.wav
@ATEST_BIN@ -B300 -F0 -L68 -G69 test3.wav
@ATEST_BIN@ -B300 -F1 -L71 -G75 test3.wav

5
test/scripts/check-modem4800 Executable file
View File

@ -0,0 +1,5 @@
@CUSTOM_SHELL_SHABANG@
@GEN_PACKETS_BIN@ -B4800 -n 100 -o test48.wav
@ATEST_BIN@ -B4800 -F0 -L70 -G74 test48.wav
@ATEST_BIN@ -B4800 -F1 -L79 -G84 test48.wav

7
test/scripts/check-modem9600 Executable file
View File

@ -0,0 +1,7 @@
@CUSTOM_SHELL_SHABANG@
@GEN_PACKETS_BIN@ -B9600 -a 170 -o test96.wav
@ATEST_BIN@ -B9600 -F0 -L4 -G4 test96.wav
@GEN_PACKETS_BIN@ -B9600 -n 100 -o test96.wav
@ATEST_BIN@ -B9600 -F0 -L61 -G65 test96.wav
@ATEST_BIN@ -B9600 -F1 -L62 -G66 test96.wav