31 lines
1.0 KiB
C++
31 lines
1.0 KiB
C++
#include <doctest/doctest.h>
|
|
|
|
#include "fgc/TelemetryParser.h"
|
|
|
|
using namespace fgc;
|
|
|
|
TEST_CASE("parseTelemetryLine reads a valid record") {
|
|
auto t = parseTelemetryLine("$;100;2;3;4;1;5;123.5;0;55;21;200;");
|
|
REQUIRE(t.has_value());
|
|
CHECK(t->encoder == 100);
|
|
CHECK(t->is_moving == 1);
|
|
CHECK(t->heading == doctest::Approx(123.5f));
|
|
// field order: humidity (index 9) before temperature (index 10)
|
|
CHECK(t->humidity == 55);
|
|
CHECK(t->temperature == 21);
|
|
CHECK(t->fan_pwm == 200);
|
|
}
|
|
|
|
TEST_CASE("parseTelemetryLine rejects malformed lines") {
|
|
CHECK_FALSE(parseTelemetryLine("garbage").has_value());
|
|
CHECK_FALSE(parseTelemetryLine("").has_value());
|
|
CHECK_FALSE(parseTelemetryLine("$;1;2;3").has_value()); // too few
|
|
CHECK_FALSE(parseTelemetryLine("$;a;2;3;4;5;6;7;8;9;10;11;").has_value()); // bad int
|
|
}
|
|
|
|
TEST_CASE("parseTelemetryLine tolerates trailing CR/LF") {
|
|
auto t = parseTelemetryLine("$;1;2;3;4;0;6;7.0;8;9;10;11;\r\n");
|
|
REQUIRE(t.has_value());
|
|
CHECK(t->fan_pwm == 11);
|
|
}
|