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 ð, 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 |