#include #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); }