GCC Code Coverage Report


Directory: ./
File: unit_tests/tests/test_util.cpp
Date: 2025-10-03 00:57:22
Coverage Exec Excl Total
Lines: 100.0% 298 0 298
Functions: 100.0% 47 0 47
Branches: 39.2% 396 0 1010
Decisions: 100.0% 2 - 2

Line Branch Decision Exec Source
1 /**
2 * @file test_util.c
3 *
4 * @date Dec 8, 2013
5 * @author Andrey Belomutskiy, (c) 2012-2020
6 */
7
8 #include "pch.h"
9
10 #include <cstring>
11
12 #include "histogram.h"
13
14 #include "malfunction_central.h"
15 #include "cli_registry.h"
16
17 #include "nmea.h"
18 #include "fl_stack.h"
19
20 using namespace rusefi::stringutil;
21
22 4 TEST(util, testitoa) {
23 1 char buffer[12];
24
1/1
✓ Branch 1 taken 1 time.
1 itoa10(buffer, 239);
25
3/9
✓ Branch 3 taken 1 time.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 time.
✗ Branch 12 not taken.
✗ Branch 17 not taken.
✗ Branch 21 not taken.
✗ Branch 24 not taken.
✓ Branch 33 taken 1 time.
✗ Branch 34 not taken.
1 ASSERT_TRUE(strEqual(buffer, "239"));
26 }
27
28 4 TEST(util, negativeZero) {
29
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(IS_NEGATIVE_ZERO(-0.0));
30
31
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_FALSE(IS_NEGATIVE_ZERO(-10.0));
32
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_FALSE(IS_NEGATIVE_ZERO(10.0));
33
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_FALSE(IS_NEGATIVE_ZERO(0.0));
34 }
35
36 4 TEST(util, crc8) {
37 1 const uint8_t crc8_tab[] = {0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38};
38
39
4/9
✓ Branch 3 taken 1 time.
✓ Branch 7 taken 1 time.
✗ Branch 12 not taken.
✓ Branch 13 taken 1 time.
✗ Branch 16 not taken.
✗ Branch 21 not taken.
✗ Branch 24 not taken.
✓ Branch 31 taken 1 time.
✗ Branch 32 not taken.
1 ASSERT_EQ(0xB, crc8(crc8_tab, 8));
40 }
41
42 4 TEST(util, crc) {
43
4/9
✓ Branch 3 taken 1 time.
✓ Branch 7 taken 1 time.
✗ Branch 12 not taken.
✓ Branch 13 taken 1 time.
✗ Branch 16 not taken.
✗ Branch 21 not taken.
✗ Branch 24 not taken.
✓ Branch 31 taken 1 time.
✗ Branch 32 not taken.
1 ASSERT_EQ(4, efiRound(4.4, 1));
44
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_FLOAT_EQ(1.2, efiRound(1.2345, 0.1));
45
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_FLOAT_EQ(0.2, efiRound(0.2345, 0.1));
46
47 1 const char * A = "A";
48
49 1 uint32_t c = crc32(A, 1);
50 1 printf("crc32(A)=%x\r\n", c);
51
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(0xd3d99e8b, c, EPS4D) << "crc32 1";
52
53 1 const char * line = "AbcDEFGF";
54 1 c = crc32(line, 8);
55 1 printf("crc32(line)=%x\r\n", c);
56
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(0x4775a7b1, c, EPS4D) << "crc32 line";
57
58 1 c = crc32(line, 1);
59 1 c = crc32inc(line + 1, c, 8 - 1);
60
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(0x4775a7b1, c, EPS4D) << "crc32 line inc";
61 }
62
63 4 TEST(util, histogram) {
64
1/1
✓ Branch 1 taken 1 time.
1 initHistogramsModule();
65
66
4/9
✓ Branch 3 taken 1 time.
✓ Branch 7 taken 1 time.
✗ Branch 12 not taken.
✓ Branch 13 taken 1 time.
✗ Branch 16 not taken.
✗ Branch 21 not taken.
✗ Branch 24 not taken.
✓ Branch 31 taken 1 time.
✗ Branch 32 not taken.
1 ASSERT_EQ(80, histogramGetIndex(239));
67
4/9
✓ Branch 3 taken 1 time.
✓ Branch 7 taken 1 time.
✗ Branch 12 not taken.
✓ Branch 13 taken 1 time.
✗ Branch 16 not taken.
✗ Branch 21 not taken.
✗ Branch 24 not taken.
✓ Branch 31 taken 1 time.
✗ Branch 32 not taken.
1 ASSERT_EQ(223, histogramGetIndex(239239));
68
4/9
✓ Branch 3 taken 1 time.
✓ Branch 7 taken 1 time.
✗ Branch 12 not taken.
✓ Branch 13 taken 1 time.
✗ Branch 16 not taken.
✗ Branch 21 not taken.
✗ Branch 24 not taken.
✓ Branch 31 taken 1 time.
✗ Branch 32 not taken.
1 ASSERT_EQ(364, histogramGetIndex(239239239));
69
70 1 histogram_s h;
71
72
1/1
✓ Branch 1 taken 1 time.
1 initHistogram(&h, "test");
73
74 1 int result[5];
75
4/9
✓ Branch 3 taken 1 time.
✓ Branch 7 taken 1 time.
✗ Branch 12 not taken.
✓ Branch 13 taken 1 time.
✗ Branch 16 not taken.
✗ Branch 21 not taken.
✗ Branch 24 not taken.
✓ Branch 31 taken 1 time.
✗ Branch 32 not taken.
1 ASSERT_EQ(0, hsReport(&h, result));
76
77
1/1
✓ Branch 1 taken 1 time.
1 hsAdd(&h, 10);
78
4/9
✓ Branch 3 taken 1 time.
✓ Branch 7 taken 1 time.
✗ Branch 12 not taken.
✓ Branch 13 taken 1 time.
✗ Branch 16 not taken.
✗ Branch 21 not taken.
✗ Branch 24 not taken.
✓ Branch 31 taken 1 time.
✗ Branch 32 not taken.
1 ASSERT_EQ(1, hsReport(&h, result));
79
3/8
✓ Branch 3 taken 1 time.
✗ Branch 7 not taken.
✓ Branch 8 taken 1 time.
✗ Branch 11 not taken.
✗ Branch 16 not taken.
✗ Branch 19 not taken.
✓ Branch 26 taken 1 time.
✗ Branch 27 not taken.
1 ASSERT_EQ(10, result[0]);
80
81 // let's add same value one more time
82
1/1
✓ Branch 1 taken 1 time.
1 hsAdd(&h, 10);
83
4/9
✓ Branch 3 taken 1 time.
✓ Branch 7 taken 1 time.
✗ Branch 12 not taken.
✓ Branch 13 taken 1 time.
✗ Branch 16 not taken.
✗ Branch 21 not taken.
✗ Branch 24 not taken.
✓ Branch 31 taken 1 time.
✗ Branch 32 not taken.
1 ASSERT_EQ(2, hsReport(&h, result));
84
3/8
✓ Branch 3 taken 1 time.
✗ Branch 7 not taken.
✓ Branch 8 taken 1 time.
✗ Branch 11 not taken.
✗ Branch 16 not taken.
✗ Branch 19 not taken.
✓ Branch 26 taken 1 time.
✗ Branch 27 not taken.
1 ASSERT_EQ(10, result[0]);
85
3/8
✓ Branch 3 taken 1 time.
✗ Branch 7 not taken.
✓ Branch 8 taken 1 time.
✗ Branch 11 not taken.
✗ Branch 16 not taken.
✗ Branch 19 not taken.
✓ Branch 26 taken 1 time.
✗ Branch 27 not taken.
1 ASSERT_EQ(10, result[1]);
86
87
1/1
✓ Branch 1 taken 1 time.
1 hsAdd(&h, 10);
88
1/1
✓ Branch 1 taken 1 time.
1 hsAdd(&h, 10);
89
1/1
✓ Branch 1 taken 1 time.
1 hsAdd(&h, 10);
90
91
1/1
✓ Branch 1 taken 1 time.
1 hsAdd(&h, 1000);
92
1/1
✓ Branch 1 taken 1 time.
1 hsAdd(&h, 100);
93
94
4/9
✓ Branch 3 taken 1 time.
✓ Branch 7 taken 1 time.
✗ Branch 12 not taken.
✓ Branch 13 taken 1 time.
✗ Branch 16 not taken.
✗ Branch 21 not taken.
✗ Branch 24 not taken.
✓ Branch 31 taken 1 time.
✗ Branch 32 not taken.
1 ASSERT_EQ(5, hsReport(&h, result));
95
96
3/8
✓ Branch 3 taken 1 time.
✗ Branch 7 not taken.
✓ Branch 8 taken 1 time.
✗ Branch 11 not taken.
✗ Branch 16 not taken.
✗ Branch 19 not taken.
✓ Branch 26 taken 1 time.
✗ Branch 27 not taken.
1 ASSERT_EQ(5, result[0]);
97
3/8
✓ Branch 3 taken 1 time.
✗ Branch 7 not taken.
✓ Branch 8 taken 1 time.
✗ Branch 11 not taken.
✗ Branch 16 not taken.
✗ Branch 19 not taken.
✓ Branch 26 taken 1 time.
✗ Branch 27 not taken.
1 ASSERT_EQ(10, result[1]);
98
3/8
✓ Branch 3 taken 1 time.
✗ Branch 7 not taken.
✓ Branch 8 taken 1 time.
✗ Branch 11 not taken.
✗ Branch 16 not taken.
✗ Branch 19 not taken.
✓ Branch 26 taken 1 time.
✗ Branch 27 not taken.
1 ASSERT_EQ(10, result[2]);
99
3/8
✓ Branch 3 taken 1 time.
✗ Branch 7 not taken.
✓ Branch 8 taken 1 time.
✗ Branch 11 not taken.
✗ Branch 16 not taken.
✗ Branch 19 not taken.
✓ Branch 26 taken 1 time.
✗ Branch 27 not taken.
1 ASSERT_EQ(100, result[3]);
100 // values are not expected to be exactly the same, it's the shape what matters
101
3/8
✓ Branch 3 taken 1 time.
✗ Branch 7 not taken.
✓ Branch 8 taken 1 time.
✗ Branch 11 not taken.
✗ Branch 16 not taken.
✗ Branch 19 not taken.
✓ Branch 26 taken 1 time.
✗ Branch 27 not taken.
1 ASSERT_EQ(1011, result[4]);
102 }
103
104 1 static void testMalfunctionCentralRemoveNonExistent() {
105 1 clearWarnings();
106
107 // this should not crash
108 1 removeError(ObdCode::OBD_TPS1_Correlation);
109 1 }
110
111 1 static void testMalfunctionCentralSameElementAgain() {
112
1/1
✓ Branch 1 taken 1 time.
1 clearWarnings();
113 1 error_codes_set_s localCopy;
114
115
1/1
✓ Branch 1 taken 1 time.
1 addError(ObdCode::OBD_TPS1_Correlation);
116
1/1
✓ Branch 1 taken 1 time.
1 addError(ObdCode::OBD_TPS1_Correlation);
117
1/1
✓ Branch 1 taken 1 time.
1 getErrorCodes(&localCopy);
118
3/8
✓ Branch 3 taken 1 time.
✗ Branch 7 not taken.
✓ Branch 8 taken 1 time.
✗ Branch 11 not taken.
✗ Branch 16 not taken.
✗ Branch 19 not taken.
✓ Branch 26 taken 1 time.
✗ Branch 27 not taken.
1 ASSERT_EQ(1, localCopy.count);
119 }
120
121 1 static void testMalfunctionCentralRemoveFirstElement() {
122
1/1
✓ Branch 1 taken 1 time.
1 clearWarnings();
123 1 error_codes_set_s localCopy;
124
125 1 ObdCode firstElement = ObdCode::OBD_TPS1_Correlation;
126
1/1
✓ Branch 1 taken 1 time.
1 addError(firstElement);
127
128 1 ObdCode secondElement = ObdCode::OBD_TPS2_Correlation;
129
1/1
✓ Branch 1 taken 1 time.
1 addError(secondElement);
130
1/1
✓ Branch 1 taken 1 time.
1 getErrorCodes(&localCopy);
131
3/8
✓ Branch 3 taken 1 time.
✗ Branch 7 not taken.
✓ Branch 8 taken 1 time.
✗ Branch 11 not taken.
✗ Branch 16 not taken.
✗ Branch 19 not taken.
✓ Branch 26 taken 1 time.
✗ Branch 27 not taken.
1 ASSERT_EQ(2, localCopy.count);
132
133 // let's remove first element - code
134
1/1
✓ Branch 1 taken 1 time.
1 removeError(firstElement);
135
136
1/1
✓ Branch 1 taken 1 time.
1 getErrorCodes(&localCopy);
137
3/8
✓ Branch 3 taken 1 time.
✗ Branch 7 not taken.
✓ Branch 8 taken 1 time.
✗ Branch 11 not taken.
✗ Branch 16 not taken.
✗ Branch 19 not taken.
✓ Branch 26 taken 1 time.
✗ Branch 27 not taken.
1 ASSERT_EQ(1, localCopy.count);
138
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_EQ(secondElement, localCopy.error_codes[0]);
139 }
140
141 4 TEST(misc, testMalfunctionCentral) {
142
1/1
✓ Branch 1 taken 1 time.
1 testMalfunctionCentralRemoveNonExistent();
143
1/1
✓ Branch 1 taken 1 time.
1 testMalfunctionCentralSameElementAgain();
144
1/1
✓ Branch 1 taken 1 time.
1 testMalfunctionCentralRemoveFirstElement();
145
146
1/1
✓ Branch 1 taken 1 time.
1 clearWarnings();
147
148 1 error_codes_set_s localCopy;
149
150 // on start-up error storage should be empty
151
1/1
✓ Branch 1 taken 1 time.
1 getErrorCodes(&localCopy);
152
3/8
✓ Branch 3 taken 1 time.
✗ Branch 7 not taken.
✓ Branch 8 taken 1 time.
✗ Branch 11 not taken.
✗ Branch 16 not taken.
✗ Branch 19 not taken.
✓ Branch 26 taken 1 time.
✗ Branch 27 not taken.
1 ASSERT_EQ(0, localCopy.count);
153
154 1 ObdCode code = ObdCode::OBD_TPS1_Correlation;
155 // let's add one error and validate
156
1/1
✓ Branch 1 taken 1 time.
1 addError(code);
157
158
1/1
✓ Branch 1 taken 1 time.
1 getErrorCodes(&localCopy);
159
3/9
✓ Branch 3 taken 1 time.
✗ Branch 7 not taken.
✓ Branch 8 taken 1 time.
✗ Branch 11 not taken.
✗ Branch 14 not taken.
✗ Branch 19 not taken.
✗ Branch 22 not taken.
✓ Branch 29 taken 1 time.
✗ Branch 30 not taken.
1 ASSERT_EQ( 1, localCopy.count) << "count #1";
160
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_EQ(code, localCopy.error_codes[0]);
161
162 // let's remove value which is not in the collection
163
1/1
✓ Branch 1 taken 1 time.
1 removeError((ObdCode) 22);
164 // element not present - nothing to removed
165
3/8
✓ Branch 3 taken 1 time.
✗ Branch 7 not taken.
✓ Branch 8 taken 1 time.
✗ Branch 11 not taken.
✗ Branch 16 not taken.
✗ Branch 19 not taken.
✓ Branch 26 taken 1 time.
✗ Branch 27 not taken.
1 ASSERT_EQ(1, localCopy.count);
166
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_EQ(code, localCopy.error_codes[0]);
167
168 1 code = ObdCode::OBD_TPS2_Correlation;
169
1/1
✓ Branch 1 taken 1 time.
1 addError(code);
170
1/1
✓ Branch 1 taken 1 time.
1 getErrorCodes(&localCopy);
171 // todo: ASSERT_EQ(2, localCopy.count);
172
173
2/2
✓ Branch 0 taken 100 times.
✓ Branch 1 taken 1 time.
2/2
✓ Decision 'true' taken 100 times.
✓ Decision 'false' taken 1 time.
101 for (int code = 0; code < 100; code++) {
174
1/1
✓ Branch 1 taken 100 times.
100 addError((ObdCode) code);
175 }
176
1/1
✓ Branch 1 taken 1 time.
1 getErrorCodes(&localCopy);
177
3/8
✓ Branch 3 taken 1 time.
✗ Branch 7 not taken.
✓ Branch 8 taken 1 time.
✗ Branch 11 not taken.
✗ Branch 16 not taken.
✗ Branch 19 not taken.
✓ Branch 26 taken 1 time.
✗ Branch 27 not taken.
1 ASSERT_EQ(MAX_ERROR_CODES_COUNT, localCopy.count);
178
179 // now we have full array and code below present
180
1/1
✓ Branch 1 taken 1 time.
1 removeError(code);
181
1/1
✓ Branch 1 taken 1 time.
1 getErrorCodes(&localCopy);
182
3/8
✓ Branch 3 taken 1 time.
✗ Branch 7 not taken.
✓ Branch 8 taken 1 time.
✗ Branch 11 not taken.
✗ Branch 16 not taken.
✗ Branch 19 not taken.
✓ Branch 26 taken 1 time.
✗ Branch 27 not taken.
1 ASSERT_EQ(MAX_ERROR_CODES_COUNT - 1, localCopy.count);
183 }
184
185 static int lastInteger = -1;
186 static int lastInteger2 = -1;
187
188 2 static void testEchoI(int param) {
189 2 lastInteger = param;
190 2 }
191
192 2 static void testEchoII(int param, int param2) {
193 2 lastInteger = param;
194 2 lastInteger2 = param2;
195 2 }
196
197 static const char *lastFirst = NULL;
198 static const char *lastThird = NULL;
199
200 2 static void testEchoSSS(const char *first, const char *second, const char *third) {
201 2 lastFirst = first;
202 2 lastThird = third;
203 2 }
204
205 static float fFirst;
206 static float fSecond;
207 static float fThird;
208
209 1 static void testEchoFFF(float first, float second, float third) {
210 1 fFirst = first;
211 1 fSecond = second;
212 1 fThird = third;
213 1 }
214
215 #define UNKNOWN_COMMAND "dfadasdasd"
216
217 static loc_t GPSdata;
218
219 static char nmeaMessage[1000];
220
221 4 TEST(misc, testGpsParser) {
222 1 strcpy(nmeaMessage, "");
223 1 gps_location(&GPSdata, nmeaMessage);
224
225 // we need to pass a mutable string, not a constant because the parser would be modifying the string
226 1 strcpy(nmeaMessage, "$GPRMC,173843,A,3349.896,N,11808.521,W,000.0,360.0,230108,013.4,E*69");
227 1 gps_location(&GPSdata, nmeaMessage);
228
3/9
✓ Branch 3 taken 1 time.
✗ Branch 7 not taken.
✓ Branch 8 taken 1 time.
✗ Branch 11 not taken.
✗ Branch 14 not taken.
✗ Branch 19 not taken.
✗ Branch 22 not taken.
✓ Branch 29 taken 1 time.
✗ Branch 30 not taken.
1 ASSERT_EQ( 4, GPSdata.quality) << "1 valid";
229
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(3349.896, GPSdata.latitude, EPS3D) << "1 latitude";
230
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(11808.521, GPSdata.longitude, EPS3D) << "1 longitude";
231
232
3/9
✓ Branch 3 taken 1 time.
✗ Branch 7 not taken.
✓ Branch 8 taken 1 time.
✗ Branch 11 not taken.
✗ Branch 14 not taken.
✗ Branch 19 not taken.
✗ Branch 22 not taken.
✓ Branch 29 taken 1 time.
✗ Branch 30 not taken.
1 ASSERT_EQ( 0, GPSdata.speed) << "1 speed";
233 // ASSERT_EQ( 0, GPSdata.altitude) << "1 altitude"; // GPRMC not overwrite altitude
234
3/9
✓ Branch 3 taken 1 time.
✗ Branch 7 not taken.
✓ Branch 8 taken 1 time.
✗ Branch 11 not taken.
✗ Branch 14 not taken.
✗ Branch 19 not taken.
✗ Branch 22 not taken.
✓ Branch 29 taken 1 time.
✗ Branch 30 not taken.
1 ASSERT_EQ( 360, GPSdata.course) << "1 course";
235
236 1 strcpy(nmeaMessage, "$GPGGA,111609.14,5001.27,N,3613.06,E,3,08,0.0,10.2,M,0.0,M,0.0,0000*70");
237 1 gps_location(&GPSdata, nmeaMessage);
238
3/9
✓ Branch 3 taken 1 time.
✗ Branch 7 not taken.
✓ Branch 8 taken 1 time.
✗ Branch 11 not taken.
✗ Branch 14 not taken.
✗ Branch 19 not taken.
✗ Branch 22 not taken.
✓ Branch 29 taken 1 time.
✗ Branch 30 not taken.
1 ASSERT_EQ( 3, GPSdata.quality) << "2 valid"; // see field details
239
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(50.0212, GPSdata.latitude, EPS3D) << "2 latitude";
240
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(36.2177, GPSdata.longitude, EPS3D) << "2 longitude";
241
3/9
✓ Branch 3 taken 1 time.
✗ Branch 7 not taken.
✓ Branch 8 taken 1 time.
✗ Branch 11 not taken.
✗ Branch 14 not taken.
✗ Branch 19 not taken.
✗ Branch 22 not taken.
✓ Branch 29 taken 1 time.
✗ Branch 30 not taken.
1 ASSERT_EQ( 0, GPSdata.speed) << "2 speed";
242
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(10.2, GPSdata.altitude, EPS3D) << "2 altitude";
243 // ASSERT_EQ( 0, GPSdata.course) << "2 course"; // GPGGA not overwrite course
244
245 1 strcpy(nmeaMessage, "$GPRMC,111609.14,A,5001.27,N,3613.06,E,11.2,0.0,261206,0.0,E*50");
246 1 gps_location(&GPSdata, nmeaMessage);
247
3/9
✓ Branch 3 taken 1 time.
✗ Branch 7 not taken.
✓ Branch 8 taken 1 time.
✗ Branch 11 not taken.
✗ Branch 14 not taken.
✗ Branch 19 not taken.
✗ Branch 22 not taken.
✓ Branch 29 taken 1 time.
✗ Branch 30 not taken.
1 ASSERT_EQ( 4, GPSdata.quality) << "3 valid";
248
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(5001.27, GPSdata.latitude, EPS3D) << "3 latitude";
249
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(3613.06, GPSdata.longitude, EPS3D) << "3 longitude";
250
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(11.2, GPSdata.speed, EPS3D) << "3 speed";
251 // ASSERT_EQ( 0, GPSdata.altitude) << "3 altitude"; // GPRMC not overwrite altitude
252
3/9
✓ Branch 3 taken 1 time.
✗ Branch 7 not taken.
✓ Branch 8 taken 1 time.
✗ Branch 11 not taken.
✗ Branch 14 not taken.
✗ Branch 19 not taken.
✗ Branch 22 not taken.
✓ Branch 29 taken 1 time.
✗ Branch 30 not taken.
1 ASSERT_EQ( 0, GPSdata.course) << "3 course";
253
3/9
✓ Branch 4 taken 1 time.
✗ Branch 9 not taken.
✓ Branch 10 taken 1 time.
✗ Branch 13 not taken.
✗ Branch 16 not taken.
✗ Branch 21 not taken.
✗ Branch 24 not taken.
✓ Branch 31 taken 1 time.
✗ Branch 32 not taken.
1 ASSERT_EQ( 2006u, GPSdata.time.year + 1900u) << "3 GPS yy";
254
3/9
✓ Branch 3 taken 1 time.
✗ Branch 7 not taken.
✓ Branch 8 taken 1 time.
✗ Branch 11 not taken.
✗ Branch 14 not taken.
✗ Branch 19 not taken.
✗ Branch 22 not taken.
✓ Branch 29 taken 1 time.
✗ Branch 30 not taken.
1 ASSERT_EQ( 12u, GPSdata.time.month) << "3 GPS mm";
255
3/9
✓ Branch 3 taken 1 time.
✗ Branch 7 not taken.
✓ Branch 8 taken 1 time.
✗ Branch 11 not taken.
✗ Branch 14 not taken.
✗ Branch 19 not taken.
✗ Branch 22 not taken.
✓ Branch 29 taken 1 time.
✗ Branch 30 not taken.
1 ASSERT_EQ( 26u, GPSdata.time.day) << "3 GPS dd";
256
3/9
✓ Branch 3 taken 1 time.
✗ Branch 7 not taken.
✓ Branch 8 taken 1 time.
✗ Branch 11 not taken.
✗ Branch 14 not taken.
✗ Branch 19 not taken.
✗ Branch 22 not taken.
✓ Branch 29 taken 1 time.
✗ Branch 30 not taken.
1 ASSERT_EQ( 11u, GPSdata.time.hour) << "3 GPS hh";
257
3/9
✓ Branch 3 taken 1 time.
✗ Branch 7 not taken.
✓ Branch 8 taken 1 time.
✗ Branch 11 not taken.
✗ Branch 14 not taken.
✗ Branch 19 not taken.
✗ Branch 22 not taken.
✓ Branch 29 taken 1 time.
✗ Branch 30 not taken.
1 ASSERT_EQ( 16u, GPSdata.time.minute) << "3 GPS mm";
258
3/9
✓ Branch 3 taken 1 time.
✗ Branch 7 not taken.
✓ Branch 8 taken 1 time.
✗ Branch 11 not taken.
✗ Branch 14 not taken.
✗ Branch 19 not taken.
✗ Branch 22 not taken.
✓ Branch 29 taken 1 time.
✗ Branch 30 not taken.
1 ASSERT_EQ( 9u, GPSdata.time.second) << "3 GPS ss";
259
260 // check again first one
261 // we need to pass a mutable string, not a constant because the parser would be modifying the string
262 1 strcpy(nmeaMessage, "$GPRMC,173843,A,3349.896,N,11808.521,W,000.0,360.0,230108,013.4,E*69");
263 1 gps_location(&GPSdata, nmeaMessage);
264
3/9
✓ Branch 3 taken 1 time.
✗ Branch 7 not taken.
✓ Branch 8 taken 1 time.
✗ Branch 11 not taken.
✗ Branch 14 not taken.
✗ Branch 19 not taken.
✗ Branch 22 not taken.
✓ Branch 29 taken 1 time.
✗ Branch 30 not taken.
1 ASSERT_EQ( 4, GPSdata.quality) << "4 valid";
265
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(3349.896, GPSdata.latitude, EPS3D) << "4 latitude";
266
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(11808.521, GPSdata.longitude, EPS3D) << "4 longitude";
267
3/9
✓ Branch 3 taken 1 time.
✗ Branch 7 not taken.
✓ Branch 8 taken 1 time.
✗ Branch 11 not taken.
✗ Branch 14 not taken.
✗ Branch 19 not taken.
✗ Branch 22 not taken.
✓ Branch 29 taken 1 time.
✗ Branch 30 not taken.
1 ASSERT_EQ( 0, GPSdata.speed) << "4 speed";
268
3/9
✓ Branch 3 taken 1 time.
✗ Branch 7 not taken.
✓ Branch 8 taken 1 time.
✗ Branch 11 not taken.
✗ Branch 14 not taken.
✗ Branch 19 not taken.
✗ Branch 22 not taken.
✓ Branch 29 taken 1 time.
✗ Branch 30 not taken.
1 ASSERT_EQ( 360, GPSdata.course) << "4 course";
269 }
270
271 // this buffer is needed because on Unix you would not be able to change static char constants
272 static char buffer[300];
273
274 4 TEST(misc, testConsoleLogic) {
275 1 resetConsoleActions();
276
277 1 helpCommand();
278
279 1 const char * cmd = "he ha";
280
4/9
✓ Branch 3 taken 1 time.
✓ Branch 7 taken 1 time.
✗ Branch 12 not taken.
✓ Branch 13 taken 1 time.
✗ Branch 16 not taken.
✗ Branch 21 not taken.
✗ Branch 24 not taken.
✓ Branch 31 taken 1 time.
✗ Branch 32 not taken.
1 ASSERT_EQ(2, findEndOfToken(cmd));
281
282 1 cmd = "\"hee\" ha";
283
4/9
✓ Branch 3 taken 1 time.
✓ Branch 7 taken 1 time.
✗ Branch 12 not taken.
✓ Branch 13 taken 1 time.
✗ Branch 16 not taken.
✗ Branch 21 not taken.
✗ Branch 24 not taken.
✓ Branch 31 taken 1 time.
✗ Branch 32 not taken.
1 ASSERT_EQ(5, findEndOfToken(cmd));
284
285 1 cmd = "\"h e\" ha";
286
4/9
✓ Branch 3 taken 1 time.
✓ Branch 7 taken 1 time.
✗ Branch 12 not taken.
✓ Branch 13 taken 1 time.
✗ Branch 16 not taken.
✗ Branch 21 not taken.
✗ Branch 24 not taken.
✓ Branch 31 taken 1 time.
✗ Branch 32 not taken.
1 ASSERT_EQ(5, findEndOfToken(cmd));
287
288 1 strcpy(buffer, "echo");
289
4/10
✓ Branch 3 taken 1 time.
✓ Branch 6 taken 1 time.
✗ Branch 11 not taken.
✓ Branch 12 taken 1 time.
✗ Branch 15 not taken.
✗ Branch 20 not taken.
✗ Branch 24 not taken.
✗ Branch 27 not taken.
✓ Branch 36 taken 1 time.
✗ Branch 37 not taken.
1 ASSERT_TRUE(strEqual("echo", unquote(buffer)));
290
291 1 strcpy(buffer, "\"echo\"");
292
4/11
✓ Branch 3 taken 1 time.
✓ Branch 6 taken 1 time.
✗ Branch 11 not taken.
✓ Branch 12 taken 1 time.
✗ Branch 15 not taken.
✗ Branch 18 not taken.
✗ Branch 23 not taken.
✗ Branch 27 not taken.
✗ Branch 30 not taken.
✓ Branch 39 taken 1 time.
✗ Branch 40 not taken.
1 ASSERT_TRUE(strEqual("echo", unquote(buffer))) << "unquote quoted";
293
294
4/9
✓ Branch 3 taken 1 time.
✓ Branch 7 taken 1 time.
✗ Branch 12 not taken.
✓ Branch 13 taken 1 time.
✗ Branch 16 not taken.
✗ Branch 21 not taken.
✗ Branch 24 not taken.
✓ Branch 31 taken 1 time.
✗ Branch 32 not taken.
1 ASSERT_EQ(10, tokenLength(UNKNOWN_COMMAND));
295
296 // handling invalid token should work
297 1 strcpy(buffer, "sdasdafasd asd");
298 1 handleConsoleLine(buffer);
299
300 1 printf("\r\naddConsoleActionI\r\n");
301 1 addConsoleActionI("echoi", testEchoI);
302 1 strcpy(buffer, "echoi 239");
303 1 handleConsoleLine(buffer);
304
3/8
✓ Branch 3 taken 1 time.
✗ Branch 7 not taken.
✓ Branch 8 taken 1 time.
✗ Branch 11 not taken.
✗ Branch 16 not taken.
✗ Branch 19 not taken.
✓ Branch 26 taken 1 time.
✗ Branch 27 not taken.
1 ASSERT_EQ(239, lastInteger);
305
306 1 printf("\r\naddConsoleActionI 240 with two spaces\r\n");
307 1 strcpy(buffer, "echoi 240");
308 1 handleConsoleLine(buffer);
309
3/8
✓ Branch 3 taken 1 time.
✗ Branch 7 not taken.
✓ Branch 8 taken 1 time.
✗ Branch 11 not taken.
✗ Branch 16 not taken.
✗ Branch 19 not taken.
✓ Branch 26 taken 1 time.
✗ Branch 27 not taken.
1 ASSERT_EQ(240, lastInteger);
310
311
312 1 printf("\r\naddConsoleActionII\r\n");
313 1 addConsoleActionII("echoii", testEchoII);
314 1 strcpy(buffer, "echoii 22 239");
315 1 handleConsoleLine(buffer);
316
3/8
✓ Branch 3 taken 1 time.
✗ Branch 7 not taken.
✓ Branch 8 taken 1 time.
✗ Branch 11 not taken.
✗ Branch 16 not taken.
✗ Branch 19 not taken.
✓ Branch 26 taken 1 time.
✗ Branch 27 not taken.
1 ASSERT_EQ(22, lastInteger);
317
3/8
✓ Branch 3 taken 1 time.
✗ Branch 7 not taken.
✓ Branch 8 taken 1 time.
✗ Branch 11 not taken.
✗ Branch 16 not taken.
✗ Branch 19 not taken.
✓ Branch 26 taken 1 time.
✗ Branch 27 not taken.
1 ASSERT_EQ(239, lastInteger2);
318
319 1 printf("\r\naddConsoleActionII three spaces\r\n");
320 1 strcpy(buffer, "echoii 21 220");
321 1 handleConsoleLine(buffer);
322
3/8
✓ Branch 3 taken 1 time.
✗ Branch 7 not taken.
✓ Branch 8 taken 1 time.
✗ Branch 11 not taken.
✗ Branch 16 not taken.
✗ Branch 19 not taken.
✓ Branch 26 taken 1 time.
✗ Branch 27 not taken.
1 ASSERT_EQ(21, lastInteger);
323
3/8
✓ Branch 3 taken 1 time.
✗ Branch 7 not taken.
✓ Branch 8 taken 1 time.
✗ Branch 11 not taken.
✗ Branch 16 not taken.
✗ Branch 19 not taken.
✓ Branch 26 taken 1 time.
✗ Branch 27 not taken.
1 ASSERT_EQ(220, lastInteger2);
324
325 1 printf("\r\addConsoleActionSSS\r\n");
326 1 addConsoleActionSSS("echosss", testEchoSSS);
327 1 strcpy(buffer, "echosss 111 222 333");
328 1 handleConsoleLine(buffer);
329
3/8
✓ Branch 4 taken 1 time.
✗ Branch 9 not taken.
✓ Branch 10 taken 1 time.
✗ Branch 13 not taken.
✗ Branch 18 not taken.
✗ Branch 21 not taken.
✓ Branch 28 taken 1 time.
✗ Branch 29 not taken.
1 ASSERT_EQ(111, atoi(lastFirst));
330
3/8
✓ Branch 4 taken 1 time.
✗ Branch 9 not taken.
✓ Branch 10 taken 1 time.
✗ Branch 13 not taken.
✗ Branch 18 not taken.
✗ Branch 21 not taken.
✓ Branch 28 taken 1 time.
✗ Branch 29 not taken.
1 ASSERT_EQ(333, atoi(lastThird));
331
332 1 strcpy(buffer, "echosss \" 1\" 222 333");
333 1 handleConsoleLine(buffer);
334
3/9
✓ Branch 3 taken 1 time.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 time.
✗ Branch 12 not taken.
✗ Branch 17 not taken.
✗ Branch 21 not taken.
✗ Branch 24 not taken.
✓ Branch 33 taken 1 time.
✗ Branch 34 not taken.
1 ASSERT_TRUE(strEqual("\" 1\"", lastFirst));
335
336 1 printf("\r\addConsoleActionFFF\r\n");
337 1 addConsoleActionFFF("echofff", testEchoFFF);
338 1 strcpy(buffer, "echofff 1.0 2 00003.0");
339 1 handleConsoleLine(buffer);
340
341
3/8
✓ Branch 3 taken 1 time.
✗ Branch 7 not taken.
✓ Branch 8 taken 1 time.
✗ Branch 11 not taken.
✗ Branch 16 not taken.
✗ Branch 19 not taken.
✓ Branch 26 taken 1 time.
✗ Branch 27 not taken.
1 ASSERT_EQ(1.0, fFirst);
342
3/8
✓ Branch 3 taken 1 time.
✗ Branch 7 not taken.
✓ Branch 8 taken 1 time.
✗ Branch 11 not taken.
✗ Branch 16 not taken.
✗ Branch 19 not taken.
✓ Branch 26 taken 1 time.
✗ Branch 27 not taken.
1 ASSERT_EQ(2.0, fSecond);
343
3/8
✓ Branch 3 taken 1 time.
✗ Branch 7 not taken.
✓ Branch 8 taken 1 time.
✗ Branch 11 not taken.
✗ Branch 16 not taken.
✗ Branch 19 not taken.
✓ Branch 26 taken 1 time.
✗ Branch 27 not taken.
1 ASSERT_EQ(3.0, fThird);
344
345 //addConsoleActionSSS("GPS", testGpsParser);
346 }
347
348 4 TEST(misc, testFLStack) {
349
1/1
✓ Branch 2 taken 1 time.
1 FLStack<int, 4> stack;
350
3/8
✓ Branch 5 taken 1 time.
✗ Branch 10 not taken.
✓ Branch 11 taken 1 time.
✗ Branch 14 not taken.
✗ Branch 19 not taken.
✗ Branch 22 not taken.
✓ Branch 29 taken 1 time.
✗ Branch 30 not taken.
1 ASSERT_EQ(0, stack.size());
351
352
1/1
✓ Branch 1 taken 1 time.
1 stack.push(123);
353
1/1
✓ Branch 1 taken 1 time.
1 stack.push(234);
354
3/8
✓ Branch 5 taken 1 time.
✗ Branch 10 not taken.
✓ Branch 11 taken 1 time.
✗ Branch 14 not taken.
✗ Branch 19 not taken.
✗ Branch 22 not taken.
✓ Branch 29 taken 1 time.
✗ Branch 30 not taken.
1 ASSERT_EQ(2, stack.size());
355
356
1/1
✓ Branch 2 taken 1 time.
1 int v = stack.pop();
357
3/8
✓ Branch 3 taken 1 time.
✗ Branch 7 not taken.
✓ Branch 8 taken 1 time.
✗ Branch 11 not taken.
✗ Branch 16 not taken.
✗ Branch 19 not taken.
✓ Branch 26 taken 1 time.
✗ Branch 27 not taken.
1 ASSERT_EQ(234, v);
358
3/8
✓ Branch 5 taken 1 time.
✗ Branch 10 not taken.
✓ Branch 11 taken 1 time.
✗ Branch 14 not taken.
✗ Branch 19 not taken.
✗ Branch 22 not taken.
✓ Branch 29 taken 1 time.
✗ Branch 30 not taken.
1 ASSERT_EQ(1, stack.size());
359
4/9
✓ Branch 3 taken 1 time.
✓ Branch 7 taken 1 time.
✗ Branch 12 not taken.
✓ Branch 13 taken 1 time.
✗ Branch 16 not taken.
✗ Branch 21 not taken.
✗ Branch 24 not taken.
✓ Branch 31 taken 1 time.
✗ Branch 32 not taken.
1 ASSERT_EQ(123, stack.get(0));
360
361
1/1
✓ Branch 1 taken 1 time.
1 v = stack.pop();
362
3/8
✓ Branch 3 taken 1 time.
✗ Branch 7 not taken.
✓ Branch 8 taken 1 time.
✗ Branch 11 not taken.
✗ Branch 16 not taken.
✗ Branch 19 not taken.
✓ Branch 26 taken 1 time.
✗ Branch 27 not taken.
1 ASSERT_EQ(123, v);
363
3/8
✓ Branch 5 taken 1 time.
✗ Branch 10 not taken.
✓ Branch 11 taken 1 time.
✗ Branch 14 not taken.
✗ Branch 19 not taken.
✗ Branch 22 not taken.
✓ Branch 29 taken 1 time.
✗ Branch 30 not taken.
1 ASSERT_EQ(0, stack.size());
364
365
1/1
✓ Branch 1 taken 1 time.
1 stack.push(123);
366
1/1
✓ Branch 1 taken 1 time.
1 stack.push(234);
367
1/1
✓ Branch 1 taken 1 time.
1 stack.push(345);
368
1/1
✓ Branch 1 taken 1 time.
1 stack.push(456);
369
3/8
✓ Branch 5 taken 1 time.
✗ Branch 10 not taken.
✓ Branch 11 taken 1 time.
✗ Branch 14 not taken.
✗ Branch 19 not taken.
✗ Branch 22 not taken.
✓ Branch 29 taken 1 time.
✗ Branch 30 not taken.
1 ASSERT_EQ(4, stack.size());
370
371 1 stack.remove(123);
372
4/9
✓ Branch 3 taken 1 time.
✓ Branch 7 taken 1 time.
✗ Branch 12 not taken.
✓ Branch 13 taken 1 time.
✗ Branch 16 not taken.
✗ Branch 21 not taken.
✗ Branch 24 not taken.
✓ Branch 31 taken 1 time.
✗ Branch 32 not taken.
1 ASSERT_EQ(456, stack.get(0));
373
3/8
✓ Branch 5 taken 1 time.
✗ Branch 10 not taken.
✓ Branch 11 taken 1 time.
✗ Branch 14 not taken.
✗ Branch 19 not taken.
✗ Branch 22 not taken.
✓ Branch 29 taken 1 time.
✗ Branch 30 not taken.
1 ASSERT_EQ(3, stack.size());
374 }
375
376 static char buff[32];
377
378 4 TEST(misc, testMisc) {
379 1 strcpy(buff, " ab ");
380 // we need a mutable array here
381
4/10
✓ Branch 3 taken 1 time.
✓ Branch 6 taken 1 time.
✗ Branch 11 not taken.
✓ Branch 12 taken 1 time.
✗ Branch 15 not taken.
✗ Branch 20 not taken.
✗ Branch 24 not taken.
✗ Branch 27 not taken.
✓ Branch 36 taken 1 time.
✗ Branch 37 not taken.
1 ASSERT_TRUE(strEqual("ab", efiTrim(buff)));
382
383
384 {
385 1 float v = atoff("1.0");
386
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(1.0, v, EPS4D) << "atoff";
387 }
388 {
389 1 float v = atoff("nan");
390
2/9
✗ Branch 6 not taken.
✓ Branch 7 taken 1 time.
✗ Branch 10 not taken.
✗ Branch 13 not taken.
✗ Branch 18 not taken.
✗ Branch 22 not taken.
✗ Branch 25 not taken.
✓ Branch 34 taken 1 time.
✗ Branch 35 not taken.
1 ASSERT_TRUE(std::isnan(v)) << "NaN atoff";
391 }
392 {
393 1 float v = atoff("N");
394
2/9
✗ Branch 6 not taken.
✓ Branch 7 taken 1 time.
✗ Branch 10 not taken.
✗ Branch 13 not taken.
✗ Branch 18 not taken.
✗ Branch 22 not taken.
✗ Branch 25 not taken.
✓ Branch 34 taken 1 time.
✗ Branch 35 not taken.
1 ASSERT_TRUE(std::isnan(v)) << "NaN atoff";
395 }
396
397 // ASSERT_EQ(true, strEqual("spa3", getPinName(SPARKOUT_3_OUTPUT)));
398 // ASSERT_EQ(SPARKOUT_12_OUTPUT, getPinByName("spa12"));
399 }
400
401 522954 int getRusEfiVersion() {
402 522954 return 123123;
403 }
404
405 4 TEST(util, PeakDetect) {
406 1 constexpr int startTime = 50;
407 1 constexpr int timeout = 100;
408 1 PeakDetect<int, timeout> dut;
409
410 // Set a peak
411
2/6
✓ Branch 5 taken 1 time.
✗ Branch 10 not taken.
✓ Branch 11 taken 1 time.
✗ Branch 14 not taken.
✗ Branch 19 not taken.
✗ Branch 22 not taken.
1 EXPECT_EQ(dut.detect(1000, startTime), 1000);
412
413 // Smaller value at the same time is ignored
414
2/6
✓ Branch 5 taken 1 time.
✗ Branch 10 not taken.
✓ Branch 11 taken 1 time.
✗ Branch 14 not taken.
✗ Branch 19 not taken.
✗ Branch 22 not taken.
1 EXPECT_EQ(dut.detect(500, startTime), 1000);
415
416 // Larger value at the same time raises the peak
417
2/6
✓ Branch 5 taken 1 time.
✗ Branch 10 not taken.
✓ Branch 11 taken 1 time.
✗ Branch 14 not taken.
✗ Branch 19 not taken.
✗ Branch 22 not taken.
1 EXPECT_EQ(dut.detect(1500, startTime), 1500);
418
419 // Small value at almost the timeout is ignored
420
2/6
✓ Branch 5 taken 1 time.
✗ Branch 10 not taken.
✓ Branch 11 taken 1 time.
✗ Branch 14 not taken.
✗ Branch 19 not taken.
✗ Branch 22 not taken.
1 EXPECT_EQ(dut.detect(500, startTime + timeout - 1), 1500);
421
422 // Small value past the timeout is used
423
2/6
✓ Branch 5 taken 1 time.
✗ Branch 10 not taken.
✓ Branch 11 taken 1 time.
✗ Branch 14 not taken.
✗ Branch 19 not taken.
✗ Branch 22 not taken.
1 EXPECT_EQ(dut.detect(500, startTime + timeout + 1), 500);
424 1 }
425
426 4 TEST(util, isInRange) {
427
1/6
✗ Branch 6 not taken.
✓ Branch 7 taken 1 time.
✗ Branch 10 not taken.
✗ Branch 15 not taken.
✗ Branch 19 not taken.
✗ Branch 22 not taken.
1 EXPECT_FALSE(isInRange(5, 4, 10));
428
1/6
✗ Branch 6 not taken.
✓ Branch 7 taken 1 time.
✗ Branch 10 not taken.
✗ Branch 15 not taken.
✗ Branch 19 not taken.
✗ Branch 22 not taken.
1 EXPECT_TRUE(isInRange(5, 5, 10));
429
1/6
✗ Branch 6 not taken.
✓ Branch 7 taken 1 time.
✗ Branch 10 not taken.
✗ Branch 15 not taken.
✗ Branch 19 not taken.
✗ Branch 22 not taken.
1 EXPECT_TRUE(isInRange(5, 7, 10));
430
1/6
✗ Branch 6 not taken.
✓ Branch 7 taken 1 time.
✗ Branch 10 not taken.
✗ Branch 15 not taken.
✗ Branch 19 not taken.
✗ Branch 22 not taken.
1 EXPECT_TRUE(isInRange(5, 10, 10));
431
1/6
✗ Branch 6 not taken.
✓ Branch 7 taken 1 time.
✗ Branch 10 not taken.
✗ Branch 15 not taken.
✗ Branch 19 not taken.
✗ Branch 22 not taken.
1 EXPECT_FALSE(isInRange(5, 11, 10));
432 1 }
433
434 4 TEST(util, wrapAngle) {
435
1/1
✓ Branch 2 taken 1 time.
1 EngineTestHelper eth(engine_type_e::TEST_ENGINE);
436
437 // Test within range
438
3/7
✓ Branch 3 taken 1 time.
✓ Branch 7 taken 1 time.
✗ Branch 12 not taken.
✓ Branch 13 taken 1 time.
✗ Branch 16 not taken.
✗ Branch 21 not taken.
✗ Branch 24 not taken.
1 EXPECT_EQ(0, wrapAngleMethod(0));
439
3/7
✓ Branch 3 taken 1 time.
✓ Branch 7 taken 1 time.
✗ Branch 12 not taken.
✓ Branch 13 taken 1 time.
✗ Branch 16 not taken.
✗ Branch 21 not taken.
✗ Branch 24 not taken.
1 EXPECT_EQ(20, wrapAngleMethod(20));
440
3/7
✓ Branch 3 taken 1 time.
✓ Branch 7 taken 1 time.
✗ Branch 12 not taken.
✓ Branch 13 taken 1 time.
✗ Branch 16 not taken.
✗ Branch 21 not taken.
✗ Branch 24 not taken.
1 EXPECT_EQ(710, wrapAngleMethod(710));
441
442 // Test off the top of the range
443
3/7
✓ Branch 3 taken 1 time.
✓ Branch 7 taken 1 time.
✗ Branch 12 not taken.
✓ Branch 13 taken 1 time.
✗ Branch 16 not taken.
✗ Branch 21 not taken.
✗ Branch 24 not taken.
1 EXPECT_EQ(1, wrapAngleMethod(721));
444
3/7
✓ Branch 3 taken 1 time.
✓ Branch 7 taken 1 time.
✗ Branch 12 not taken.
✓ Branch 13 taken 1 time.
✗ Branch 16 not taken.
✗ Branch 21 not taken.
✗ Branch 24 not taken.
1 EXPECT_EQ(20, wrapAngleMethod(740));
445
3/7
✓ Branch 3 taken 1 time.
✓ Branch 7 taken 1 time.
✗ Branch 12 not taken.
✓ Branch 13 taken 1 time.
✗ Branch 16 not taken.
✗ Branch 21 not taken.
✗ Branch 24 not taken.
1 EXPECT_EQ(719, wrapAngleMethod(720 + 719));
446
3/7
✓ Branch 3 taken 1 time.
✓ Branch 7 taken 1 time.
✗ Branch 12 not taken.
✓ Branch 13 taken 1 time.
✗ Branch 16 not taken.
✗ Branch 21 not taken.
✗ Branch 24 not taken.
1 EXPECT_EQ(0, wrapAngleMethod(720 + 720));
447
3/7
✓ Branch 3 taken 1 time.
✓ Branch 7 taken 1 time.
✗ Branch 12 not taken.
✓ Branch 13 taken 1 time.
✗ Branch 16 not taken.
✗ Branch 21 not taken.
✗ Branch 24 not taken.
1 EXPECT_EQ(5, wrapAngleMethod(10 * 720 + 5));
448
449 // Test off the bottom of the range
450
3/7
✓ Branch 3 taken 1 time.
✓ Branch 7 taken 1 time.
✗ Branch 12 not taken.
✓ Branch 13 taken 1 time.
✗ Branch 16 not taken.
✗ Branch 21 not taken.
✗ Branch 24 not taken.
1 EXPECT_EQ(719, wrapAngleMethod(-1));
451
3/7
✓ Branch 3 taken 1 time.
✓ Branch 7 taken 1 time.
✗ Branch 12 not taken.
✓ Branch 13 taken 1 time.
✗ Branch 16 not taken.
✗ Branch 21 not taken.
✗ Branch 24 not taken.
1 EXPECT_EQ(360, wrapAngleMethod(-360));
452
3/7
✓ Branch 3 taken 1 time.
✓ Branch 7 taken 1 time.
✗ Branch 12 not taken.
✓ Branch 13 taken 1 time.
✗ Branch 16 not taken.
✗ Branch 21 not taken.
✗ Branch 24 not taken.
1 EXPECT_EQ(1, wrapAngleMethod(-719));
453 2 }
454