This commit is contained in:
deeaitch committed 2026-10-11 06:30:18 -04:00
1 parent 51fcdb88ac
commit 0708316a37
155 files changed
+5190 -2691

No files matched your search

+24 -23
View File
@@ -21,13 +21,10 @@ namespace {
}
DecodeDatabase SingleSignal(const DecodeSignal &signal) {
DecodeDatabase database;
DecodeFrame frame;
frame.canId = 17U;
frame.signals.push_back(signal);
database.frames.push_back(frame);
database.frameIndexByKey.emplace(FrameKey(17U, false), 0U);
return database;
return DecodeDatabase({frame});
}
// Independent reference: collect the visited bits first, then weight them.
@@ -115,14 +112,12 @@ void CoverageTest::frameLookup() {
raw.canId = 18U;
QVERIFY(!decoder.Decode(database, raw).valid);
raw.canId = 17U;
database.frameIndexByKey.at(FrameKey(17U, false)) = database.frames.size();
QVERIFY(decoder.FindFrame(database, 17U, false) == nullptr);
QVERIFY(!decoder.Decode(database, raw).valid);
database.frameIndexByKey.at(FrameKey(17U, false)) = 0U;
database.frames[0].signals.clear();
DecodeFrame noSignals;
noSignals.canId = 17U;
database = DecodeDatabase({noSignals});
const DecodedFrameValue matched = decoder.Decode(database, raw);
QVERIFY(matched.valid);
QCOMPARE(matched.definition, &database.frames[0]);
QCOMPARE(matched.definition.get(), &database.GetFrames()[0]);
QVERIFY(matched.signals.empty());
}
@@ -255,21 +250,28 @@ void CoverageTest::malformedRuntimeMultiplexing() {
DecodeSignal selector;
selector.length = 1U;
selector.multiplexing.role = MultiplexRole::Selector;
DecodeDatabase database = SingleSignal(selector);
selector.name = "Selector";
std::vector<DecodeFrame> definitions = SingleSignal(selector).GetFrames();
DecodeSignal branch;
branch.name = "Branch";
branch.startBit = 8U;
branch.length = 8U;
branch.multiplexing.role = MultiplexRole::Branch;
branch.multiplexing.value = 1U;
database.frames[0].signals.push_back(branch);
definitions[0].signals.push_back(branch);
DecodeSignal ordinary;
ordinary.name = "Ordinary";
ordinary.startBit = 16U;
ordinary.length = 8U;
database.frames[0].signals.push_back(ordinary);
if (kind == 0) database.frames[0].signals.push_back(selector);
if (kind == 1) database.frames[0].signals[0].valueType = ValueType::Signed;
if (kind == 2) database.frames[0].signals[0].length = 65U;
if (kind == 3) database.frames[0].signals[1].multiplexing.value = 2U;
definitions[0].signals.push_back(ordinary);
if (kind == 0) {
selector.name = "SecondSelector";
definitions[0].signals.push_back(selector);
}
if (kind == 1) definitions[0].signals[0].valueType = ValueType::Signed;
if (kind == 2) definitions[0].signals[0].length = 65U;
if (kind == 3) definitions[0].signals[1].multiplexing.value = 2U;
const DecodeDatabase database(std::move(definitions));
RawCanFrame raw;
raw.canId = 17U;
raw.data = {1U, 42U, 99U};
@@ -491,8 +493,8 @@ void CoverageTest::missingFile() {
void CoverageTest::builders() {
const DecodeDatabase emptyRuntime = DbcDecodeBuilder().Build(DbcDatabase());
QVERIFY(emptyRuntime.frames.empty());
QVERIFY(emptyRuntime.frameIndexByKey.empty());
QVERIFY(emptyRuntime.GetFrames().empty());
QVERIFY(!emptyRuntime.FindFrame(FrameKey(0U, false)));
const std::unique_ptr<TreeNode> emptyTree = DbcTreeBuilder().Build(DbcDatabase());
QCOMPARE(emptyTree->GetType(), NodeType::Root);
QCOMPARE(emptyTree->GetName(), std::string("dbc"));
@@ -517,18 +519,17 @@ void CoverageTest::builders() {
source.frames[0].signals[1].valueDescriptions.clear();
source.frames.clear();
}
QCOMPARE(runtime.frames.size(), expected.frames.size());
QCOMPARE(runtime.GetFrames().size(), expected.frames.size());
QCOMPARE(tree->GetChildCount(), expected.frames.size());
QCOMPARE(runtime.frameIndexByKey.size(), expected.frames.size());
for (std::size_t i = 0; i < expected.frames.size(); ++i) {
const FrameInfo &frame = expected.frames[i];
const DecodeFrame &decodedFrame = runtime.frames[i];
const DecodeFrame &decodedFrame = runtime.GetFrames()[i];
const TreeNode *node = tree->GetChild(i);
QVERIFY(node && node->GetFrame());
QCOMPARE(node->GetType(), NodeType::Frame);
QCOMPARE(node->GetName(), frame.name);
QVERIFY(node->GetSignal() == nullptr);
QCOMPARE(runtime.frameIndexByKey.at(FrameKey(frame.canId, frame.isExtended)), i);
QCOMPARE(runtime.FindFrame(FrameKey(frame.canId, frame.isExtended)).get(), &decodedFrame);
const FrameInfo &copied = *node->GetFrame();
QCOMPARE(copied.name, frame.name);
QCOMPARE(decodedFrame.name, frame.name);