GCC Code Coverage Report


Directory: ./
File: unit_tests/tests/sensor/test_frequency_sensor.cpp
Date: 2025-10-03 00:57:22
Coverage Exec Excl Total
Lines: 92.0% 23 0 25
Functions: 75.0% 3 0 4
Branches: 100.0% 3 0 3
Decisions: 100.0% 2 - 2

Line Branch Decision Exec Source
1 #include "pch.h"
2
3 #include "frequency_sensor.h"
4 #include "sensor_type.h"
5
6 // Fake converter just passes value straight though
7 struct IdentityFunction : public SensorConverter {
8 SensorResult convert(float raw) const {
9 return raw;
10 }
11 };
12
13 static IdentityFunction identityFunc;
14
15 class FrequencySensorTest : public ::testing::Test {
16 public:
17 1 FrequencySensorTest()
18
1/1
✓ Branch 2 taken 1 time.
1 : dut(SensorType::FuelEthanolPercent, MS2NT(50))
19 {
20 1 }
21
22 1 void SetUp() override {
23 // If somehow prodcode will be unwrapped for test it MAYBE! will fire with error.
24 // At least we must init FlexSensor somehow
25 1 dut.initIfValid(Gpio::A0, identityFunc, 0.1f);
26 1 }
27
28 /*
29 * This method must simulate some amount periods of square-wave
30 * and fire callback on every falling edge.
31 * (as Sensor works by falling edge)
32 */
33 1 void generatePwm(EngineTestHelper &eth, float freqHz) {
34 1 constexpr auto periods = 1000;
35 1 auto period = (1 / freqHz);
36
37 1 std::cout << "PERIOD: " << period << std::endl;
38
39
2/2
✓ Branch 0 taken 1000 times.
✓ Branch 1 taken 1 time.
2/2
✓ Decision 'true' taken 1000 times.
✓ Decision 'false' taken 1 time.
1001 for (auto i = 0; i < periods; i++) {
40 1000 eth.moveTimeForwardSec(period);
41 1000 dut.onEdge(getTimeNowNt());
42 }
43 1 }
44
45 FrequencySensor dut;
46 };
47
48 /*
49 * Sensor must take PWM input on "valid" frequency and generate any input.
50 */
51 4 TEST_F(FrequencySensorTest, testValidWithPwm) {
52 1 ASSERT_TRUE(dut.Register());
53 2 EngineTestHelper eth(engine_type_e::TEST_ENGINE);
54
55 // Should be invalid - not set yet
56 {
57 1 auto s = Sensor::get(SensorType::FuelEthanolPercent);
58 1 EXPECT_FALSE(s.Valid);
59 }
60
61 1 generatePwm(eth, 10);
62
63 // Should be valid, correct frequency
64 {
65 1 auto s = Sensor::get(SensorType::FuelEthanolPercent);
66 1 EXPECT_TRUE(s.Valid);
67 1 EXPECT_NEAR(s.Value, 10, 1e-3);
68 }
69 }
70