GCC Code Coverage Report


Directory: ./
File: unit_tests/tests/controllers/can/dash/test_can_bmw_e46.cpp
Date: 2025-12-31 05:30:59
Coverage Exec Excl Total
Lines: 100.0% 31 0 31
Functions: 100.0% 3 0 3
Branches: 37.7% 46 0 122
Decisions: -% 0 - 0

Line Branch Decision Exec Source
1 /*
2 * @file test_can_bmw_e46.cpp
3 *
4 * @date: dic 30, 2025
5 * @author FDSoftware
6 */
7
8
9 #include "pch.h"
10 #include "can_msg_tx.h"
11 #include "can.h"
12 #include "can_dash.h"
13 #include "can_bmw.h"
14
15 4 TEST(CanDash, BMW_e46) {
16
1/1
✓ Branch 2 taken 1 time.
1 EngineTestHelper eth(engine_type_e::TEST_ENGINE);
17 1 engineConfiguration->canNbcType = CAN_BUS_BMW_E46;
18
19
1/1
✓ Branch 1 taken 1 time.
1 engine->rpmCalculator.setRpmValue(1500);
20
1/1
✓ Branch 1 taken 1 time.
1 Sensor::setMockValue(SensorType::Clt, 70);
21
22
1/1
✓ Branch 2 taken 1 time.
1 CanCycle cycle(0);
23
24
1/1
✓ Branch 1 taken 1 time.
1 updateDash(cycle);
25
26
3/7
✓ Branch 4 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(txCanBuffer.getCount(), 2);
27
28 // First frame: CAN_BMW_E46_RPM (0x316)
29
1/1
✓ Branch 2 taken 1 time.
1 CANTxFrame frame1 = txCanBuffer.get();
30
2/6
✓ 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.
1 EXPECT_EQ(frame1.SID, CAN_BMW_E46_RPM);
31
2/6
✓ 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.
1 EXPECT_EQ(frame1.data8[0], 0x05); // ASC message
32
2/6
✓ 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.
1 EXPECT_EQ(frame1.data8[1], 0x0C); // Indexed Engine Torque
33 // data8[2-3]: RPM 1500 * 6.4 = 9600 = 0x25 | 0x80
34
2/6
✓ 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.
1 EXPECT_EQ(frame1.data8[2], 0x80);
35
2/6
✓ 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.
1 EXPECT_EQ(frame1.data8[3], 0x25);
36
2/6
✓ 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.
1 EXPECT_EQ(frame1.data8[4], 0x0C);
37
2/6
✓ 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.
1 EXPECT_EQ(frame1.data8[5], 0x15);
38
2/6
✓ 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.
1 EXPECT_EQ(frame1.data8[6], 0x00);
39
2/6
✓ 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.
1 EXPECT_EQ(frame1.data8[7], 0x35);
40
41 // Second frame: CAN_BMW_E46_DME2 (0x329)
42
1/1
✓ Branch 2 taken 1 time.
1 CANTxFrame frame2 = txCanBuffer.get();
43
2/6
✓ 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.
1 EXPECT_EQ(frame2.SID, CAN_BMW_E46_DME2);
44
2/6
✓ 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.
1 EXPECT_EQ(frame2.data8[0], 0x11);
45 // data8[1]: CLT converted (70 + 48.373) / 0.75; = 157.83 ≈ 0x9D
46
2/6
✓ 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.
1 EXPECT_EQ(frame2.data8[1], 0x9D);
47
2/6
✓ 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.
1 EXPECT_EQ(frame2.data8[2], 0x00); // baro sensor
48
2/6
✓ 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.
1 EXPECT_EQ(frame2.data8[3], 0x08);
49
2/6
✓ 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.
1 EXPECT_EQ(frame2.data8[4], 0x00); // TPS_VIRT_CRU_CAN
50
2/6
✓ 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.
1 EXPECT_EQ(frame2.data8[5], 0x00); // not used, TPS
51
2/6
✓ 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.
1 EXPECT_EQ(frame2.data8[6], 0x00); // brake system status
52
2/6
✓ 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.
1 EXPECT_EQ(frame2.data8[7], 0x00); // not used
53 2 }
54