GCC Code Coverage Report


Directory: ./
File: unit_tests/tests/test_tunerstudio.cpp
Date: 2025-10-03 00:57:22
Coverage Exec Excl Total
Lines: 96.3% 52 0 54
Functions: 92.9% 13 0 14
Branches: 42.5% 48 0 113
Decisions: -% 0 - 0

Line Branch Decision Exec Source
1 #include "pch.h"
2 #include "tunerstudio.h"
3 #include "tunerstudio_io.h"
4
5 static uint8_t st5TestBuffer[16000];
6
7 class BufferTsChannel : public TsChannelBase {
8 public:
9 1 BufferTsChannel() : TsChannelBase("Test") { }
10
11 3 void write(const uint8_t* buffer, size_t size, bool /*isLastWriteInTransaction*/) override {
12 3 memcpy(&st5TestBuffer[writeIdx], buffer, size);
13 3 writeIdx += size;
14 3 }
15
16 size_t readTimeout(uint8_t* buffer, size_t size, int timeout) override {
17 // nothing to do here
18 return size;
19 }
20
21 3 void reset() {
22 3 writeIdx = 0;
23 3 }
24
25 size_t writeIdx = 0;
26 };
27
28 #define CODE 2
29 #define PAYLOAD "123"
30 #define SIZE strlen(PAYLOAD)
31
32 3 static void assertCrcPacket(BufferTsChannel& dut) {
33
3/8
✓ Branch 3 taken 3 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 3 times.
✗ Branch 11 not taken.
✗ Branch 16 not taken.
✗ Branch 19 not taken.
✓ Branch 26 taken 3 times.
✗ Branch 27 not taken.
3 ASSERT_EQ(dut.writeIdx, SIZE + 7);
34
35 // todo: proper uint16 comparison
36
3/8
✓ Branch 3 taken 3 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 3 times.
✗ Branch 11 not taken.
✗ Branch 16 not taken.
✗ Branch 19 not taken.
✓ Branch 26 taken 3 times.
✗ Branch 27 not taken.
3 ASSERT_EQ(st5TestBuffer[0], 0);
37
3/8
✓ Branch 3 taken 3 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 3 times.
✗ Branch 11 not taken.
✗ Branch 16 not taken.
✗ Branch 19 not taken.
✓ Branch 26 taken 3 times.
✗ Branch 27 not taken.
3 ASSERT_EQ(st5TestBuffer[1], SIZE + 1);
38
39
3/8
✓ Branch 3 taken 3 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 3 times.
✗ Branch 11 not taken.
✗ Branch 16 not taken.
✗ Branch 19 not taken.
✓ Branch 26 taken 3 times.
✗ Branch 27 not taken.
3 ASSERT_EQ(st5TestBuffer[2], CODE);
40
41
3/8
✓ Branch 4 taken 3 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 3 times.
✗ Branch 13 not taken.
✗ Branch 18 not taken.
✗ Branch 21 not taken.
✓ Branch 28 taken 3 times.
✗ Branch 29 not taken.
3 ASSERT_EQ(memcmp(&st5TestBuffer[3], PAYLOAD, SIZE), 0);
42
43
44 // todo: proper uint32 comparison
45
3/8
✓ Branch 3 taken 3 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 3 times.
✗ Branch 11 not taken.
✗ Branch 16 not taken.
✗ Branch 19 not taken.
✓ Branch 26 taken 3 times.
✗ Branch 27 not taken.
3 ASSERT_EQ(st5TestBuffer[6], 252);
46
3/8
✓ Branch 3 taken 3 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 3 times.
✗ Branch 11 not taken.
✗ Branch 16 not taken.
✗ Branch 19 not taken.
✓ Branch 26 taken 3 times.
✗ Branch 27 not taken.
3 ASSERT_EQ(st5TestBuffer[7], 68);
47
3/8
✓ Branch 3 taken 3 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 3 times.
✗ Branch 11 not taken.
✗ Branch 16 not taken.
✗ Branch 19 not taken.
✓ Branch 26 taken 3 times.
✗ Branch 27 not taken.
3 ASSERT_EQ(st5TestBuffer[8], 173);
48
3/8
✓ Branch 3 taken 3 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 3 times.
✗ Branch 11 not taken.
✗ Branch 16 not taken.
✗ Branch 19 not taken.
✓ Branch 26 taken 3 times.
✗ Branch 27 not taken.
3 ASSERT_EQ(st5TestBuffer[9], 87);
49 }
50
51 4 TEST(binary, testIsTouching) {
52
1/1
✓ Branch 2 taken 1 time.
1 EngineTestHelper eth(engine_type_e::TEST_ENGINE);
53
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_FALSE(isTouchingArea(0, 0, offsetof(persistent_config_s, veTable), sizeof(config->veTable)));
54
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(isTouchingArea(offsetof(persistent_config_s, veTable), 5, offsetof(persistent_config_s, veTable), sizeof(config->veTable)));
55 1 }
56
57 4 TEST(binary, testWriteCrc) {
58
1/1
✓ Branch 2 taken 1 time.
1 BufferTsChannel test;
59
60 // Let it pick which impl (small vs large) to use
61 1 test.reset();
62
1/1
✓ Branch 1 taken 1 time.
1 test.writeCrcPacket(CODE, (const uint8_t*)PAYLOAD, SIZE);
63
1/1
✓ Branch 1 taken 1 time.
1 assertCrcPacket(test);
64
65 // Force the large impl
66 1 test.reset();
67
1/1
✓ Branch 1 taken 1 time.
1 test.writeCrcPacket(CODE, (const uint8_t*)PAYLOAD, SIZE);
68
1/1
✓ Branch 1 taken 1 time.
1 assertCrcPacket(test);
69
70 // Force the small impl
71 1 test.reset();
72
1/1
✓ Branch 1 taken 1 time.
1 test.writeCrcPacket(CODE, (const uint8_t*)PAYLOAD, SIZE);
73
1/1
✓ Branch 1 taken 1 time.
1 assertCrcPacket(test);
74 1 }
75
76 4 TEST(TunerstudioCommands, writeChunkEngineConfig) {
77
1/1
✓ Branch 2 taken 1 time.
1 EngineTestHelper eth(engine_type_e::TEST_ENGINE);
78
1/1
✓ Branch 2 taken 1 time.
1 ::testing::NiceMock<MockTsChannel> channel;
79
80 1 uint8_t* configBytes = reinterpret_cast<uint8_t*>(config);
81
82 // Contains zero before the write
83 1 configBytes[100] = 0;
84
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(configBytes[100], 0);
85
86 // two step - writes to the engineConfiguration section require a burn
87 1 uint8_t val = 50;
88 1 TunerStudio instance;
89
1/1
✓ Branch 1 taken 1 time.
1 instance.handleWriteChunkCommand(&channel, 0, 100, 1, &val);
90
91
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(configBytes[100], 50);
92 2 }
93