From bf389cd0128e2e180b1f5c4ea1497ce5a6f9a6f9 Mon Sep 17 00:00:00 2001 From: helgie22 Date: Thu, 1 Oct 2026 10:58:06 +0000 Subject: [PATCH] =?UTF-8?q?Framkv=C3=A6mdi=20test=20=C3=A1=20heg=C3=B0un?= =?UTF-8?q?=20PI=5Fcontroller?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- platformio.ini | 12 +++--- src/main.cpp | 6 ++- src/pi_controller.cpp | 1 + test/test_pi_controller/test_main.cpp | 54 ++++++++++++++++++++------- 4 files changed, 53 insertions(+), 20 deletions(-) diff --git a/platformio.ini b/platformio.ini index 80a4969..3730474 100644 --- a/platformio.ini +++ b/platformio.ini @@ -14,10 +14,12 @@ board = nanoatmega328new framework = arduino monitor_speed = 115200 - - -[env:native] -platform = native test_framework = unity test_build_src = yes -build_src_filter = -<*> + + + + +; [env:native] +; platform = native +; test_framework = unity +; test_build_src = yes +; build_src_filter = -<*> + + diff --git a/src/main.cpp b/src/main.cpp index b1acc31..48ff325 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1,3 +1,6 @@ +// main.cpp er sleppt i test-build (pio test) svo setup()/loop() rekist ekki a prof +#ifndef PIO_UNIT_TESTING + #include #include @@ -88,4 +91,5 @@ int main() // int main(){ // return 0; -// } \ No newline at end of file +// } +#endif // PIO_UNIT_TESTING diff --git a/src/pi_controller.cpp b/src/pi_controller.cpp index f5f3846..b6b1eb8 100644 --- a/src/pi_controller.cpp +++ b/src/pi_controller.cpp @@ -23,6 +23,7 @@ double PI_controller::update(double ref, double actual) integral = new_integral; } return u; + // return 0.0; } void PI_controller::reset() diff --git a/test/test_pi_controller/test_main.cpp b/test/test_pi_controller/test_main.cpp index 10c4732..f14b87b 100644 --- a/test/test_pi_controller/test_main.cpp +++ b/test/test_pi_controller/test_main.cpp @@ -1,21 +1,25 @@ #include +// #ifdef ARDUINO +#include +// #endif + #include "p_controller.h" #include "pi_controller.h" static const double KP = 2.0; static const double TI = 1.0; static const double T = 0.1; -static const double TOL = 1e-6; +static const double TOL = 1e-4; // double er 32-bita float a AVR -void setUp(void) {} -void tearDown(void) {} +// void setUp(void) {} +// void tearDown(void) {} // Normal flow: engin villa -> ekkert úttak void test_zero_error_gives_zero_output(void) { PI_controller c(KP, TI, T); - TEST_ASSERT_DOUBLE_WITHIN(TOL, 0.0, c.update(10.0, 10.0)); + TEST_ASSERT_FLOAT_WITHIN(TOL, 0.0, c.update(10.0, 10.0)); } // Normal flow: fyrsta skref u = Kp * (e + e*T/Ti) @@ -23,7 +27,7 @@ void test_first_step(void) { PI_controller c(KP, TI, T); double e = 5.0; - TEST_ASSERT_DOUBLE_WITHIN(TOL, KP * (e + e * T / TI), c.update(e, 0.0)); + TEST_ASSERT_FLOAT_WITHIN(TOL, KP * (e + e * T / TI), c.update(e, 0.0)); } // Normal flow: stöðug villa safnast upp, u_n = Kp * (e + n*e*T/Ti) @@ -35,7 +39,7 @@ void test_integral_accumulates(void) for (int n = 1; n <= 5; n++) { u = c.update(e, 0.0); - TEST_ASSERT_DOUBLE_WITHIN(TOL, KP * (e + n * e * T / TI), u); + TEST_ASSERT_FLOAT_WITHIN(TOL, KP * (e + n * e * T / TI), u); } } @@ -49,21 +53,21 @@ void test_output_held_when_error_zero(void) c.update(e, 0.0); } double E = 5 * e * T; - TEST_ASSERT_DOUBLE_WITHIN(TOL, KP * E / TI, c.update(0.0, 0.0)); + TEST_ASSERT_FLOAT_WITHIN(TOL, KP * E / TI, c.update(0.0, 0.0)); } // Alt flow: villa langt utan getu -> mettun í +100 % void test_saturates_high(void) { PI_controller c(KP, TI, T); - TEST_ASSERT_DOUBLE_WITHIN(TOL, 100.0, c.update(10000.0, 0.0)); + TEST_ASSERT_FLOAT_WITHIN(TOL, 100.0, c.update(10000.0, 0.0)); } // Alt flow: mettun í -100 % void test_saturates_low(void) { PI_controller c(KP, TI, T); - TEST_ASSERT_DOUBLE_WITHIN(TOL, -100.0, c.update(-10000.0, 0.0)); + TEST_ASSERT_FLOAT_WITHIN(TOL, -100.0, c.update(-10000.0, 0.0)); } // Alt flow: anti-windup. Eftir langa mettun á lítil neikvæð villa @@ -88,7 +92,7 @@ void test_reset_clears_integral(void) c.update(5.0, 0.0); } c.reset(); - TEST_ASSERT_DOUBLE_WITHIN(TOL, 0.0, c.update(0.0, 0.0)); + TEST_ASSERT_FLOAT_WITHIN(TOL, 0.0, c.update(0.0, 0.0)); } // Polymorphism: kall í gegnum P_controller& gefur PI hegðun @@ -97,18 +101,20 @@ void test_polymorphic_update(void) PI_controller pi(KP, TI, T); P_controller& c = pi; double e = 5.0; - TEST_ASSERT_DOUBLE_WITHIN(TOL, KP * (e + e * T / TI), c.update(e, 0.0)); + TEST_ASSERT_FLOAT_WITHIN(TOL, KP * (e + e * T / TI), c.update(e, 0.0)); } // P_controller hegðar sér óbreytt void test_p_controller_unchanged(void) { P_controller c(KP); - TEST_ASSERT_DOUBLE_WITHIN(TOL, KP * 5.0, c.update(5.0, 0.0)); + TEST_ASSERT_FLOAT_WITHIN(TOL, KP * 5.0, c.update(5.0, 0.0)); } -int main(int argc, char** argv) +void setup() { + // init(); + delay(2000); UNITY_BEGIN(); RUN_TEST(test_zero_error_gives_zero_output); RUN_TEST(test_first_step); @@ -120,5 +126,25 @@ int main(int argc, char** argv) RUN_TEST(test_reset_clears_integral); RUN_TEST(test_polymorphic_update); RUN_TEST(test_p_controller_unchanged); - return UNITY_END(); + // return UNITY_END(); + UNITY_END(); } + +void loop() {} + +// #ifdef ARDUINO +// void setup() +// { +// delay(2000); // bida eftir serial tengingu eftir reset +// run_tests(); +// } + +// void loop() +// { +// } +// #else +// int main(int argc, char** argv) +// { +// return run_tests(); +// } +// #endif