mirror of
https://github.com/PX4/PX4-Autopilot.git
synced 2026-05-31 18:47:21 +08:00
Merge pull request #1592 from dagar/unittests
Move all unittests to cmake
This commit is contained in:
@@ -236,7 +236,7 @@ testbuild:
|
|||||||
# unit tests.
|
# unit tests.
|
||||||
.PHONY: tests
|
.PHONY: tests
|
||||||
tests:
|
tests:
|
||||||
$(Q) (cd $(PX4_BASE)/unittests && $(MAKE) unittests)
|
$(Q) (mkdir -p $(PX4_BASE)/unittests/build && cd $(PX4_BASE)/unittests/build && cmake .. && $(MAKE) unittests)
|
||||||
|
|
||||||
#
|
#
|
||||||
# Cleanup targets. 'clean' should remove all built products and force
|
# Cleanup targets. 'clean' should remove all built products and force
|
||||||
|
|||||||
+62
-22
@@ -2,35 +2,75 @@ cmake_minimum_required(VERSION 2.8)
|
|||||||
project(unittests)
|
project(unittests)
|
||||||
enable_testing()
|
enable_testing()
|
||||||
|
|
||||||
set(GTEST_DIR gtest)
|
|
||||||
add_subdirectory(${GTEST_DIR})
|
|
||||||
include_directories(${GTEST_DIR}/include)
|
|
||||||
include_directories(${CMAKE_SOURCE_DIR})
|
|
||||||
include_directories(${CMAKE_SOURCE_DIR}/../src)
|
|
||||||
include_directories(${CMAKE_SOURCE_DIR}/../src/modules)
|
|
||||||
include_directories(${CMAKE_SOURCE_DIR}/../src/lib)
|
|
||||||
|
|
||||||
add_definitions(-D__EXPORT=)
|
|
||||||
|
|
||||||
function(add_gtest)
|
|
||||||
foreach(test_name ${ARGN})
|
|
||||||
target_link_libraries(${test_name} gtest_main)
|
|
||||||
add_test(${test_name}Test ${test_name})
|
|
||||||
endforeach()
|
|
||||||
endfunction()
|
|
||||||
|
|
||||||
include(CheckCXXCompilerFlag)
|
include(CheckCXXCompilerFlag)
|
||||||
CHECK_CXX_COMPILER_FLAG("-std=c++11" COMPILER_SUPPORTS_CXX11)
|
CHECK_CXX_COMPILER_FLAG("-std=c++11" COMPILER_SUPPORTS_CXX11)
|
||||||
CHECK_CXX_COMPILER_FLAG("-std=c++0x" COMPILER_SUPPORTS_CXX0X)
|
CHECK_CXX_COMPILER_FLAG("-std=c++0x" COMPILER_SUPPORTS_CXX0X)
|
||||||
if(COMPILER_SUPPORTS_CXX11)
|
if(COMPILER_SUPPORTS_CXX11)
|
||||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
|
||||||
elseif(COMPILER_SUPPORTS_CXX0X)
|
elseif(COMPILER_SUPPORTS_CXX0X)
|
||||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x")
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x")
|
||||||
else()
|
else()
|
||||||
message(STATUS "The compiler ${CMAKE_CXX_COMPILER} has no C++11 support. Please use a different C++ compiler.")
|
message(STATUS "The compiler ${CMAKE_CXX_COMPILER} has no C++11 support. Please use a different C++ compiler.")
|
||||||
endif()
|
endif()
|
||||||
|
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=c99")
|
||||||
|
|
||||||
|
set(GTEST_DIR gtest)
|
||||||
|
add_subdirectory(${GTEST_DIR})
|
||||||
|
include_directories(${GTEST_DIR}/include)
|
||||||
|
|
||||||
|
set(PX_SRC ${CMAKE_SOURCE_DIR}/../src)
|
||||||
|
include_directories(${CMAKE_SOURCE_DIR})
|
||||||
|
include_directories(${PX_SRC})
|
||||||
|
include_directories(${PX_SRC}/modules)
|
||||||
|
include_directories(${PX_SRC}/lib)
|
||||||
|
|
||||||
|
add_definitions(-D__EXPORT=)
|
||||||
|
|
||||||
|
# check
|
||||||
|
add_custom_target(unittests COMMAND ${CMAKE_CTEST_COMMAND} --output-on-failure)
|
||||||
|
|
||||||
|
function(add_gtest)
|
||||||
|
foreach(test_name ${ARGN})
|
||||||
|
target_link_libraries(${test_name} gtest_main)
|
||||||
|
add_test(NAME ${test_name} COMMAND ${test_name} WORKING_DIRECTORY ${CMAKE_SOURCE_DIR})
|
||||||
|
add_dependencies(unittests ${test_name})
|
||||||
|
endforeach()
|
||||||
|
endfunction()
|
||||||
|
|
||||||
|
|
||||||
# add each test
|
# add each test
|
||||||
# todo: add mixer_test sbus2_test st24_test sf0x_test
|
add_executable(autodeclination_test autodeclination_test.cpp ${PX_SRC}/lib/geo_lookup/geo_mag_declination.c)
|
||||||
add_executable(autodeclination_test autodeclination_test.cpp ${CMAKE_SOURCE_DIR}/../src/lib/geo_lookup/geo_mag_declination.c)
|
|
||||||
add_gtest(autodeclination_test)
|
add_gtest(autodeclination_test)
|
||||||
|
|
||||||
|
# mixer_test
|
||||||
|
add_custom_command(OUTPUT ${PX_SRC}/modules/systemlib/mixer/mixer_multirotor.generated.h
|
||||||
|
COMMAND ${PX_SRC}/modules/systemlib/mixer/multi_tables.py > ${PX_SRC}/modules/systemlib/mixer/mixer_multirotor.generated.h)
|
||||||
|
add_executable(mixer_test mixer_test.cpp hrt.cpp
|
||||||
|
${PX_SRC}/modules/systemlib/mixer/mixer.cpp
|
||||||
|
${PX_SRC}/modules/systemlib/mixer/mixer_group.cpp
|
||||||
|
${PX_SRC}/modules/systemlib/mixer/mixer_load.c
|
||||||
|
${PX_SRC}/modules/systemlib/mixer/mixer_multirotor.cpp
|
||||||
|
${PX_SRC}/modules/systemlib/mixer/mixer_multirotor.generated.h
|
||||||
|
${PX_SRC}/modules/systemlib/mixer/mixer_simple.cpp
|
||||||
|
${PX_SRC}/modules/systemlib/pwm_limit/pwm_limit.c
|
||||||
|
${PX_SRC}/systemcmds/tests/test_mixer.cpp)
|
||||||
|
add_gtest(mixer_test)
|
||||||
|
|
||||||
|
# conversion_test
|
||||||
|
add_executable(conversion_test conversion_test.cpp ${PX_SRC}/systemcmds/tests/test_conv.cpp)
|
||||||
|
add_gtest(conversion_test)
|
||||||
|
|
||||||
|
# sbus2_test
|
||||||
|
# TODO: move to gtest
|
||||||
|
add_executable(sbus2_test sbus2_test.cpp hrt.cpp)
|
||||||
|
add_gtest(sbus2_test)
|
||||||
|
|
||||||
|
# st24_test
|
||||||
|
# TODO: move to gtest
|
||||||
|
add_executable(st24_test st24_test.cpp hrt.cpp ${PX_SRC}/lib/rc/st24.c)
|
||||||
|
add_gtest(st24_test)
|
||||||
|
|
||||||
|
# sf0x_test
|
||||||
|
# TODO: move to gtest
|
||||||
|
add_executable(sf0x_test sf0x_test.cpp ${PX_SRC}/drivers/sf0x/sf0x_parser.cpp)
|
||||||
|
add_gtest(sf0x_test)
|
||||||
|
|||||||
@@ -1,95 +0,0 @@
|
|||||||
|
|
||||||
CC=$(CXX)
|
|
||||||
CFLAGS=-I. -I../src/modules -I ../src/include -I../src/drivers \
|
|
||||||
-I../src -I../src/lib -D__EXPORT="" -Dnullptr="0" -lm -std=c++11
|
|
||||||
|
|
||||||
# Points to the root of Google Test, relative to where this file is.
|
|
||||||
# Remember to tweak this if you move this file.
|
|
||||||
GTEST_DIR = gtest
|
|
||||||
|
|
||||||
# Flags passed to the preprocessor.
|
|
||||||
# Set Google Test's header directory as a system directory, such that
|
|
||||||
# the compiler doesn't generate warnings in Google Test headers.
|
|
||||||
CFLAGS += -isystem $(GTEST_DIR)/include
|
|
||||||
|
|
||||||
# All Google Test headers. Usually you shouldn't change this
|
|
||||||
# definition.
|
|
||||||
GTEST_HEADERS = $(GTEST_DIR)/include/gtest/*.h \
|
|
||||||
$(GTEST_DIR)/include/gtest/internal/*.h
|
|
||||||
|
|
||||||
# Usually you shouldn't tweak such internal variables, indicated by a
|
|
||||||
# trailing _.
|
|
||||||
GTEST_SRCS_ = $(GTEST_DIR)/src/*.cc $(GTEST_DIR)/src/*.h $(GTEST_HEADERS)
|
|
||||||
|
|
||||||
# For simplicity and to avoid depending on Google Test's
|
|
||||||
# implementation details, the dependencies specified below are
|
|
||||||
# conservative and not optimized. This is fine as Google Test
|
|
||||||
# compiles fast and for ordinary users its source rarely changes.
|
|
||||||
gtest-all.o: $(GTEST_SRCS_)
|
|
||||||
$(CC) $(CFLAGS) -I$(GTEST_DIR) -c \
|
|
||||||
$(GTEST_DIR)/src/gtest-all.cc
|
|
||||||
|
|
||||||
gtest_main.o: $(GTEST_SRCS_)
|
|
||||||
$(CC) $(CFLAGS) -I$(GTEST_DIR) -c \
|
|
||||||
$(GTEST_DIR)/src/gtest_main.cc
|
|
||||||
|
|
||||||
gtest.a: gtest-all.o
|
|
||||||
$(AR) $(ARFLAGS) $@ $^
|
|
||||||
|
|
||||||
gtest_main.a: gtest-all.o gtest_main.o
|
|
||||||
$(AR) $(ARFLAGS) $@ $^
|
|
||||||
|
|
||||||
|
|
||||||
all: mixer_test sbus2_test st24_test sf0x_test
|
|
||||||
|
|
||||||
MIXER_FILES=../src/systemcmds/tests/test_mixer.cpp \
|
|
||||||
../src/systemcmds/tests/test_conv.cpp \
|
|
||||||
../src/modules/systemlib/mixer/mixer_simple.cpp \
|
|
||||||
../src/modules/systemlib/mixer/mixer_multirotor.cpp \
|
|
||||||
../src/modules/systemlib/mixer/mixer.cpp \
|
|
||||||
../src/modules/systemlib/mixer/mixer_group.cpp \
|
|
||||||
../src/modules/systemlib/mixer/mixer_load.c \
|
|
||||||
../src/modules/systemlib/pwm_limit/pwm_limit.c \
|
|
||||||
hrt.cpp \
|
|
||||||
mixer_test.cpp
|
|
||||||
|
|
||||||
include ../src/modules/systemlib/mixer/multi_tables.mk
|
|
||||||
|
|
||||||
SBUS2_FILES=../src/modules/px4iofirmware/sbus.c \
|
|
||||||
hrt.cpp \
|
|
||||||
sbus2_test.cpp
|
|
||||||
|
|
||||||
ST24_FILES=../src/lib/rc/st24.c \
|
|
||||||
hrt.cpp \
|
|
||||||
st24_test.cpp
|
|
||||||
|
|
||||||
SF0X_FILES= \
|
|
||||||
hrt.cpp \
|
|
||||||
sf0x_test.cpp \
|
|
||||||
../src/drivers/sf0x/sf0x_parser.cpp
|
|
||||||
|
|
||||||
mixer_test: $(MIXER_FILES)
|
|
||||||
$(CC) -o mixer_test $(MIXER_FILES) $(CFLAGS)
|
|
||||||
|
|
||||||
sbus2_test: $(SBUS2_FILES)
|
|
||||||
$(CC) -o sbus2_test $(SBUS2_FILES) $(CFLAGS)
|
|
||||||
|
|
||||||
sf0x_test: $(SF0X_FILES)
|
|
||||||
$(CC) -o sf0x_test $(SF0X_FILES) $(CFLAGS)
|
|
||||||
|
|
||||||
st24_test: $(ST24_FILES)
|
|
||||||
$(CC) -o st24_test $(ST24_FILES) $(CFLAGS)
|
|
||||||
|
|
||||||
cmake_gtests:
|
|
||||||
mkdir -p build
|
|
||||||
cd build && CC=gcc cmake .. && $(MAKE) && $(MAKE) test
|
|
||||||
|
|
||||||
unittests: clean mixer_test sbus2_test sf0x_test st24_test cmake_gtests
|
|
||||||
./mixer_test
|
|
||||||
./sbus2_test
|
|
||||||
./sf0x_test
|
|
||||||
./st24_test
|
|
||||||
|
|
||||||
.PHONY: clean
|
|
||||||
clean:
|
|
||||||
rm -rf gtest.a gtest_main.a *.o $(ODIR)/*.o *~ core $(INCDIR)/*~ sample_unittest mixer_test sbus2_test st24_test sf0x_test build
|
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
#include <systemlib/mixer/mixer.h>
|
||||||
|
#include <systemlib/err.h>
|
||||||
|
#include "../../src/systemcmds/tests/tests.h"
|
||||||
|
|
||||||
|
#include "gtest/gtest.h"
|
||||||
|
|
||||||
|
TEST(ConversionTest, FMU_quad_w) {
|
||||||
|
ASSERT_EQ(test_conv(0, NULL), 0) << "Conversion test failed";
|
||||||
|
}
|
||||||
@@ -2,18 +2,10 @@
|
|||||||
#include <systemlib/err.h>
|
#include <systemlib/err.h>
|
||||||
#include "../../src/systemcmds/tests/tests.h"
|
#include "../../src/systemcmds/tests/tests.h"
|
||||||
|
|
||||||
int main(int argc, char *argv[]) {
|
#include "gtest/gtest.h"
|
||||||
|
|
||||||
int ret;
|
|
||||||
|
|
||||||
warnx("Host execution started");
|
TEST(MixerTest, Mixer) {
|
||||||
|
char* args[] = {"empty", "../ROMFS/px4fmu_common/mixers/IO_pass.mix", "../ROMFS/px4fmu_common/mixers/FMU_quad_w.mix"};
|
||||||
char* args[] = {argv[0], "../ROMFS/px4fmu_common/mixers/IO_pass.mix",
|
ASSERT_EQ(test_mixer(3, args), 0) << "IO_pass.mix failed";
|
||||||
"../ROMFS/px4fmu_common/mixers/FMU_quad_w.mix"};
|
|
||||||
|
|
||||||
if (ret = test_mixer(3, args));
|
|
||||||
|
|
||||||
test_conv(1, args);
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|||||||
+11
-28
@@ -1,33 +1,23 @@
|
|||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <unistd.h>
|
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <systemlib/mixer/mixer.h>
|
#include <unistd.h>
|
||||||
#include <systemlib/err.h>
|
|
||||||
|
#include "../../src/systemcmds/tests/tests.h"
|
||||||
#include <drivers/drv_hrt.h>
|
#include <drivers/drv_hrt.h>
|
||||||
#include <px4iofirmware/px4io.h>
|
#include <px4iofirmware/px4io.h>
|
||||||
#include "../../src/systemcmds/tests/tests.h"
|
#include <systemlib/err.h>
|
||||||
|
#include <systemlib/mixer/mixer.h>
|
||||||
|
|
||||||
int main(int argc, char *argv[]) {
|
#include "gtest/gtest.h"
|
||||||
warnx("SBUS2 test started");
|
|
||||||
|
|
||||||
char *filepath = 0;
|
TEST(SBUS2Test, SBUS2) {
|
||||||
|
char *filepath = "testdata/sbus2_r7008SB.txt";
|
||||||
if (argc < 2) {
|
|
||||||
warnx("Using default input file");
|
|
||||||
filepath = "testdata/sbus2_r7008SB.txt";
|
|
||||||
} else {
|
|
||||||
filepath = argv[1];
|
|
||||||
}
|
|
||||||
|
|
||||||
warnx("loading data from: %s", filepath);
|
|
||||||
|
|
||||||
FILE *fp;
|
FILE *fp;
|
||||||
|
|
||||||
fp = fopen(filepath,"rt");
|
fp = fopen(filepath,"rt");
|
||||||
|
|
||||||
if (!fp)
|
ASSERT_TRUE(fp);
|
||||||
errx(1, "failed opening file");
|
warnx("loading data from: %s", filepath);
|
||||||
|
|
||||||
float f;
|
float f;
|
||||||
unsigned x;
|
unsigned x;
|
||||||
@@ -73,12 +63,5 @@ int main(int argc, char *argv[]) {
|
|||||||
//sbus_parse(now, frame, &partial_frame_count, rc_values, &num_values, &sbus_failsafe, &sbus_frame_drop, max_channels);
|
//sbus_parse(now, frame, &partial_frame_count, rc_values, &num_values, &sbus_failsafe, &sbus_frame_drop, max_channels);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ret == EOF) {
|
ASSERT_EQ(ret, EOF);
|
||||||
warnx("Test finished, reached end of file");
|
|
||||||
ret = 0;
|
|
||||||
} else {
|
|
||||||
warnx("Test aborted, errno: %d", ret);
|
|
||||||
}
|
|
||||||
|
|
||||||
return ret;
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user