diff --git a/platforms/posix/cmake/sitl_tests.cmake b/platforms/posix/cmake/sitl_tests.cmake index a0cef81b26..5ec133cc7d 100644 --- a/platforms/posix/cmake/sitl_tests.cmake +++ b/platforms/posix/cmake/sitl_tests.cmake @@ -15,7 +15,6 @@ set(tests file2 float hrt - hysteresis int IntrusiveQueue List @@ -40,7 +39,6 @@ set(tests if (${CMAKE_SYSTEM_NAME} MATCHES "Darwin") list(REMOVE_ITEM tests - hysteresis mixer uorb ) @@ -48,7 +46,6 @@ endif() if (CMAKE_SYSTEM_NAME STREQUAL "CYGWIN") list(REMOVE_ITEM tests - hysteresis # Intermittent timing fails. uorb ) endif() diff --git a/src/lib/CMakeLists.txt b/src/lib/CMakeLists.txt index 4c139a39c6..c2d73adbee 100644 --- a/src/lib/CMakeLists.txt +++ b/src/lib/CMakeLists.txt @@ -45,6 +45,7 @@ add_subdirectory(conversion) add_subdirectory(drivers) add_subdirectory(ecl) add_subdirectory(FlightTasks) +add_subdirectory(hysteresis) add_subdirectory(landing_slope) add_subdirectory(led) add_subdirectory(mathlib) diff --git a/src/lib/cdev/CMakeLists.txt b/src/lib/cdev/CMakeLists.txt index dbce88e825..c41989140f 100644 --- a/src/lib/cdev/CMakeLists.txt +++ b/src/lib/cdev/CMakeLists.txt @@ -50,4 +50,4 @@ px4_add_library(cdev if(PX4_TESTING) add_subdirectory(test) -endif() \ No newline at end of file +endif() diff --git a/src/lib/hysteresis/CMakeLists.txt b/src/lib/hysteresis/CMakeLists.txt new file mode 100644 index 0000000000..957d07f283 --- /dev/null +++ b/src/lib/hysteresis/CMakeLists.txt @@ -0,0 +1,36 @@ +############################################################################ +# +# Copyright (c) 2019 PX4 Development Team. All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in +# the documentation and/or other materials provided with the +# distribution. +# 3. Neither the name PX4 nor the names of its contributors may be +# used to endorse or promote products derived from this software +# without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +# COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS +# OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED +# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. +# +############################################################################ + +px4_add_library(hysteresis hysteresis.cpp) + +px4_add_gtest(SRC hysteresis_test.cpp LINKLIBS hysteresis) diff --git a/src/lib/systemlib/hysteresis/hysteresis.cpp b/src/lib/hysteresis/hysteresis.cpp similarity index 100% rename from src/lib/systemlib/hysteresis/hysteresis.cpp rename to src/lib/hysteresis/hysteresis.cpp diff --git a/src/lib/systemlib/hysteresis/hysteresis.h b/src/lib/hysteresis/hysteresis.h similarity index 100% rename from src/lib/systemlib/hysteresis/hysteresis.h rename to src/lib/hysteresis/hysteresis.h diff --git a/src/systemcmds/tests/test_hysteresis.cpp b/src/lib/hysteresis/hysteresis_test.cpp similarity index 63% rename from src/systemcmds/tests/test_hysteresis.cpp rename to src/lib/hysteresis/hysteresis_test.cpp index 4d4f2aae36..e477b834ed 100644 --- a/src/systemcmds/tests/test_hysteresis.cpp +++ b/src/lib/hysteresis/hysteresis_test.cpp @@ -32,89 +32,56 @@ ****************************************************************************/ /** - * @file test_hysteresis.cpp + * @file hysteresis_test.cpp * Tests for system timing hysteresis. */ -#include +#include #include -#include +#include "hysteresis.h" -class HysteresisTest : public UnitTest -{ -public: - virtual bool run_tests(); -private: - bool _init_false(); - bool _init_true(); - bool _zero_case(); - bool _change_after_time(); - bool _hysteresis_changed(); - bool _change_after_multiple_sets(); - bool _take_change_back(); - - // timing on MacOS and Cygwin isn't great #if defined(__PX4_DARWIN) || defined(__PX4_CYGWIN) - static const int f = 10; +static const int f = 10; #else - static const int f = 1; +static const int f = 1; #endif -}; -bool HysteresisTest::run_tests() -{ - ut_run_test(_init_false); - ut_run_test(_init_true); - ut_run_test(_zero_case); - ut_run_test(_change_after_time); - ut_run_test(_hysteresis_changed); - ut_run_test(_change_after_multiple_sets); - ut_run_test(_take_change_back); - return (_tests_failed == 0); -} - -bool HysteresisTest::_init_false() +TEST(Hysteresis, InitFalse) { systemlib::Hysteresis hysteresis(false); - ut_assert_false(hysteresis.get_state()); - - return true; + EXPECT_FALSE(hysteresis.get_state()); } -bool HysteresisTest::_init_true() +TEST(Hysteresis, InitTrue) { systemlib::Hysteresis hysteresis(true); - ut_assert_true(hysteresis.get_state()); - - return true; + EXPECT_TRUE(hysteresis.get_state()); } -bool HysteresisTest::_zero_case() +TEST(Hysteresis, Zero) { // Default is 0 hysteresis. systemlib::Hysteresis hysteresis(false); - ut_assert_false(hysteresis.get_state()); + EXPECT_FALSE(hysteresis.get_state()); // Change and see result immediately. hysteresis.set_state_and_update(true); - ut_assert_true(hysteresis.get_state()); + EXPECT_TRUE(hysteresis.get_state()); hysteresis.set_state_and_update(false); - ut_assert_false(hysteresis.get_state()); + EXPECT_FALSE(hysteresis.get_state()); hysteresis.set_state_and_update(true); - ut_assert_true(hysteresis.get_state()); + EXPECT_TRUE(hysteresis.get_state()); // A wait won't change anything. px4_usleep(1000 * f); hysteresis.update(); - ut_assert_true(hysteresis.get_state()); - - return true; + EXPECT_TRUE(hysteresis.get_state()); } -bool HysteresisTest::_change_after_time() +TEST(Hysteresis, ChangeAfterTime) { systemlib::Hysteresis hysteresis(false); @@ -123,28 +90,26 @@ bool HysteresisTest::_change_after_time() // Change to true. hysteresis.set_state_and_update(true); - ut_assert_false(hysteresis.get_state()); + EXPECT_FALSE(hysteresis.get_state()); px4_usleep(4000 * f); hysteresis.update(); - ut_assert_false(hysteresis.get_state()); + EXPECT_FALSE(hysteresis.get_state()); px4_usleep(2000 * f); hysteresis.update(); - ut_assert_true(hysteresis.get_state()); + EXPECT_TRUE(hysteresis.get_state()); // Change back to false. hysteresis.set_state_and_update(false); - ut_assert_true(hysteresis.get_state()); + EXPECT_TRUE(hysteresis.get_state()); px4_usleep(1000 * f); hysteresis.update(); - ut_assert_true(hysteresis.get_state()); + EXPECT_TRUE(hysteresis.get_state()); px4_usleep(3000 * f); hysteresis.update(); - ut_assert_false(hysteresis.get_state()); - - return true; + EXPECT_FALSE(hysteresis.get_state()); } -bool HysteresisTest::_hysteresis_changed() +TEST(Hysteresis, HysteresisChanged) { systemlib::Hysteresis hysteresis(false); hysteresis.set_hysteresis_time_from(true, 2000 * f); @@ -152,31 +117,29 @@ bool HysteresisTest::_hysteresis_changed() // Change to true. hysteresis.set_state_and_update(true); - ut_assert_false(hysteresis.get_state()); + EXPECT_FALSE(hysteresis.get_state()); px4_usleep(3000 * f); hysteresis.update(); - ut_assert_false(hysteresis.get_state()); + EXPECT_FALSE(hysteresis.get_state()); px4_usleep(3000 * f); hysteresis.update(); - ut_assert_true(hysteresis.get_state()); + EXPECT_TRUE(hysteresis.get_state()); // Change hysteresis time. hysteresis.set_hysteresis_time_from(true, 10000 * f); // Change back to false. hysteresis.set_state_and_update(false); - ut_assert_true(hysteresis.get_state()); + EXPECT_TRUE(hysteresis.get_state()); px4_usleep(7000 * f); hysteresis.update(); - ut_assert_true(hysteresis.get_state()); + EXPECT_TRUE(hysteresis.get_state()); px4_usleep(5000 * f); hysteresis.update(); - ut_assert_false(hysteresis.get_state()); - - return true; + EXPECT_FALSE(hysteresis.get_state()); } -bool HysteresisTest::_change_after_multiple_sets() +TEST(Hysteresis, ChangeAfterMultipleSets) { systemlib::Hysteresis hysteresis(false); hysteresis.set_hysteresis_time_from(true, 5000 * f); @@ -184,60 +147,54 @@ bool HysteresisTest::_change_after_multiple_sets() // Change to true. hysteresis.set_state_and_update(true); - ut_assert_false(hysteresis.get_state()); + EXPECT_FALSE(hysteresis.get_state()); px4_usleep(3000 * f); hysteresis.set_state_and_update(true); - ut_assert_false(hysteresis.get_state()); + EXPECT_FALSE(hysteresis.get_state()); px4_usleep(3000 * f); hysteresis.set_state_and_update(true); - ut_assert_true(hysteresis.get_state()); + EXPECT_TRUE(hysteresis.get_state()); // Change to false. hysteresis.set_state_and_update(false); - ut_assert_true(hysteresis.get_state()); + EXPECT_TRUE(hysteresis.get_state()); px4_usleep(3000 * f); hysteresis.set_state_and_update(false); - ut_assert_true(hysteresis.get_state()); + EXPECT_TRUE(hysteresis.get_state()); px4_usleep(3000 * f); hysteresis.set_state_and_update(false); - ut_assert_false(hysteresis.get_state()); - - return true; + EXPECT_FALSE(hysteresis.get_state()); } -bool HysteresisTest::_take_change_back() +TEST(Hysteresis, TakeChangeBack) { systemlib::Hysteresis hysteresis(false); hysteresis.set_hysteresis_time_from(false, 5000 * f); // Change to true. hysteresis.set_state_and_update(true); - ut_assert_false(hysteresis.get_state()); + EXPECT_FALSE(hysteresis.get_state()); px4_usleep(3000 * f); hysteresis.update(); - ut_assert_false(hysteresis.get_state()); + EXPECT_FALSE(hysteresis.get_state()); // Change your mind to false. hysteresis.set_state_and_update(false); - ut_assert_false(hysteresis.get_state()); + EXPECT_FALSE(hysteresis.get_state()); px4_usleep(6000 * f); hysteresis.update(); - ut_assert_false(hysteresis.get_state()); + EXPECT_FALSE(hysteresis.get_state()); // And true again hysteresis.set_state_and_update(true); - ut_assert_false(hysteresis.get_state()); + EXPECT_FALSE(hysteresis.get_state()); px4_usleep(3000 * f); hysteresis.update(); - ut_assert_false(hysteresis.get_state()); + EXPECT_FALSE(hysteresis.get_state()); px4_usleep(3000 * f); hysteresis.update(); - ut_assert_true(hysteresis.get_state()); + EXPECT_TRUE(hysteresis.get_state()); // The other directory is immediate. hysteresis.set_state_and_update(false); - ut_assert_false(hysteresis.get_state()); - - return true; + EXPECT_FALSE(hysteresis.get_state()); } - -ut_declare_test_c(test_hysteresis, HysteresisTest) diff --git a/src/lib/systemlib/CMakeLists.txt b/src/lib/systemlib/CMakeLists.txt index 87737454d9..62a3b11619 100644 --- a/src/lib/systemlib/CMakeLists.txt +++ b/src/lib/systemlib/CMakeLists.txt @@ -35,7 +35,6 @@ set(SRCS conversions.c cpuload.c crc.c - hysteresis/hysteresis.cpp mavlink_log.c otp.c ) diff --git a/src/modules/commander/CMakeLists.txt b/src/modules/commander/CMakeLists.txt index 326e4721ad..c46780167e 100644 --- a/src/modules/commander/CMakeLists.txt +++ b/src/modules/commander/CMakeLists.txt @@ -62,6 +62,7 @@ px4_add_module( failure_detector git_ecl ecl_geo + hysteresis ) if(PX4_TESTING) diff --git a/src/modules/commander/Commander.hpp b/src/modules/commander/Commander.hpp index 10b972a0e1..428ca56abb 100644 --- a/src/modules/commander/Commander.hpp +++ b/src/modules/commander/Commander.hpp @@ -41,7 +41,7 @@ #include #include #include -#include +#include // publications #include diff --git a/src/modules/land_detector/CMakeLists.txt b/src/modules/land_detector/CMakeLists.txt index ea357092b3..89ea165fac 100644 --- a/src/modules/land_detector/CMakeLists.txt +++ b/src/modules/land_detector/CMakeLists.txt @@ -43,5 +43,6 @@ px4_add_module( VtolLandDetector.cpp RoverLandDetector.cpp DEPENDS + hysteresis ) diff --git a/src/modules/land_detector/LandDetector.h b/src/modules/land_detector/LandDetector.h index e8954ee781..e6252ca9d2 100644 --- a/src/modules/land_detector/LandDetector.h +++ b/src/modules/land_detector/LandDetector.h @@ -44,7 +44,7 @@ #include #include -#include +#include #include #include #include diff --git a/src/modules/mc_pos_control/mc_pos_control_main.cpp b/src/modules/mc_pos_control/mc_pos_control_main.cpp index 1580aedce1..dee7ad415b 100644 --- a/src/modules/mc_pos_control/mc_pos_control_main.cpp +++ b/src/modules/mc_pos_control/mc_pos_control_main.cpp @@ -43,7 +43,7 @@ #include #include #include -#include +#include #include #include diff --git a/src/systemcmds/tests/CMakeLists.txt b/src/systemcmds/tests/CMakeLists.txt index 01d1eccaef..3c33ef4db0 100644 --- a/src/systemcmds/tests/CMakeLists.txt +++ b/src/systemcmds/tests/CMakeLists.txt @@ -44,7 +44,6 @@ set(srcs test_float.cpp test_hott_telemetry.c test_hrt.cpp - test_hysteresis.cpp test_int.cpp test_IntrusiveQueue.cpp test_jig_voltages.c diff --git a/src/systemcmds/tests/tests_main.c b/src/systemcmds/tests/tests_main.c index becf7becad..7dabaf082a 100644 --- a/src/systemcmds/tests/tests_main.c +++ b/src/systemcmds/tests/tests_main.c @@ -93,7 +93,6 @@ const struct { {"float", test_float, 0}, {"hott_telemetry", test_hott_telemetry, OPT_NOJIGTEST | OPT_NOALLTEST}, {"hrt", test_hrt, OPT_NOJIGTEST | OPT_NOALLTEST}, - {"hysteresis", test_hysteresis, 0}, {"int", test_int, 0}, {"IntrusiveQueue", test_IntrusiveQueue, 0}, {"jig_voltages", test_jig_voltages, OPT_NOALLTEST}, diff --git a/src/systemcmds/tests/tests_main.h b/src/systemcmds/tests/tests_main.h index 40743cc9e4..604e017b8e 100644 --- a/src/systemcmds/tests/tests_main.h +++ b/src/systemcmds/tests/tests_main.h @@ -55,7 +55,6 @@ extern int test_file2(int argc, char *argv[]); extern int test_float(int argc, char *argv[]); extern int test_hott_telemetry(int argc, char *argv[]); extern int test_hrt(int argc, char *argv[]); -extern int test_hysteresis(int argc, char *argv[]); extern int test_int(int argc, char *argv[]); extern int test_IntrusiveQueue(int argc, char *argv[]); extern int test_jig_voltages(int argc, char *argv[]);