unit_tests: move hysteresis test to new framework

This commit is contained in:
Julian Oes
2016-07-30 12:26:56 +02:00
parent 8f1d350d3c
commit 0d80a77e46
6 changed files with 238 additions and 252 deletions
+2 -1
View File
@@ -34,6 +34,7 @@
set(srcs
test_adc.c
test_autodeclination.cpp
test_hysteresis.cpp
test_bson.c
test_conv.cpp
test_file.c
@@ -86,4 +87,4 @@ px4_add_module(
DEPENDS
platforms__common
)
# vim: set noet ft=cmake fenc=utf-8 ff=unix :
# vim: set noet ft=cmake fenc=utf-8 ff=unix :
+196
View File
@@ -0,0 +1,196 @@
#include <unit_test/unit_test.h>
#include <systemlib/hysteresis/hysteresis.h>
class HysteresisTest : public UnitTest
{
public:
virtual bool run_tests(void);
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();
};
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()
{
systemlib::Hysteresis hysteresis(false);
ut_assert_false(hysteresis.get_state());
return true;
}
bool HysteresisTest::_init_true()
{
systemlib::Hysteresis hysteresis(true);
ut_assert_true(hysteresis.get_state());
return true;
}
bool HysteresisTest::_zero_case()
{
// Default is 0 hysteresis.
systemlib::Hysteresis hysteresis(false);
ut_assert_false(hysteresis.get_state());
// Change and see result immediately.
hysteresis.set_state_and_update(true);
ut_assert_true(hysteresis.get_state());
hysteresis.set_state_and_update(false);
ut_assert_false(hysteresis.get_state());
hysteresis.set_state_and_update(true);
ut_assert_true(hysteresis.get_state());
// A wait won't change anything.
usleep(1000);
hysteresis.update();
ut_assert_true(hysteresis.get_state());
return true;
}
bool HysteresisTest::_change_after_time()
{
systemlib::Hysteresis hysteresis(false);
hysteresis.set_hysteresis_time_from(false, 5000);
hysteresis.set_hysteresis_time_from(true, 3000);
// Change to true.
hysteresis.set_state_and_update(true);
ut_assert_false(hysteresis.get_state());
usleep(4000);
hysteresis.update();
ut_assert_false(hysteresis.get_state());
usleep(2000);
hysteresis.update();
ut_assert_true(hysteresis.get_state());
// Change back to false.
hysteresis.set_state_and_update(false);
ut_assert_true(hysteresis.get_state());
usleep(1000);
hysteresis.update();
ut_assert_true(hysteresis.get_state());
usleep(3000);
hysteresis.update();
ut_assert_false(hysteresis.get_state());
return true;
}
bool HysteresisTest::_hysteresis_changed()
{
systemlib::Hysteresis hysteresis(false);
hysteresis.set_hysteresis_time_from(true, 2000);
hysteresis.set_hysteresis_time_from(false, 5000);
// Change to true.
hysteresis.set_state_and_update(true);
ut_assert_false(hysteresis.get_state());
usleep(3000);
hysteresis.update();
ut_assert_false(hysteresis.get_state());
usleep(3000);
hysteresis.update();
ut_assert_true(hysteresis.get_state());
// Change hysteresis time.
hysteresis.set_hysteresis_time_from(true, 10000);
// Change back to false.
hysteresis.set_state_and_update(false);
ut_assert_true(hysteresis.get_state());
usleep(7000);
hysteresis.update();
ut_assert_true(hysteresis.get_state());
usleep(5000);
hysteresis.update();
ut_assert_false(hysteresis.get_state());
return true;
}
bool HysteresisTest::_change_after_multiple_sets()
{
systemlib::Hysteresis hysteresis(false);
hysteresis.set_hysteresis_time_from(true, 5000);
hysteresis.set_hysteresis_time_from(false, 5000);
// Change to true.
hysteresis.set_state_and_update(true);
ut_assert_false(hysteresis.get_state());
usleep(3000);
hysteresis.set_state_and_update(true);
ut_assert_false(hysteresis.get_state());
usleep(3000);
hysteresis.set_state_and_update(true);
ut_assert_true(hysteresis.get_state());
// Change to false.
hysteresis.set_state_and_update(false);
ut_assert_true(hysteresis.get_state());
usleep(3000);
hysteresis.set_state_and_update(false);
ut_assert_true(hysteresis.get_state());
usleep(3000);
hysteresis.set_state_and_update(false);
ut_assert_false(hysteresis.get_state());
return true;
}
bool HysteresisTest::_take_change_back()
{
systemlib::Hysteresis hysteresis(false);
hysteresis.set_hysteresis_time_from(false, 5000);
// Change to true.
hysteresis.set_state_and_update(true);
ut_assert_false(hysteresis.get_state());
usleep(3000);
hysteresis.update();
ut_assert_false(hysteresis.get_state());
// Change your mind to false.
hysteresis.set_state_and_update(false);
ut_assert_false(hysteresis.get_state());
usleep(6000);
hysteresis.update();
ut_assert_false(hysteresis.get_state());
// And true again
hysteresis.set_state_and_update(true);
ut_assert_false(hysteresis.get_state());
usleep(3000);
hysteresis.update();
ut_assert_false(hysteresis.get_state());
usleep(3000);
hysteresis.update();
ut_assert_true(hysteresis.get_state());
// The other directory is immediate.
hysteresis.set_state_and_update(false);
ut_assert_false(hysteresis.get_state());
return true;
}
ut_declare_test_c(test_hysteresis, HysteresisTest)
+1
View File
@@ -74,6 +74,7 @@ __BEGIN_DECLS
extern int test_adc(int argc, char *argv[]);
extern int test_autodeclination(int argc, char *argv[]);
extern int test_hysteresis(int argc, char *argv[]);
extern int test_bson(int argc, char *argv[]);
extern int test_conv(int argc, char *argv[]);
extern int test_file(int argc, char *argv[]);
+1
View File
@@ -97,6 +97,7 @@ const struct {
{"uorb", uorb_tests_main, 0},
{"autodeclination", test_autodeclination, 0},
{"hysteresis", test_hysteresis, 0},
{"bson", test_bson, 0},
{"conv", test_conv, 0},
{"file", test_file, OPT_NOJIGTEST | OPT_NOALLTEST},