GCC Code Coverage Report


Directory: ./
File: unit_tests/tests/sensor/therm_func.cpp
Date: 2025-10-03 00:57:22
Coverage Exec Excl Total
Lines: 100.0% 77 0 77
Functions: 100.0% 18 0 18
Branches: 41.2% 105 0 255
Decisions: -% 0 - 0

Line Branch Decision Exec Source
1 /*
2 * @author Matthew Kennedy, (c) 2019
3 */
4
5 #include "pch.h"
6
7 #include "thermistor_func.h"
8 #include "thermistors.h"
9 #include "functional_sensor.h"
10 #include "init.h"
11
12 4 TEST(thermistor, Thermistor1) {
13 1 ThermistorFunc tf;
14 1 thermistor_conf_s tc = {32, 75, 120, 9500, 2100, 1000, 0};
15
1/1
✓ Branch 1 taken 1 time.
1 tf.configure(tc);
16
17
1/1
✓ Branch 2 taken 1 time.
1 SensorResult t = tf.convert(2100);
18
2/8
✗ Branch 3 not taken.
✓ Branch 4 taken 1 time.
✗ Branch 7 not taken.
✗ Branch 12 not taken.
✗ Branch 16 not taken.
✗ Branch 19 not taken.
✓ Branch 28 taken 1 time.
✗ Branch 29 not taken.
1 ASSERT_TRUE(t.Valid);
19
3/8
✓ Branch 2 taken 1 time.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 time.
✗ Branch 9 not taken.
✗ Branch 14 not taken.
✗ Branch 17 not taken.
✓ Branch 24 taken 1 time.
✗ Branch 25 not taken.
1 ASSERT_NEAR(75, t.Value, EPS2D);
20
21
3/8
✓ Branch 2 taken 1 time.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 time.
✗ Branch 9 not taken.
✗ Branch 14 not taken.
✗ Branch 17 not taken.
✓ Branch 24 taken 1 time.
✗ Branch 25 not taken.
1 ASSERT_NEAR(-0.003, tf.m_a, EPS4D);
22
3/8
✓ Branch 2 taken 1 time.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 time.
✗ Branch 9 not taken.
✗ Branch 14 not taken.
✗ Branch 17 not taken.
✓ Branch 24 taken 1 time.
✗ Branch 25 not taken.
1 ASSERT_NEAR(0.001, tf.m_b, EPS4D);
23
3/8
✓ Branch 2 taken 1 time.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 time.
✗ Branch 9 not taken.
✗ Branch 14 not taken.
✗ Branch 17 not taken.
✓ Branch 24 taken 1 time.
✗ Branch 25 not taken.
1 ASSERT_NEAR(0.0, tf.m_c, EPS5D);
24 }
25
26 4 TEST(thermistor, ThermistorNeon) {
27 1 ThermistorFunc tf;
28 // 2003 Neon sensor
29 1 thermistor_conf_s tc = {0, 30, 100, 32500, 7550, 700, 0};
30
1/1
✓ Branch 1 taken 1 time.
1 tf.configure(tc);
31
32
1/1
✓ Branch 2 taken 1 time.
1 SensorResult t = tf.convert(38000);
33
2/8
✗ Branch 3 not taken.
✓ Branch 4 taken 1 time.
✗ Branch 7 not taken.
✗ Branch 12 not taken.
✗ Branch 16 not taken.
✗ Branch 19 not taken.
✓ Branch 28 taken 1 time.
✗ Branch 29 not taken.
1 ASSERT_TRUE(t.Valid);
34
3/8
✓ Branch 2 taken 1 time.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 time.
✗ Branch 9 not taken.
✗ Branch 14 not taken.
✗ Branch 17 not taken.
✓ Branch 24 taken 1 time.
✗ Branch 25 not taken.
1 ASSERT_NEAR(-2.7983, t.Value, EPS4D);
35
36
3/9
✓ Branch 2 taken 1 time.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 time.
✗ Branch 9 not taken.
✗ Branch 12 not taken.
✗ Branch 17 not taken.
✗ Branch 20 not taken.
✓ Branch 27 taken 1 time.
✗ Branch 28 not taken.
1 ASSERT_NEAR(0.0009, tf.m_a, EPS4D) << "A";
37
3/9
✓ Branch 2 taken 1 time.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 time.
✗ Branch 9 not taken.
✗ Branch 12 not taken.
✗ Branch 17 not taken.
✗ Branch 20 not taken.
✓ Branch 27 taken 1 time.
✗ Branch 28 not taken.
1 ASSERT_NEAR(0.0003, tf.m_b, EPS4D) << "B";
38
3/8
✓ Branch 2 taken 1 time.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 time.
✗ Branch 9 not taken.
✗ Branch 14 not taken.
✗ Branch 17 not taken.
✓ Branch 24 taken 1 time.
✗ Branch 25 not taken.
1 ASSERT_NEAR(0.0, tf.m_c, EPS4D);
39 }
40
41 4 TEST(thermistor, PtcAirCooledMotorcycle) {
42 // data from https://static.chipdip.ru/lib/033/DOC001033132.pdf
43 1 thermistor_conf_s tc = {0, 100, 200, 486, 975, 1679, 0};
44
45 1 ThermistorFunc tf;
46
1/1
✓ Branch 1 taken 1 time.
1 tf.configure(tc);
47
48 // calibrated points should be almost perfect
49
4/9
✓ Branch 3 taken 1 time.
✓ Branch 7 taken 1 time.
✗ Branch 11 not taken.
✓ Branch 12 taken 1 time.
✗ Branch 15 not taken.
✗ Branch 20 not taken.
✗ Branch 23 not taken.
✓ Branch 30 taken 1 time.
✗ Branch 31 not taken.
1 ASSERT_NEAR(tf.convert(486).value_or(0), 0, 0.1);
50
4/9
✓ Branch 3 taken 1 time.
✓ Branch 7 taken 1 time.
✗ Branch 11 not taken.
✓ Branch 12 taken 1 time.
✗ Branch 15 not taken.
✗ Branch 20 not taken.
✗ Branch 23 not taken.
✓ Branch 30 taken 1 time.
✗ Branch 31 not taken.
1 ASSERT_NEAR(tf.convert(975).value_or(0), 100, 0.1);
51
4/9
✓ Branch 3 taken 1 time.
✓ Branch 7 taken 1 time.
✗ Branch 11 not taken.
✓ Branch 12 taken 1 time.
✗ Branch 15 not taken.
✗ Branch 20 not taken.
✗ Branch 23 not taken.
✓ Branch 30 taken 1 time.
✗ Branch 31 not taken.
1 ASSERT_NEAR(tf.convert(1679).value_or(0), 200, 0.1);
52
53 // Other points should be pretty good
54
4/9
✓ Branch 3 taken 1 time.
✓ Branch 7 taken 1 time.
✗ Branch 11 not taken.
✓ Branch 12 taken 1 time.
✗ Branch 15 not taken.
✗ Branch 20 not taken.
✗ Branch 23 not taken.
✓ Branch 30 taken 1 time.
✗ Branch 31 not taken.
1 ASSERT_NEAR(tf.convert(414).value_or(0), -20, 2);
55
4/9
✓ Branch 3 taken 1 time.
✓ Branch 7 taken 1 time.
✗ Branch 11 not taken.
✓ Branch 12 taken 1 time.
✗ Branch 15 not taken.
✗ Branch 20 not taken.
✗ Branch 23 not taken.
✓ Branch 30 taken 1 time.
✗ Branch 31 not taken.
1 ASSERT_NEAR(tf.convert(704).value_or(0), 50, 2);
56
4/9
✓ Branch 3 taken 1 time.
✓ Branch 7 taken 1 time.
✗ Branch 11 not taken.
✓ Branch 12 taken 1 time.
✗ Branch 15 not taken.
✗ Branch 20 not taken.
✗ Branch 23 not taken.
✓ Branch 30 taken 1 time.
✗ Branch 31 not taken.
1 ASSERT_NEAR(tf.convert(1300).value_or(0), 150, 2);
57
4/9
✓ Branch 3 taken 1 time.
✓ Branch 7 taken 1 time.
✗ Branch 11 not taken.
✓ Branch 12 taken 1 time.
✗ Branch 15 not taken.
✗ Branch 20 not taken.
✗ Branch 23 not taken.
✓ Branch 30 taken 1 time.
✗ Branch 31 not taken.
1 ASSERT_NEAR(tf.convert(1846).value_or(0), 220, 2);
58 }
59
60 4 TEST(Thermistor, Option1) {
61 2 EngineTestHelper eth(engine_type_e::TEST_ENGINE, [](engine_configuration_s* engineConfiguration) {
62 engineConfiguration->auxTempSensor1.adcChannel = EFI_ADC_12;; // arbitrary
63
1/1
✓ Branch 3 taken 1 time.
1 });
64
65
66
1/1
✓ Branch 1 taken 1 time.
1 setAtSensor(&engineConfiguration->auxTempSensor1, /*temp low*/-13.9, 73300, /*temp mid*/23.7, 10630 , /*temp high*/ 60, 2280);
67
1/1
✓ Branch 1 taken 1 time.
1 initNewSensors();
68
69
1/1
✓ Branch 1 taken 1 time.
1 FunctionalSensor * aatSensor = (FunctionalSensor*)Sensor::getSensorOfType(SensorType::AuxTemp1);
70
2/8
✗ Branch 5 not taken.
✓ Branch 6 taken 1 time.
✗ Branch 9 not taken.
✗ Branch 14 not taken.
✗ Branch 18 not taken.
✗ Branch 21 not taken.
✓ Branch 30 taken 1 time.
✗ Branch 31 not taken.
1 ASSERT_TRUE(aatSensor != nullptr);
71 1 thermistor_t *tFuncAat = (thermistor_t *)aatSensor->getFunction();
72
73
1/1
✓ Branch 1 taken 1 time.
1 ThermistorFunc *thermistorFuncAat = tFuncAat->getPtr<ThermistorFunc>();
74
75
4/9
✓ Branch 2 taken 1 time.
✓ Branch 5 taken 1 time.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 time.
✗ Branch 12 not taken.
✗ Branch 17 not taken.
✗ Branch 20 not taken.
✓ Branch 27 taken 1 time.
✗ Branch 28 not taken.
1 ASSERT_NEAR(60, thermistorFuncAat->convert(2280).Value, EPS2D);
76
4/9
✓ Branch 2 taken 1 time.
✓ Branch 5 taken 1 time.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 time.
✗ Branch 12 not taken.
✗ Branch 17 not taken.
✗ Branch 20 not taken.
✓ Branch 27 taken 1 time.
✗ Branch 28 not taken.
1 ASSERT_NEAR(49.83, thermistorFuncAat->convert(3413).Value, EPS2D);
77 1 }
78
79 4 TEST(Thermistor, Option2) {
80 2 EngineTestHelper eth(engine_type_e::TEST_ENGINE, [](engine_configuration_s* engineConfiguration) {
81 engineConfiguration->auxTempSensor1.adcChannel = EFI_ADC_12;; // arbitrary
82
1/1
✓ Branch 3 taken 1 time.
1 });
83
84
85
1/1
✓ Branch 1 taken 1 time.
1 setAtSensor(&engineConfiguration->auxTempSensor1, /*temp low*/-13.9, 73300, /*temp mid*/23.5, 53100 , /*temp high*/ 60, 2280);
86
87
5/23
✓ Branch 3 taken 1 time.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 time.
✓ Branch 8 taken 1 time.
✗ Branch 9 not taken.
✗ Branch 11 not taken.
✗ Branch 13 not taken.
✓ Branch 14 taken 1 time.
✗ Branch 16 not taken.
✗ Branch 22 not taken.
✗ Branch 27 not taken.
✗ Branch 30 not taken.
✓ Branch 36 taken 1 time.
✗ Branch 37 not taken.
✗ Branch 38 not taken.
✗ Branch 43 not taken.
✗ Branch 48 not taken.
✗ Branch 51 not taken.
✗ Branch 57 not taken.
✗ Branch 61 not taken.
✗ Branch 64 not taken.
✗ Branch 69 not taken.
✗ Branch 72 not taken.
1 EXPECT_FATAL_ERROR(
88 initNewSensors()
89 1 );
90
91
1/1
✓ Branch 1 taken 1 time.
1 FunctionalSensor * aatSensor = (FunctionalSensor*)Sensor::getSensorOfType(SensorType::AuxTemp1);
92
2/8
✗ Branch 5 not taken.
✓ Branch 6 taken 1 time.
✗ Branch 9 not taken.
✗ Branch 14 not taken.
✗ Branch 18 not taken.
✗ Branch 21 not taken.
✓ Branch 30 taken 1 time.
✗ Branch 31 not taken.
1 ASSERT_TRUE(aatSensor == nullptr);
93 1 }
94
95
96 4 TEST(Thermistor, Option3) {
97 2 EngineTestHelper eth(engine_type_e::TEST_ENGINE, [](engine_configuration_s* engineConfiguration) {
98 engineConfiguration->auxTempSensor1.adcChannel = EFI_ADC_12;; // arbitrary
99
1/1
✓ Branch 3 taken 1 time.
1 });
100
101
102
1/1
✓ Branch 1 taken 1 time.
1 setAtSensor(&engineConfiguration->auxTempSensor1, /*temp low*/-13.9, 73300, /*temp mid*/45, 3810, /*temp high*/ 90, 952);
103
104
1/1
✓ Branch 1 taken 1 time.
1 initNewSensors();
105
106
1/1
✓ Branch 1 taken 1 time.
1 FunctionalSensor * aatSensor = (FunctionalSensor*)Sensor::getSensorOfType(SensorType::AuxTemp1);
107
2/8
✗ Branch 5 not taken.
✓ Branch 6 taken 1 time.
✗ Branch 9 not taken.
✗ Branch 14 not taken.
✗ Branch 18 not taken.
✗ Branch 21 not taken.
✓ Branch 30 taken 1 time.
✗ Branch 31 not taken.
1 ASSERT_TRUE(aatSensor != nullptr);
108 1 thermistor_t *tFuncAat = (thermistor_t *)aatSensor->getFunction();
109
110
1/1
✓ Branch 1 taken 1 time.
1 ThermistorFunc *thermistorFuncAat = tFuncAat->getPtr<ThermistorFunc>();
111
112
4/9
✓ Branch 2 taken 1 time.
✓ Branch 5 taken 1 time.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 time.
✗ Branch 12 not taken.
✗ Branch 17 not taken.
✗ Branch 20 not taken.
✓ Branch 27 taken 1 time.
✗ Branch 28 not taken.
1 ASSERT_NEAR(59.9064, thermistorFuncAat->convert(2280).Value, EPS2D);
113
4/9
✓ Branch 2 taken 1 time.
✓ Branch 5 taken 1 time.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 time.
✗ Branch 12 not taken.
✗ Branch 17 not taken.
✗ Branch 20 not taken.
✓ Branch 27 taken 1 time.
✗ Branch 28 not taken.
1 ASSERT_NEAR(48.043, thermistorFuncAat->convert(3413).Value, EPS2D);
114
4/9
✓ Branch 2 taken 1 time.
✓ Branch 5 taken 1 time.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 time.
✗ Branch 12 not taken.
✗ Branch 17 not taken.
✗ Branch 20 not taken.
✓ Branch 27 taken 1 time.
✗ Branch 28 not taken.
1 ASSERT_NEAR(-9.17, thermistorFuncAat->convert(53100).Value, EPS2D);
115 1 }
116
117