Closes #16
This commit is contained in:
1 parent
7022c84941
commit
c3d3bd51fb
72 files changed
+3703
-2484
No files matched your search
@@ -703,313 +703,306 @@ $(document).ready(function(){initNavTree('dbc__parser__test_8cpp_source.html',''
|
||||
<div class="line"><a id="l00603" name="l00603"></a><span class="lineno"> 603</span> <span class="stringliteral">"Adjacent large integers remain distinct"</span>);</div>
|
||||
<div class="line"><a id="l00604" name="l00604"></a><span class="lineno"> 604</span> std::vector<DecodeFrame> definitions = runtime.<a class="code hl_function" href="classDecodeDatabase.html#aa034c1510984a85f60ad6c0bd744d6e8">GetFrames</a>();</div>
|
||||
<div class="line"><a id="l00605" name="l00605"></a><span class="lineno"> 605</span> definitions[0].signals[1].length = 0U;</div>
|
||||
<div class="line"><a id="l00606" name="l00606"></a><span class="lineno"> 606</span> runtime = <a class="code hl_class" href="classDecodeDatabase.html">DecodeDatabase</a>(definitions);</div>
|
||||
<div class="line"><a id="l00607" name="l00607"></a><span class="lineno"> 607</span> result = <a class="code hl_class" href="classDbcDecoder.html">DbcDecoder</a>().<a class="code hl_function" href="classDbcDecoder.html#a345951ffe5d943a70d3a1ea1f39e74f7">Decode</a>(runtime, raw);</div>
|
||||
<div class="line"><a id="l00608" name="l00608"></a><span class="lineno"> 608</span> CHECK(result.signals[0].<a class="code hl_variable" href="structDecodedFrameValue.html#a645f433798d48a2787e7f00dfbb7dff9">status</a> == SignalDecodeStatus::InvalidDefinition &&</div>
|
||||
<div class="line"><a id="l00609" name="l00609"></a><span class="lineno"> 609</span> result.signals[1].<a class="code hl_variable" href="structDecodedFrameValue.html#a645f433798d48a2787e7f00dfbb7dff9">status</a> == SignalDecodeStatus::InvalidDefinition,</div>
|
||||
<div class="line"><a id="l00610" name="l00610"></a><span class="lineno"> 610</span> <span class="stringliteral">"Malformed runtime selector distinguished from payload errors"</span>);</div>
|
||||
<div class="line"><a id="l00611" name="l00611"></a><span class="lineno"> 611</span> definitions[0].signals.pop_back();</div>
|
||||
<div class="line"><a id="l00612" name="l00612"></a><span class="lineno"> 612</span> runtime = <a class="code hl_class" href="classDecodeDatabase.html">DecodeDatabase</a>(definitions);</div>
|
||||
<div class="line"><a id="l00613" name="l00613"></a><span class="lineno"> 613</span> result = <a class="code hl_class" href="classDbcDecoder.html">DbcDecoder</a>().<a class="code hl_function" href="classDbcDecoder.html#a345951ffe5d943a70d3a1ea1f39e74f7">Decode</a>(runtime, raw);</div>
|
||||
<div class="line"><a id="l00614" name="l00614"></a><span class="lineno"> 614</span> CHECK(result.signals[0].<a class="code hl_variable" href="structDecodedFrameValue.html#a645f433798d48a2787e7f00dfbb7dff9">status</a> == SignalDecodeStatus::InvalidDefinition,</div>
|
||||
<div class="line"><a id="l00615" name="l00615"></a><span class="lineno"> 615</span> <span class="stringliteral">"Missing runtime selector"</span>);</div>
|
||||
<div class="line"><a id="l00616" name="l00616"></a><span class="lineno"> 616</span> fixture.Write(<span class="stringliteral">"BO_ 1 Frame: 2 ECU\n\n"</span></div>
|
||||
<div class="line"><a id="l00617" name="l00617"></a><span class="lineno"> 617</span> <span class="stringliteral">"SG_ Branch m2 : 8|8@1+ (1,0) [0|255] \"\" ECU\n"</span></div>
|
||||
<div class="line"><a id="l00618" name="l00618"></a><span class="lineno"> 618</span> <span class="stringliteral">"SG_ Mode M : 0|1@1+ (1,0) [0|1] \"\" ECU\n"</span>);</div>
|
||||
<div class="line"><a id="l00619" name="l00619"></a><span class="lineno"> 619</span> <span class="keywordtype">bool</span> rejected = <span class="keyword">false</span>;</div>
|
||||
<div class="line"><a id="l00620" name="l00620"></a><span class="lineno"> 620</span> <span class="keywordflow">try</span> {</div>
|
||||
<div class="line"><a id="l00621" name="l00621"></a><span class="lineno"> 621</span> <a class="code hl_class" href="classDbcParser.html">DbcParser</a>().<a class="code hl_function" href="classDbcParser.html#aef72826942c9095d653fafa435855e56">ParseFile</a>(fixture.path.string());</div>
|
||||
<div class="line"><a id="l00622" name="l00622"></a><span class="lineno"> 622</span> } <span class="keywordflow">catch</span> (<span class="keyword">const</span> std::runtime_error &error) {</div>
|
||||
<div class="line"><a id="l00623" name="l00623"></a><span class="lineno"> 623</span> rejected = std::string(error.what()).find(fixture.path.string() + <span class="stringliteral">":3: "</span>) == 0U;</div>
|
||||
<div class="line"><a id="l00624" name="l00624"></a><span class="lineno"> 624</span> }</div>
|
||||
<div class="line"><a id="l00625" name="l00625"></a><span class="lineno"> 625</span> CHECK(rejected, <span class="stringliteral">"Deferred validation reports branch source line"</span>);</div>
|
||||
<div class="line"><a id="l00626" name="l00626"></a><span class="lineno"> 626</span> fixture.Write(<span class="stringliteral">"BO_ 1 Frame: 2 ECU\n"</span></div>
|
||||
<div class="line"><a id="l00627" name="l00627"></a><span class="lineno"> 627</span> <span class="stringliteral">"SG_ A : 8|8@1+ (1,0) [0|255] \"\" ECU\n"</span></div>
|
||||
<div class="line"><a id="l00628" name="l00628"></a><span class="lineno"> 628</span> <span class="stringliteral">"SG_ B : 15|8@0+ (1,0) [0|255] \"\" ECU\n"</span>);</div>
|
||||
<div class="line"><a id="l00629" name="l00629"></a><span class="lineno"> 629</span> rejected = <span class="keyword">false</span>;</div>
|
||||
<div class="line"><a id="l00630" name="l00630"></a><span class="lineno"> 630</span> <span class="keywordflow">try</span> {</div>
|
||||
<div class="line"><a id="l00631" name="l00631"></a><span class="lineno"> 631</span> <a class="code hl_class" href="classDbcParser.html">DbcParser</a>().<a class="code hl_function" href="classDbcParser.html#aef72826942c9095d653fafa435855e56">ParseFile</a>(fixture.path.string());</div>
|
||||
<div class="line"><a id="l00632" name="l00632"></a><span class="lineno"> 632</span> } <span class="keywordflow">catch</span> (<span class="keyword">const</span> std::runtime_error &) {</div>
|
||||
<div class="line"><a id="l00633" name="l00633"></a><span class="lineno"> 633</span> rejected = <span class="keyword">true</span>;</div>
|
||||
<div class="line"><a id="l00634" name="l00634"></a><span class="lineno"> 634</span> }</div>
|
||||
<div class="line"><a id="l00635" name="l00635"></a><span class="lineno"> 635</span> CHECK(rejected, <span class="stringliteral">"Ordinary overlapping signals rejected"</span>);</div>
|
||||
<div class="line"><a id="l00636" name="l00636"></a><span class="lineno"> 636</span>}</div>
|
||||
<div class="line"><a id="l00637" name="l00637"></a><span class="lineno"> 637</span> </div>
|
||||
<div class="line"><a id="l00638" name="l00638"></a><span class="lineno"> 638</span><span class="keywordtype">void</span> DbcParserTest::invalidSignals() {</div>
|
||||
<div class="line"><a id="l00639" name="l00639"></a><span class="lineno"> 639</span> Fixture fixture;</div>
|
||||
<div class="line"><a id="l00640" name="l00640"></a><span class="lineno"> 640</span> <span class="keyword">const</span> std::string ordinary = SignalLine(<span class="stringliteral">"0"</span>, <span class="stringliteral">"8"</span>, <span class="stringliteral">"1+"</span>, <span class="stringliteral">"1"</span>, <span class="stringliteral">"0"</span>, <span class="stringliteral">"0"</span>, <span class="stringliteral">"255"</span>);</div>
|
||||
<div class="line"><a id="l00641" name="l00641"></a><span class="lineno"> 641</span> <span class="keywordflow">for</span> (<span class="keyword">const</span> std::string value: {<span class="stringliteral">"-1"</span>, <span class="stringliteral">"+1"</span>, <span class="stringliteral">"0junk"</span>, <span class="stringliteral">"0x10"</span>, <span class="stringliteral">"1.5"</span>,</div>
|
||||
<div class="line"><a id="l00642" name="l00642"></a><span class="lineno"> 642</span> <span class="stringliteral">"4294967296"</span>, <span class="stringliteral">"999999999999999999999"</span>}) {</div>
|
||||
<div class="line"><a id="l00643" name="l00643"></a><span class="lineno"> 643</span> RejectSignal(fixture, SignalLine(value, <span class="stringliteral">"8"</span>, <span class="stringliteral">"1+"</span>, <span class="stringliteral">"1"</span>, <span class="stringliteral">"0"</span>, <span class="stringliteral">"0"</span>, <span class="stringliteral">"255"</span>));</div>
|
||||
<div class="line"><a id="l00644" name="l00644"></a><span class="lineno"> 644</span> RejectSignal(fixture, SignalLine(<span class="stringliteral">"0"</span>, value, <span class="stringliteral">"1+"</span>, <span class="stringliteral">"1"</span>, <span class="stringliteral">"0"</span>, <span class="stringliteral">"0"</span>, <span class="stringliteral">"255"</span>));</div>
|
||||
<div class="line"><a id="l00645" name="l00645"></a><span class="lineno"> 645</span> }</div>
|
||||
<div class="line"><a id="l00646" name="l00646"></a><span class="lineno"> 646</span> <span class="keywordflow">for</span> (<span class="keyword">const</span> std::string length: {<span class="stringliteral">"0"</span>, <span class="stringliteral">"65"</span>})</div>
|
||||
<div class="line"><a id="l00647" name="l00647"></a><span class="lineno"> 647</span> RejectSignal(fixture, SignalLine(<span class="stringliteral">"0"</span>, length, <span class="stringliteral">"1+"</span>, <span class="stringliteral">"1"</span>, <span class="stringliteral">"0"</span>, <span class="stringliteral">"0"</span>, <span class="stringliteral">"255"</span>));</div>
|
||||
<div class="line"><a id="l00648" name="l00648"></a><span class="lineno"> 648</span> <span class="keywordflow">for</span> (<span class="keyword">const</span> std::string order: {<span class="stringliteral">"2+"</span>, <span class="stringliteral">"9-"</span>, <span class="stringliteral">"1"</span>, <span class="stringliteral">"1x"</span>, <span class="stringliteral">"1++"</span>, <span class="stringliteral">"01+"</span>})</div>
|
||||
<div class="line"><a id="l00649" name="l00649"></a><span class="lineno"> 649</span> RejectSignal(fixture, SignalLine(<span class="stringliteral">"0"</span>, <span class="stringliteral">"8"</span>, order, <span class="stringliteral">"1"</span>, <span class="stringliteral">"0"</span>, <span class="stringliteral">"0"</span>, <span class="stringliteral">"255"</span>));</div>
|
||||
<div class="line"><a id="l00650" name="l00650"></a><span class="lineno"> 650</span> <span class="keywordflow">for</span> (<span class="keyword">const</span> std::string value: {<span class="stringliteral">"1junk"</span>, <span class="stringliteral">"nan"</span>, <span class="stringliteral">"NaN"</span>, <span class="stringliteral">"inf"</span>, <span class="stringliteral">"-inf"</span>, <span class="stringliteral">"1e999"</span>, <span class="stringliteral">"1e-999"</span>, <span class="stringliteral">"0x1p2"</span>, <span class="stringliteral">""</span>, <span class="stringliteral">"1e"</span>, <span class="stringliteral">"1.2.3"</span>}) {</div>
|
||||
<div class="line"><a id="l00651" name="l00651"></a><span class="lineno"> 651</span> RejectSignal(fixture, SignalLine(<span class="stringliteral">"0"</span>, <span class="stringliteral">"8"</span>, <span class="stringliteral">"1+"</span>, value, <span class="stringliteral">"0"</span>, <span class="stringliteral">"0"</span>, <span class="stringliteral">"255"</span>));</div>
|
||||
<div class="line"><a id="l00652" name="l00652"></a><span class="lineno"> 652</span> RejectSignal(fixture, SignalLine(<span class="stringliteral">"0"</span>, <span class="stringliteral">"8"</span>, <span class="stringliteral">"1+"</span>, <span class="stringliteral">"1"</span>, value, <span class="stringliteral">"0"</span>, <span class="stringliteral">"255"</span>));</div>
|
||||
<div class="line"><a id="l00653" name="l00653"></a><span class="lineno"> 653</span> RejectSignal(fixture, SignalLine(<span class="stringliteral">"0"</span>, <span class="stringliteral">"8"</span>, <span class="stringliteral">"1+"</span>, <span class="stringliteral">"1"</span>, <span class="stringliteral">"0"</span>, value, <span class="stringliteral">"255"</span>));</div>
|
||||
<div class="line"><a id="l00654" name="l00654"></a><span class="lineno"> 654</span> RejectSignal(fixture, SignalLine(<span class="stringliteral">"0"</span>, <span class="stringliteral">"8"</span>, <span class="stringliteral">"1+"</span>, <span class="stringliteral">"1"</span>, <span class="stringliteral">"0"</span>, <span class="stringliteral">"0"</span>, value));</div>
|
||||
<div class="line"><a id="l00655" name="l00655"></a><span class="lineno"> 655</span> }</div>
|
||||
<div class="line"><a id="l00656" name="l00656"></a><span class="lineno"> 656</span> RejectSignal(fixture, SignalLine(<span class="stringliteral">"0"</span>, <span class="stringliteral">"8"</span>, <span class="stringliteral">"1+"</span>, <span class="stringliteral">"1"</span>, <span class="stringliteral">"0"</span>, <span class="stringliteral">"2"</span>, <span class="stringliteral">"1"</span>));</div>
|
||||
<div class="line"><a id="l00657" name="l00657"></a><span class="lineno"> 657</span> <span class="keywordflow">for</span> (<span class="keyword">const</span> std::string name: {<span class="stringliteral">""</span>, <span class="stringliteral">"Two Names"</span>, <span class="stringliteral">"Value m1M"</span>}) {</div>
|
||||
<div class="line"><a id="l00658" name="l00658"></a><span class="lineno"> 658</span> std::string line = ordinary;</div>
|
||||
<div class="line"><a id="l00659" name="l00659"></a><span class="lineno"> 659</span> line.replace(4U, 5U, name);</div>
|
||||
<div class="line"><a id="l00660" name="l00660"></a><span class="lineno"> 660</span> RejectSignal(fixture, line);</div>
|
||||
<div class="line"><a id="l00661" name="l00661"></a><span class="lineno"> 661</span> }</div>
|
||||
<div class="line"><a id="l00662" name="l00662"></a><span class="lineno"> 662</span> <span class="keywordflow">for</span> (<span class="keyword">const</span> std::string broken: {</div>
|
||||
<div class="line"><a id="l00663" name="l00663"></a><span class="lineno"> 663</span> <span class="stringliteral">"SG_"</span>, <span class="stringliteral">"SG_ Value"</span>, <span class="stringliteral">"SG_ Value : 0|8@1+ (1,0) [0|255] ECU"</span>,</div>
|
||||
<div class="line"><a id="l00664" name="l00664"></a><span class="lineno"> 664</span> <span class="stringliteral">"SG_ Value : 0|8@1+ (1,0) [0|255] \"\""</span>,</div>
|
||||
<div class="line"><a id="l00665" name="l00665"></a><span class="lineno"> 665</span> <span class="stringliteral">"SG_ Value : 0|8@1+ (1,0) [0|255] \"\" ECU,"</span>,</div>
|
||||
<div class="line"><a id="l00666" name="l00666"></a><span class="lineno"> 666</span> <span class="stringliteral">"SG_ Value : 0|8@1+ (1,0) [0|255] \"\" ECU extra"</span>})</div>
|
||||
<div class="line"><a id="l00667" name="l00667"></a><span class="lineno"> 667</span> RejectSignal(fixture, broken);</div>
|
||||
<div class="line"><a id="l00668" name="l00668"></a><span class="lineno"> 668</span> RejectSignal(fixture, SignalLine(<span class="stringliteral">"64"</span>, <span class="stringliteral">"1"</span>, <span class="stringliteral">"1+"</span>, <span class="stringliteral">"1"</span>, <span class="stringliteral">"0"</span>, <span class="stringliteral">"0"</span>, <span class="stringliteral">"1"</span>));</div>
|
||||
<div class="line"><a id="l00669" name="l00669"></a><span class="lineno"> 669</span> RejectSignal(fixture, SignalLine(<span class="stringliteral">"63"</span>, <span class="stringliteral">"2"</span>, <span class="stringliteral">"1+"</span>, <span class="stringliteral">"1"</span>, <span class="stringliteral">"0"</span>, <span class="stringliteral">"0"</span>, <span class="stringliteral">"3"</span>));</div>
|
||||
<div class="line"><a id="l00670" name="l00670"></a><span class="lineno"> 670</span> RejectSignal(fixture, SignalLine(<span class="stringliteral">"56"</span>, <span class="stringliteral">"2"</span>, <span class="stringliteral">"0+"</span>, <span class="stringliteral">"1"</span>, <span class="stringliteral">"0"</span>, <span class="stringliteral">"0"</span>, <span class="stringliteral">"3"</span>));</div>
|
||||
<div class="line"><a id="l00671" name="l00671"></a><span class="lineno"> 671</span> RejectSignal(fixture, SignalLine(<span class="stringliteral">"4294967295"</span>, <span class="stringliteral">"64"</span>, <span class="stringliteral">"1+"</span>, <span class="stringliteral">"1"</span>, <span class="stringliteral">"0"</span>, <span class="stringliteral">"0"</span>, <span class="stringliteral">"1"</span>));</div>
|
||||
<div class="line"><a id="l00672" name="l00672"></a><span class="lineno"> 672</span> RejectSignal(fixture, ordinary, 0U);</div>
|
||||
<div class="line"><a id="l00673" name="l00673"></a><span class="lineno"> 673</span> <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keywordtype">char</span> delimiter: {<span class="charliteral">'|'</span>, <span class="charliteral">'@'</span>, <span class="charliteral">'('</span>, <span class="charliteral">')'</span>, <span class="charliteral">'['</span>, <span class="charliteral">']'</span>, <span class="charliteral">'"'</span>}) {</div>
|
||||
<div class="line"><a id="l00674" name="l00674"></a><span class="lineno"> 674</span> std::string line = ordinary;</div>
|
||||
<div class="line"><a id="l00675" name="l00675"></a><span class="lineno"> 675</span> line.erase(line.find(delimiter), 1U);</div>
|
||||
<div class="line"><a id="l00676" name="l00676"></a><span class="lineno"> 676</span> RejectSignal(fixture, line);</div>
|
||||
<div class="line"><a id="l00677" name="l00677"></a><span class="lineno"> 677</span> }</div>
|
||||
<div class="line"><a id="l00678" name="l00678"></a><span class="lineno"> 678</span>}</div>
|
||||
<div class="line"><a id="l00679" name="l00679"></a><span class="lineno"> 679</span> </div>
|
||||
<div class="line"><a id="l00680" name="l00680"></a><span class="lineno"> 680</span><span class="keywordtype">void</span> DbcParserTest::validSignals() {</div>
|
||||
<div class="line"><a id="l00681" name="l00681"></a><span class="lineno"> 681</span> Fixture fixture;</div>
|
||||
<div class="line"><a id="l00682" name="l00682"></a><span class="lineno"> 682</span> <span class="keyword">const</span> <a class="code hl_class" href="classDbcParser.html">DbcParser</a> signalParser;</div>
|
||||
<div class="line"><a id="l00683" name="l00683"></a><span class="lineno"> 683</span> fixture.Write(<span class="stringliteral">"BO_ 1 Frame: 8 ECU\n"</span> +</div>
|
||||
<div class="line"><a id="l00684" name="l00684"></a><span class="lineno"> 684</span> SignalLine(<span class="stringliteral">"0"</span>, <span class="stringliteral">"8"</span>, <span class="stringliteral">"1+"</span>, <span class="stringliteral">"0"</span>, <span class="stringliteral">"0"</span>, <span class="stringliteral">"0"</span>, <span class="stringliteral">"0"</span>) + <span class="stringliteral">"\n"</span> +</div>
|
||||
<div class="line"><a id="l00685" name="l00685"></a><span class="lineno"> 685</span> SignalLine(<span class="stringliteral">"8"</span>, <span class="stringliteral">"8"</span>, <span class="stringliteral">"1-"</span>, <span class="stringliteral">"-1"</span>, <span class="stringliteral">"0"</span>, <span class="stringliteral">"-255"</span>, <span class="stringliteral">"0"</span>, <span class="stringliteral">"Negative"</span>) + <span class="stringliteral">"\n"</span>);</div>
|
||||
<div class="line"><a id="l00686" name="l00686"></a><span class="lineno"> 686</span> <span class="keyword">const</span> <a class="code hl_struct" href="structDbcDatabase.html">DbcDatabase</a> factors = signalParser.<a class="code hl_function" href="classDbcParser.html#aef72826942c9095d653fafa435855e56">ParseFile</a>(fixture.path.string());</div>
|
||||
<div class="line"><a id="l00687" name="l00687"></a><span class="lineno"> 687</span> CHECK(factors.<a class="code hl_variable" href="structDbcDatabase.html#a2cade5d0234ee816132127542f8c612b">frames</a>[0].signals.size() == 2U &&</div>
|
||||
<div class="line"><a id="l00688" name="l00688"></a><span class="lineno"> 688</span> factors.<a class="code hl_variable" href="structDbcDatabase.html#a2cade5d0234ee816132127542f8c612b">frames</a>[0].signals[0].factor == 0.0 &&</div>
|
||||
<div class="line"><a id="l00689" name="l00689"></a><span class="lineno"> 689</span> factors.<a class="code hl_variable" href="structDbcDatabase.html#a2cade5d0234ee816132127542f8c612b">frames</a>[0].signals[1].factor == -1.0,</div>
|
||||
<div class="line"><a id="l00690" name="l00690"></a><span class="lineno"> 690</span> <span class="stringliteral">"Zero and negative factors and equal range boundaries"</span>);</div>
|
||||
<div class="line"><a id="l00691" name="l00691"></a><span class="lineno"> 691</span> </div>
|
||||
<div class="line"><a id="l00692" name="l00692"></a><span class="lineno"> 692</span> <span class="keyword">struct </span>SignalCase {</div>
|
||||
<div class="line"><a id="l00693" name="l00693"></a><span class="lineno"> 693</span> <span class="keyword">const</span> <span class="keywordtype">char</span> *start;</div>
|
||||
<div class="line"><a id="l00694" name="l00694"></a><span class="lineno"> 694</span> <span class="keyword">const</span> <span class="keywordtype">char</span> *length;</div>
|
||||
<div class="line"><a id="l00695" name="l00695"></a><span class="lineno"> 695</span> <span class="keyword">const</span> <span class="keywordtype">char</span> *order;</div>
|
||||
<div class="line"><a id="l00696" name="l00696"></a><span class="lineno"> 696</span> <span class="keywordtype">unsigned</span> payload;</div>
|
||||
<div class="line"><a id="l00697" name="l00697"></a><span class="lineno"> 697</span> };</div>
|
||||
<div class="line"><a id="l00698" name="l00698"></a><span class="lineno"> 698</span> <span class="keyword">const</span> SignalCase validSignals[] = {</div>
|
||||
<div class="line"><a id="l00699" name="l00699"></a><span class="lineno"> 699</span> {<span class="stringliteral">"0"</span>, <span class="stringliteral">"1"</span>, <span class="stringliteral">"1+"</span>, 1U},</div>
|
||||
<div class="line"><a id="l00700" name="l00700"></a><span class="lineno"> 700</span> {<span class="stringliteral">"7"</span>, <span class="stringliteral">"1"</span>, <span class="stringliteral">"0-"</span>, 1U},</div>
|
||||
<div class="line"><a id="l00701" name="l00701"></a><span class="lineno"> 701</span> {<span class="stringliteral">"0"</span>, <span class="stringliteral">"64"</span>, <span class="stringliteral">"1+"</span>, 8U},</div>
|
||||
<div class="line"><a id="l00702" name="l00702"></a><span class="lineno"> 702</span> {<span class="stringliteral">"7"</span>, <span class="stringliteral">"64"</span>, <span class="stringliteral">"0-"</span>, 8U},</div>
|
||||
<div class="line"><a id="l00703" name="l00703"></a><span class="lineno"> 703</span> {<span class="stringliteral">"63"</span>, <span class="stringliteral">"1"</span>, <span class="stringliteral">"1+"</span>, 8U},</div>
|
||||
<div class="line"><a id="l00704" name="l00704"></a><span class="lineno"> 704</span> {<span class="stringliteral">"56"</span>, <span class="stringliteral">"1"</span>, <span class="stringliteral">"0+"</span>, 8U},</div>
|
||||
<div class="line"><a id="l00705" name="l00705"></a><span class="lineno"> 705</span> {<span class="stringliteral">"3"</span>, <span class="stringliteral">"12"</span>, <span class="stringliteral">"0+"</span>, 2U},</div>
|
||||
<div class="line"><a id="l00706" name="l00706"></a><span class="lineno"> 706</span> {<span class="stringliteral">"2039"</span>, <span class="stringliteral">"1"</span>, <span class="stringliteral">"1+"</span>, 255U}};</div>
|
||||
<div class="line"><a id="l00707" name="l00707"></a><span class="lineno"> 707</span> <span class="keywordflow">for</span> (<span class="keyword">const</span> SignalCase &test: validSignals) {</div>
|
||||
<div class="line"><a id="l00708" name="l00708"></a><span class="lineno"> 708</span> fixture.Write(<span class="stringliteral">"BO_ 1 Frame: "</span> + std::to_string(test.payload) + <span class="stringliteral">" ECU\n"</span> +</div>
|
||||
<div class="line"><a id="l00709" name="l00709"></a><span class="lineno"> 709</span> SignalLine(test.start, test.length, test.order, <span class="stringliteral">".5e+1"</span>, <span class="stringliteral">"-2.5E-1"</span>, <span class="stringliteral">"-1."</span>, <span class="stringliteral">"+2e2"</span>) + <span class="stringliteral">"\n"</span>);</div>
|
||||
<div class="line"><a id="l00710" name="l00710"></a><span class="lineno"> 710</span> <span class="keywordflow">try</span> {</div>
|
||||
<div class="line"><a id="l00711" name="l00711"></a><span class="lineno"> 711</span> <span class="keyword">const</span> <a class="code hl_struct" href="structDbcDatabase.html">DbcDatabase</a> parsed = signalParser.<a class="code hl_function" href="classDbcParser.html#aef72826942c9095d653fafa435855e56">ParseFile</a>(fixture.path.string());</div>
|
||||
<div class="line"><a id="l00712" name="l00712"></a><span class="lineno"> 712</span> <span class="keyword">const</span> <a class="code hl_struct" href="structSignalInfo.html">SignalInfo</a> &signal = parsed.<a class="code hl_variable" href="structDbcDatabase.html#a2cade5d0234ee816132127542f8c612b">frames</a>.at(0).signals.at(0);</div>
|
||||
<div class="line"><a id="l00713" name="l00713"></a><span class="lineno"> 713</span> QCOMPARE(signal.<a class="code hl_variable" href="structSignalInfo.html#ace290724f9801521609aedaa946d61f1">startBit</a>, <span class="keyword">static_cast<</span>std::uint32_t<span class="keyword">></span>(std::stoul(test.start)));</div>
|
||||
<div class="line"><a id="l00714" name="l00714"></a><span class="lineno"> 714</span> QCOMPARE(signal.<a class="code hl_variable" href="structSignalInfo.html#a1008b5201f71848177217bd52fb84baa">length</a>, <span class="keyword">static_cast<</span>std::uint32_t<span class="keyword">></span>(std::stoul(test.length)));</div>
|
||||
<div class="line"><a id="l00715" name="l00715"></a><span class="lineno"> 715</span> QCOMPARE(signal.<a class="code hl_variable" href="structSignalInfo.html#af363b1563fb4c7cc8973f9a80c06846c">isLittleEndian</a>, test.order[0] == <span class="charliteral">'1'</span>);</div>
|
||||
<div class="line"><a id="l00716" name="l00716"></a><span class="lineno"> 716</span> QCOMPARE(signal.<a class="code hl_variable" href="structSignalInfo.html#a52a52b320eef92fbcb4626307f9a498f">isSigned</a>, test.order[1] == <span class="charliteral">'-'</span>);</div>
|
||||
<div class="line"><a id="l00717" name="l00717"></a><span class="lineno"> 717</span> QCOMPARE(signal.<a class="code hl_variable" href="structSignalInfo.html#ae4f78d99a2750aa564d7eba860171499">factor</a>, 5.0);</div>
|
||||
<div class="line"><a id="l00718" name="l00718"></a><span class="lineno"> 718</span> QCOMPARE(signal.<a class="code hl_variable" href="structSignalInfo.html#ab7d0769f47aa540656b22e4e49db517e">offset</a>, -0.25);</div>
|
||||
<div class="line"><a id="l00719" name="l00719"></a><span class="lineno"> 719</span> QCOMPARE(signal.<a class="code hl_variable" href="structSignalInfo.html#ada7bf94fbeaa26bd08c73982b5af255b">minimum</a>, -1.0);</div>
|
||||
<div class="line"><a id="l00720" name="l00720"></a><span class="lineno"> 720</span> QCOMPARE(signal.<a class="code hl_variable" href="structSignalInfo.html#adf1c4331b9eabced0d7fdda40ff0eb52">maximum</a>, 200.0);</div>
|
||||
<div class="line"><a id="l00721" name="l00721"></a><span class="lineno"> 721</span> } <span class="keywordflow">catch</span> (<span class="keyword">const</span> std::exception &error) { CHECK(<span class="keyword">false</span>, error.what()); }</div>
|
||||
<div class="line"><a id="l00722" name="l00722"></a><span class="lineno"> 722</span> }</div>
|
||||
<div class="line"><a id="l00723" name="l00723"></a><span class="lineno"> 723</span> fixture.Write(<span class="stringliteral">"BO_ 1 Frame: 8 ECU\n"</span></div>
|
||||
<div class="line"><a id="l00724" name="l00724"></a><span class="lineno"> 724</span> <span class="stringliteral">"SG_\tValue\t:\t0 | 8 @1+ ( 1 , 0 ) [ 0 | 255 ] \"rpm\" ECU1,\tECU2\n"</span>);</div>
|
||||
<div class="line"><a id="l00725" name="l00725"></a><span class="lineno"> 725</span> <span class="keywordflow">try</span> {</div>
|
||||
<div class="line"><a id="l00726" name="l00726"></a><span class="lineno"> 726</span> <span class="keyword">const</span> <a class="code hl_struct" href="structDbcDatabase.html">DbcDatabase</a> parsed = signalParser.<a class="code hl_function" href="classDbcParser.html#aef72826942c9095d653fafa435855e56">ParseFile</a>(fixture.path.string());</div>
|
||||
<div class="line"><a id="l00727" name="l00727"></a><span class="lineno"> 727</span> <span class="keyword">const</span> <a class="code hl_struct" href="structSignalInfo.html">SignalInfo</a> &signal = parsed.<a class="code hl_variable" href="structDbcDatabase.html#a2cade5d0234ee816132127542f8c612b">frames</a>.at(0).signals.at(0);</div>
|
||||
<div class="line"><a id="l00728" name="l00728"></a><span class="lineno"> 728</span> CHECK(signal.<a class="code hl_variable" href="structSignalInfo.html#a379e422a00cad56f896cacf60455b088">name</a> == <span class="stringliteral">"Value"</span> && signal.<a class="code hl_variable" href="structSignalInfo.html#a1f214f03e94ef5794de2d3367bfcbd01">unit</a> == <span class="stringliteral">"rpm"</span> &&</div>
|
||||
<div class="line"><a id="l00729" name="l00729"></a><span class="lineno"> 729</span> signal.<a class="code hl_variable" href="structSignalInfo.html#a2c95562fd0b29327a7fd7b1e6feee7f3">receivers</a> == std::vector<std::string>({<span class="stringliteral">"ECU1"</span>, <span class="stringliteral">"ECU2"</span>}),</div>
|
||||
<div class="line"><a id="l00730" name="l00730"></a><span class="lineno"> 730</span> <span class="stringliteral">"Signal tabs, spaces, and receiver list"</span>);</div>
|
||||
<div class="line"><a id="l00731" name="l00731"></a><span class="lineno"> 731</span> } <span class="keywordflow">catch</span> (<span class="keyword">const</span> std::exception &error) { CHECK(<span class="keyword">false</span>, error.what()); }</div>
|
||||
<div class="line"><a id="l00732" name="l00732"></a><span class="lineno"> 732</span>}</div>
|
||||
<div class="line"><a id="l00733" name="l00733"></a><span class="lineno"> 733</span> </div>
|
||||
<div class="line"><a id="l00734" name="l00734"></a><span class="lineno"> 734</span><span class="keywordtype">void</span> DbcParserTest::dispatch() {</div>
|
||||
<div class="line"><a id="l00735" name="l00735"></a><span class="lineno"> 735</span> CountingHandler::instances = 0;</div>
|
||||
<div class="line"><a id="l00736" name="l00736"></a><span class="lineno"> 736</span> CountingHandler::calls = 0;</div>
|
||||
<div class="line"><a id="l00737" name="l00737"></a><span class="lineno"> 737</span> <a class="code hl_struct" href="structDbcDatabase.html">DbcDatabase</a> dispatchDatabase;</div>
|
||||
<div class="line"><a id="l00738" name="l00738"></a><span class="lineno"> 738</span> <a class="code hl_struct" href="structDbcParseContext.html">DbcParseContext</a> context{dispatchDatabase, <span class="keyword">nullptr</span>};</div>
|
||||
<div class="line"><a id="l00739" name="l00739"></a><span class="lineno"> 739</span> <a class="code hl_class" href="classDbcStatementDispatcher.html">DbcStatementDispatcher</a> dispatcher;</div>
|
||||
<div class="line"><a id="l00740" name="l00740"></a><span class="lineno"> 740</span> dispatcher.RegisterType<CountingHandler>(<span class="stringliteral">"TEST_"</span>);</div>
|
||||
<div class="line"><a id="l00741" name="l00741"></a><span class="lineno"> 741</span> CHECK(dispatcher.<a class="code hl_function" href="classDbcStatementDispatcher.html#a495c2d5c7ebb8103b1987cdd87c142ed">Dispatch</a>(<span class="stringliteral">"TEST_ first"</span>, context) &&</div>
|
||||
<div class="line"><a id="l00742" name="l00742"></a><span class="lineno"> 742</span> dispatcher.<a class="code hl_function" href="classDbcStatementDispatcher.html#a495c2d5c7ebb8103b1987cdd87c142ed">Dispatch</a>(<span class="stringliteral">"TEST_ second"</span>, context) &&</div>
|
||||
<div class="line"><a id="l00743" name="l00743"></a><span class="lineno"> 743</span> CountingHandler::instances == 1 && CountingHandler::calls == 2 &&</div>
|
||||
<div class="line"><a id="l00744" name="l00744"></a><span class="lineno"> 744</span> dispatchDatabase.<a class="code hl_variable" href="structDbcDatabase.html#a2cade5d0234ee816132127542f8c612b">frames</a>.size() == 2U,</div>
|
||||
<div class="line"><a id="l00745" name="l00745"></a><span class="lineno"> 745</span> <span class="stringliteral">"Factory dispatch and handler reuse"</span>);</div>
|
||||
<div class="line"><a id="l00746" name="l00746"></a><span class="lineno"> 746</span> CHECK(!dispatcher.<a class="code hl_function" href="classDbcStatementDispatcher.html#a495c2d5c7ebb8103b1987cdd87c142ed">Dispatch</a>(<span class="stringliteral">"TEST_OTHER data"</span>, context) &&</div>
|
||||
<div class="line"><a id="l00747" name="l00747"></a><span class="lineno"> 747</span> !dispatcher.<a class="code hl_function" href="classDbcStatementDispatcher.html#a495c2d5c7ebb8103b1987cdd87c142ed">Dispatch</a>(<span class="stringliteral">"BO_TX_BU_ 1 : ECU;"</span>, context) &&</div>
|
||||
<div class="line"><a id="l00748" name="l00748"></a><span class="lineno"> 748</span> !dispatcher.<a class="code hl_function" href="classDbcStatementDispatcher.html#a495c2d5c7ebb8103b1987cdd87c142ed">Dispatch</a>(<span class="stringliteral">"VAL_TABLE_ States 0 \"Stopped\";"</span>, context) &&</div>
|
||||
<div class="line"><a id="l00749" name="l00749"></a><span class="lineno"> 749</span> CountingHandler::calls == 2,</div>
|
||||
<div class="line"><a id="l00750" name="l00750"></a><span class="lineno"> 750</span> <span class="stringliteral">"Exact and unknown keyword dispatch"</span>);</div>
|
||||
<div class="line"><a id="l00751" name="l00751"></a><span class="lineno"> 751</span>}</div>
|
||||
<div class="line"><a id="l00752" name="l00752"></a><span class="lineno"> 752</span> </div>
|
||||
<div class="line"><a id="l00753" name="l00753"></a><span class="lineno"> 753</span><span class="keywordtype">void</span> DbcParserTest::independentSessions() {</div>
|
||||
<div class="line"><a id="l00754" name="l00754"></a><span class="lineno"> 754</span> Fixture fixture;</div>
|
||||
<div class="line"><a id="l00755" name="l00755"></a><span class="lineno"> 755</span> <span class="keyword">const</span> <a class="code hl_class" href="classDbcParser.html">DbcParser</a> parser;</div>
|
||||
<div class="line"><a id="l00756" name="l00756"></a><span class="lineno"> 756</span> fixture.Write(<span class="stringliteral">"BO_ 1 First: 8 ECU\n"</span>);</div>
|
||||
<div class="line"><a id="l00757" name="l00757"></a><span class="lineno"> 757</span> CHECK(parser.<a class="code hl_function" href="classDbcParser.html#aef72826942c9095d653fafa435855e56">ParseFile</a>(fixture.path.string()).<a class="code hl_variable" href="structDbcDatabase.html#a2cade5d0234ee816132127542f8c612b">frames</a>.size() == 1U, <span class="stringliteral">"First parse"</span>);</div>
|
||||
<div class="line"><a id="l00758" name="l00758"></a><span class="lineno"> 758</span> fixture.Write(<span class="stringliteral">"SG_ Speed : invalid\n"</span>);</div>
|
||||
<div class="line"><a id="l00759" name="l00759"></a><span class="lineno"> 759</span> <span class="keywordflow">try</span> {</div>
|
||||
<div class="line"><a id="l00760" name="l00760"></a><span class="lineno"> 760</span> parser.<a class="code hl_function" href="classDbcParser.html#aef72826942c9095d653fafa435855e56">ParseFile</a>(fixture.path.string());</div>
|
||||
<div class="line"><a id="l00761" name="l00761"></a><span class="lineno"> 761</span> CHECK(<span class="keyword">false</span>, <span class="stringliteral">"Independent parse context"</span>);</div>
|
||||
<div class="line"><a id="l00762" name="l00762"></a><span class="lineno"> 762</span> } <span class="keywordflow">catch</span> (<span class="keyword">const</span> std::runtime_error &error) {</div>
|
||||
<div class="line"><a id="l00763" name="l00763"></a><span class="lineno"> 763</span> CHECK(std::string(error.what()).find(<span class="stringliteral">"Signal found before any frame"</span>) !=</div>
|
||||
<div class="line"><a id="l00764" name="l00764"></a><span class="lineno"> 764</span> std::string::npos,</div>
|
||||
<div class="line"><a id="l00765" name="l00765"></a><span class="lineno"> 765</span> <span class="stringliteral">"Independent parse context"</span>);</div>
|
||||
<div class="line"><a id="l00766" name="l00766"></a><span class="lineno"> 766</span> }</div>
|
||||
<div class="line"><a id="l00767" name="l00767"></a><span class="lineno"> 767</span> fixture.Write(<span class="stringliteral">"BO_ 2 Second: 8 ECU\n"</span>);</div>
|
||||
<div class="line"><a id="l00768" name="l00768"></a><span class="lineno"> 768</span> <span class="keyword">const</span> <a class="code hl_struct" href="structDbcDatabase.html">DbcDatabase</a> recovered = parser.<a class="code hl_function" href="classDbcParser.html#aef72826942c9095d653fafa435855e56">ParseFile</a>(fixture.path.string());</div>
|
||||
<div class="line"><a id="l00769" name="l00769"></a><span class="lineno"> 769</span> CHECK(recovered.<a class="code hl_variable" href="structDbcDatabase.html#a2cade5d0234ee816132127542f8c612b">frames</a>.size() == 1U && recovered.<a class="code hl_variable" href="structDbcDatabase.html#a2cade5d0234ee816132127542f8c612b">frames</a>[0].canId == 2U,</div>
|
||||
<div class="line"><a id="l00770" name="l00770"></a><span class="lineno"> 770</span> <span class="stringliteral">"Fresh parse after error"</span>);</div>
|
||||
<div class="line"><a id="l00771" name="l00771"></a><span class="lineno"> 771</span>}</div>
|
||||
<div class="line"><a id="l00772" name="l00772"></a><span class="lineno"> 772</span> </div>
|
||||
<div class="line"><a id="l00773" name="l00773"></a><span class="lineno"> 773</span> </div>
|
||||
<div class="line"><a id="l00774" name="l00774"></a><span class="lineno"> 774</span><span class="keywordtype">void</span> DbcParserTest::valueDescriptions() {</div>
|
||||
<div class="line"><a id="l00775" name="l00775"></a><span class="lineno"> 775</span> Fixture fixture;</div>
|
||||
<div class="line"><a id="l00776" name="l00776"></a><span class="lineno"> 776</span> fixture.Write(</div>
|
||||
<div class="line"><a id="l00777" name="l00777"></a><span class="lineno"> 777</span> <span class="stringliteral">"VAL_\t256\tState\t0\t\"Off\"\t1 \"On\" 2 \"Error with spaces; and \\\"quotes\\\"\";\n"</span></div>
|
||||
<div class="line"><a id="l00778" name="l00778"></a><span class="lineno"> 778</span> <span class="stringliteral">"BO_ 256 Status: 8 ECU\n"</span></div>
|
||||
<div class="line"><a id="l00779" name="l00779"></a><span class="lineno"> 779</span> <span class="stringliteral">"SG_ State : 0|8@1+ (2,10) [0|520] \"\" ECU\n"</span></div>
|
||||
<div class="line"><a id="l00780" name="l00780"></a><span class="lineno"> 780</span> <span class="stringliteral">"VAL_ 256 State 3 \"\";\n"</span></div>
|
||||
<div class="line"><a id="l00781" name="l00781"></a><span class="lineno"> 781</span> <span class="stringliteral">"VAL_ 2147483904 State -9223372036854775808 \"Minimum\" -1 \"Negative\" 9223372036854775807 \"Maximum\";\n"</span></div>
|
||||
<div class="line"><a id="l00782" name="l00782"></a><span class="lineno"> 782</span> <span class="stringliteral">"BO_ 2147483904 Extended: 8 ECU\n"</span></div>
|
||||
<div class="line"><a id="l00783" name="l00783"></a><span class="lineno"> 783</span> <span class="stringliteral">"SG_ State : 0|64@1- (1,0) [-1e20|1e20] \"\" ECU\n"</span></div>
|
||||
<div class="line"><a id="l00784" name="l00784"></a><span class="lineno"> 784</span> <span class="stringliteral">"BO_ 2048 Unsigned: 8 ECU\n"</span></div>
|
||||
<div class="line"><a id="l00785" name="l00785"></a><span class="lineno"> 785</span> <span class="stringliteral">"SG_ State : 0|64@1+ (1,0) [0|2e20] \"\" ECU\n"</span></div>
|
||||
<div class="line"><a id="l00786" name="l00786"></a><span class="lineno"> 786</span> <span class="stringliteral">"VAL_ 2147485696 State 9223372036854775808 \"High\" 18446744073709551615 \"Full\";\n"</span>);</div>
|
||||
<div class="line"><a id="l00787" name="l00787"></a><span class="lineno"> 787</span> <span class="keyword">const</span> <a class="code hl_struct" href="structDbcDatabase.html">DbcDatabase</a> parsed = <a class="code hl_class" href="classDbcParser.html">DbcParser</a>().<a class="code hl_function" href="classDbcParser.html#aef72826942c9095d653fafa435855e56">ParseFile</a>(fixture.path.string());</div>
|
||||
<div class="line"><a id="l00788" name="l00788"></a><span class="lineno"> 788</span> <span class="keyword">const</span> <a class="code hl_class" href="classDecodeDatabase.html">DecodeDatabase</a> runtime = <a class="code hl_class" href="classDbcDecodeBuilder.html">DbcDecodeBuilder</a>().<a class="code hl_function" href="classDbcDecodeBuilder.html#a2bc6386dfb5e58976c42e22c19ec471b">Build</a>(parsed);</div>
|
||||
<div class="line"><a id="l00789" name="l00789"></a><span class="lineno"> 789</span> <span class="keyword">const</span> std::unique_ptr<TreeNode> tree = <a class="code hl_class" href="classDbcTreeBuilder.html">DbcTreeBuilder</a>().<a class="code hl_function" href="classDbcTreeBuilder.html#a7e57d067d831b14b383947fd125edd4b">Build</a>(parsed);</div>
|
||||
<div class="line"><a id="l00790" name="l00790"></a><span class="lineno"> 790</span> CHECK(tree->GetChild(0)->GetSignal() == <span class="keyword">nullptr</span>, <span class="stringliteral">"Frame node"</span>);</div>
|
||||
<div class="line"><a id="l00791" name="l00791"></a><span class="lineno"> 791</span> <span class="keywordflow">for</span> (std::size_t index = 0; index < parsed.<a class="code hl_variable" href="structDbcDatabase.html#a2cade5d0234ee816132127542f8c612b">frames</a>.size(); ++index) {</div>
|
||||
<div class="line"><a id="l00792" name="l00792"></a><span class="lineno"> 792</span> CHECK(tree->GetChild(index)->GetChild(0)->GetSignal()->valueDescriptions ==</div>
|
||||
<div class="line"><a id="l00793" name="l00793"></a><span class="lineno"> 793</span> parsed.<a class="code hl_variable" href="structDbcDatabase.html#a2cade5d0234ee816132127542f8c612b">frames</a>[index].signals[0].valueDescriptions &&</div>
|
||||
<div class="line"><a id="l00794" name="l00794"></a><span class="lineno"> 794</span> runtime.<a class="code hl_function" href="classDecodeDatabase.html#aa034c1510984a85f60ad6c0bd744d6e8">GetFrames</a>()[index].signals[0].valueDescriptions ==</div>
|
||||
<div class="line"><a id="l00795" name="l00795"></a><span class="lineno"> 795</span> parsed.<a class="code hl_variable" href="structDbcDatabase.html#a2cade5d0234ee816132127542f8c612b">frames</a>[index].signals[0].valueDescriptions,</div>
|
||||
<div class="line"><a id="l00796" name="l00796"></a><span class="lineno"> 796</span> <span class="stringliteral">"All mappings survive both builders"</span>);</div>
|
||||
<div class="line"><a id="l00797" name="l00797"></a><span class="lineno"> 797</span> }</div>
|
||||
<div class="line"><a id="l00798" name="l00798"></a><span class="lineno"> 798</span> CHECK(tree->GetChild(0)->GetChild(0)->GetSignal()->valueDescriptions ==</div>
|
||||
<div class="line"><a id="l00799" name="l00799"></a><span class="lineno"> 799</span> runtime.<a class="code hl_function" href="classDecodeDatabase.html#aa034c1510984a85f60ad6c0bd744d6e8">GetFrames</a>()[0].signals[0].valueDescriptions,</div>
|
||||
<div class="line"><a id="l00800" name="l00800"></a><span class="lineno"> 800</span> <span class="stringliteral">"Both builders preserve descriptions"</span>);</div>
|
||||
<div class="line"><a id="l00801" name="l00801"></a><span class="lineno"> 801</span> <a class="code hl_struct" href="structRawCanFrame.html">RawCanFrame</a> frame;</div>
|
||||
<div class="line"><a id="l00802" name="l00802"></a><span class="lineno"> 802</span> frame.<a class="code hl_variable" href="structRawCanFrame.html#a2d0e7fa0e3d5c20bbed55ed8f7888ff4">canId</a> = 256;</div>
|
||||
<div class="line"><a id="l00803" name="l00803"></a><span class="lineno"> 803</span> frame.<a class="code hl_variable" href="structRawCanFrame.html#a0acb487612104c99c9907344c035df83">data</a>.resize(8);</div>
|
||||
<div class="line"><a id="l00804" name="l00804"></a><span class="lineno"> 804</span> <span class="keyword">const</span> std::string expected[] = {<span class="stringliteral">"Off"</span>, <span class="stringliteral">"On"</span>, <span class="stringliteral">"Error with spaces; and \"quotes\""</span>, <span class="stringliteral">""</span>};</div>
|
||||
<div class="line"><a id="l00805" name="l00805"></a><span class="lineno"> 805</span> <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> value = 0; value < 5; ++value) {</div>
|
||||
<div class="line"><a id="l00806" name="l00806"></a><span class="lineno"> 806</span> frame.<a class="code hl_variable" href="structRawCanFrame.html#a0acb487612104c99c9907344c035df83">data</a>[0] = value;</div>
|
||||
<div class="line"><a id="l00807" name="l00807"></a><span class="lineno"> 807</span> <span class="keyword">const</span> <a class="code hl_struct" href="structDecodedSignalValue.html">DecodedSignalValue</a> decoded = <a class="code hl_class" href="classDbcDecoder.html">DbcDecoder</a>().<a class="code hl_function" href="classDbcDecoder.html#a345951ffe5d943a70d3a1ea1f39e74f7">Decode</a>(runtime, frame).signals[0];</div>
|
||||
<div class="line"><a id="l00808" name="l00808"></a><span class="lineno"> 808</span> CHECK(decoded.<a class="code hl_variable" href="structDecodedSignalValue.html#aac0ed361af545cde48d0e6f41a859686">valid</a> && decoded.<a class="code hl_variable" href="structDecodedSignalValue.html#a6847d05b3cb00d5e0f6c611968f57978">physicalValue</a> == value * 2 + 10, <span class="stringliteral">"Numeric scaling unchanged"</span>);</div>
|
||||
<div class="line"><a id="l00809" name="l00809"></a><span class="lineno"> 809</span> <span class="keyword">const</span> std::string *description = decoded.<a class="code hl_function" href="structDecodedSignalValue.html#affc38af1bf31bcb6f2c33044bce92bd2">GetValueDescription</a>();</div>
|
||||
<div class="line"><a id="l00810" name="l00810"></a><span class="lineno"> 810</span> CHECK(value < 4 ? description && *description == expected[value] : !description,</div>
|
||||
<div class="line"><a id="l00811" name="l00811"></a><span class="lineno"> 811</span> <span class="stringliteral">"Raw lookup and unknown value"</span>);</div>
|
||||
<div class="line"><a id="l00812" name="l00812"></a><span class="lineno"> 812</span> }</div>
|
||||
<div class="line"><a id="l00813" name="l00813"></a><span class="lineno"> 813</span> frame.<a class="code hl_variable" href="structRawCanFrame.html#a462193d275adc1dba8bd18ffa0e36bb7">isExtended</a> = <span class="keyword">true</span>;</div>
|
||||
<div class="line"><a id="l00814" name="l00814"></a><span class="lineno"> 814</span> <span class="keyword">struct </span>Boundary {</div>
|
||||
<div class="line"><a id="l00815" name="l00815"></a><span class="lineno"> 815</span> std::uint64_t bits;</div>
|
||||
<div class="line"><a id="l00816" name="l00816"></a><span class="lineno"> 816</span> <span class="keyword">const</span> <span class="keywordtype">char</span> *description;</div>
|
||||
<div class="line"><a id="l00817" name="l00817"></a><span class="lineno"> 817</span> };</div>
|
||||
<div class="line"><a id="l00818" name="l00818"></a><span class="lineno"> 818</span> <span class="keywordflow">for</span> (<span class="keyword">const</span> Boundary &test: {Boundary{0x8000000000000000ULL, <span class="stringliteral">"Minimum"</span>},</div>
|
||||
<div class="line"><a id="l00819" name="l00819"></a><span class="lineno"> 819</span> Boundary{0xFFFFFFFFFFFFFFFFULL, <span class="stringliteral">"Negative"</span>},</div>
|
||||
<div class="line"><a id="l00820" name="l00820"></a><span class="lineno"> 820</span> Boundary{0x7FFFFFFFFFFFFFFFULL, <span class="stringliteral">"Maximum"</span>}}) {</div>
|
||||
<div class="line"><a id="l00821" name="l00821"></a><span class="lineno"> 821</span> <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">byte</span> = 0; <span class="keywordtype">byte</span> < 8; ++byte)</div>
|
||||
<div class="line"><a id="l00822" name="l00822"></a><span class="lineno"> 822</span> frame.<a class="code hl_variable" href="structRawCanFrame.html#a0acb487612104c99c9907344c035df83">data</a>[<span class="keywordtype">byte</span>] = <span class="keyword">static_cast<</span>std::uint8_t<span class="keyword">></span>(test.bits >> (<span class="keywordtype">byte</span> * 8));</div>
|
||||
<div class="line"><a id="l00823" name="l00823"></a><span class="lineno"> 823</span> <span class="keyword">const</span> <a class="code hl_struct" href="structDecodedSignalValue.html">DecodedSignalValue</a> decoded = <a class="code hl_class" href="classDbcDecoder.html">DbcDecoder</a>().<a class="code hl_function" href="classDbcDecoder.html#a345951ffe5d943a70d3a1ea1f39e74f7">Decode</a>(runtime, frame).signals[0];</div>
|
||||
<div class="line"><a id="l00824" name="l00824"></a><span class="lineno"> 824</span> CHECK(decoded.<a class="code hl_function" href="structDecodedSignalValue.html#affc38af1bf31bcb6f2c33044bce92bd2">GetValueDescription</a>() && *decoded.<a class="code hl_function" href="structDecodedSignalValue.html#affc38af1bf31bcb6f2c33044bce92bd2">GetValueDescription</a>() == test.description,</div>
|
||||
<div class="line"><a id="l00825" name="l00825"></a><span class="lineno"> 825</span> <span class="stringliteral">"Signed boundaries and distinct extended frame"</span>);</div>
|
||||
<div class="line"><a id="l00826" name="l00826"></a><span class="lineno"> 826</span> }</div>
|
||||
<div class="line"><a id="l00827" name="l00827"></a><span class="lineno"> 827</span> frame.<a class="code hl_variable" href="structRawCanFrame.html#a2d0e7fa0e3d5c20bbed55ed8f7888ff4">canId</a> = 2048;</div>
|
||||
<div class="line"><a id="l00828" name="l00828"></a><span class="lineno"> 828</span> <span class="keywordflow">for</span> (<span class="keyword">const</span> Boundary &test: {Boundary{0x8000000000000000ULL, <span class="stringliteral">"High"</span>},</div>
|
||||
<div class="line"><a id="l00829" name="l00829"></a><span class="lineno"> 829</span> Boundary{0xFFFFFFFFFFFFFFFFULL, <span class="stringliteral">"Full"</span>}}) {</div>
|
||||
<div class="line"><a id="l00830" name="l00830"></a><span class="lineno"> 830</span> <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">byte</span> = 0; <span class="keywordtype">byte</span> < 8; ++byte)</div>
|
||||
<div class="line"><a id="l00831" name="l00831"></a><span class="lineno"> 831</span> frame.<a class="code hl_variable" href="structRawCanFrame.html#a0acb487612104c99c9907344c035df83">data</a>[<span class="keywordtype">byte</span>] = <span class="keyword">static_cast<</span>std::uint8_t<span class="keyword">></span>(test.bits >> (<span class="keywordtype">byte</span> * 8));</div>
|
||||
<div class="line"><a id="l00832" name="l00832"></a><span class="lineno"> 832</span> <span class="keyword">const</span> <a class="code hl_struct" href="structDecodedSignalValue.html">DecodedSignalValue</a> decoded = <a class="code hl_class" href="classDbcDecoder.html">DbcDecoder</a>().<a class="code hl_function" href="classDbcDecoder.html#a345951ffe5d943a70d3a1ea1f39e74f7">Decode</a>(runtime, frame).signals[0];</div>
|
||||
<div class="line"><a id="l00833" name="l00833"></a><span class="lineno"> 833</span> CHECK(decoded.<a class="code hl_function" href="structDecodedSignalValue.html#affc38af1bf31bcb6f2c33044bce92bd2">GetValueDescription</a>() && *decoded.<a class="code hl_function" href="structDecodedSignalValue.html#affc38af1bf31bcb6f2c33044bce92bd2">GetValueDescription</a>() == test.description,</div>
|
||||
<div class="line"><a id="l00834" name="l00834"></a><span class="lineno"> 834</span> <span class="stringliteral">"Unsigned boundaries"</span>);</div>
|
||||
<div class="line"><a id="l00835" name="l00835"></a><span class="lineno"> 835</span> }</div>
|
||||
<div class="line"><a id="l00836" name="l00836"></a><span class="lineno"> 836</span> CHECK(FindValueDescription(runtime.<a class="code hl_function" href="classDecodeDatabase.html#aa034c1510984a85f60ad6c0bd744d6e8">GetFrames</a>()[0].signals[0].valueDescriptions, std::int64_t(1)) != <span class="keyword">nullptr</span>,</div>
|
||||
<div class="line"><a id="l00837" name="l00837"></a><span class="lineno"> 837</span> <span class="stringliteral">"Nonnegative signed lookup matches unsigned key"</span>);</div>
|
||||
<div class="line"><a id="l00838" name="l00838"></a><span class="lineno"> 838</span> frame.<a class="code hl_variable" href="structRawCanFrame.html#a0acb487612104c99c9907344c035df83">data</a>.clear();</div>
|
||||
<div class="line"><a id="l00839" name="l00839"></a><span class="lineno"> 839</span> CHECK(!<a class="code hl_class" href="classDbcDecoder.html">DbcDecoder</a>().Decode(runtime, frame).signals[0].GetValueDescription(), <span class="stringliteral">"Invalid decode has no description"</span>);</div>
|
||||
<div class="line"><a id="l00840" name="l00840"></a><span class="lineno"> 840</span>}</div>
|
||||
<div class="line"><a id="l00841" name="l00841"></a><span class="lineno"> 841</span> </div>
|
||||
<div class="line"><a id="l00842" name="l00842"></a><span class="lineno"> 842</span><span class="keywordtype">void</span> DbcParserTest::invalidValueDescriptions() {</div>
|
||||
<div class="line"><a id="l00843" name="l00843"></a><span class="lineno"> 843</span> Fixture fixture;</div>
|
||||
<div class="line"><a id="l00844" name="l00844"></a><span class="lineno"> 844</span> <span class="keyword">const</span> std::string definitions = <span class="stringliteral">"BO_ 1 Frame: 8 ECU\nSG_ State : 0|64@1+ (1,0) [0|2e20] \"\" ECU\n"</span>;</div>
|
||||
<div class="line"><a id="l00845" name="l00845"></a><span class="lineno"> 845</span> <span class="keywordflow">for</span> (<span class="keyword">const</span> std::string statement: {</div>
|
||||
<div class="line"><a id="l00846" name="l00846"></a><span class="lineno"> 846</span> <span class="stringliteral">"VAL_"</span>, <span class="stringliteral">"VAL_ 1 State;"</span>, <span class="stringliteral">"VAL_ 1 State ;"</span>, <span class="stringliteral">"VAL_ 1 State 0 \"Off\""</span>,</div>
|
||||
<div class="line"><a id="l00847" name="l00847"></a><span class="lineno"> 847</span> <span class="stringliteral">"VAL_ 1 State 0 \"Off\"; junk"</span>, <span class="stringliteral">"VAL_ 1 State 0 Off;"</span>,</div>
|
||||
<div class="line"><a id="l00848" name="l00848"></a><span class="lineno"> 848</span> <span class="stringliteral">"VAL_ 1 State 0 \"Unclosed;"</span>, <span class="stringliteral">"VAL_ 1 State 0 \"Off\"1 \"On\";"</span>,</div>
|
||||
<div class="line"><a id="l00849" name="l00849"></a><span class="lineno"> 849</span> <span class="stringliteral">"VAL_ 1 State 0 \"Off\" 00 \"Duplicate\";"</span>,</div>
|
||||
<div class="line"><a id="l00850" name="l00850"></a><span class="lineno"> 850</span> <span class="stringliteral">"VAL_ 1 State 0 \"Off\" -0 \"Duplicate\";"</span>,</div>
|
||||
<div class="line"><a id="l00851" name="l00851"></a><span class="lineno"> 851</span> <span class="stringliteral">"VAL_ 1 State 0 \"Off\";\nVAL_ 1 State 0 \"Duplicate\";"</span>,</div>
|
||||
<div class="line"><a id="l00852" name="l00852"></a><span class="lineno"> 852</span> <span class="stringliteral">"VAL_ 2 State 0 \"Missing frame\";"</span>, <span class="stringliteral">"VAL_ 1 Missing 0 \"Missing signal\";"</span>,</div>
|
||||
<div class="line"><a id="l00853" name="l00853"></a><span class="lineno"> 853</span> <span class="stringliteral">"VAL_ -1 State 0 \"Bad ID\";"</span>, <span class="stringliteral">"VAL_ 536870912 State 0 \"Bad ID\";"</span>,</div>
|
||||
<div class="line"><a id="l00854" name="l00854"></a><span class="lineno"> 854</span> <span class="stringliteral">"VAL_ 4294967296 State 0 \"Bad ID\";"</span>, <span class="stringliteral">"VAL_ Environment 0 \"Unsupported\";"</span>,</div>
|
||||
<div class="line"><a id="l00855" name="l00855"></a><span class="lineno"> 855</span> <span class="stringliteral">"VAL_ 1 State 0 \"Bad\\q escape\";"</span>}) {</div>
|
||||
<div class="line"><a id="l00856" name="l00856"></a><span class="lineno"> 856</span> fixture.Write(definitions + statement + <span class="charliteral">'\n'</span>);</div>
|
||||
<div class="line"><a id="l00857" name="l00857"></a><span class="lineno"> 857</span> <span class="keyword">const</span> <span class="keywordtype">int</span> line = statement.find(<span class="charliteral">'\n'</span>) == std::string::npos ? 3 : 4;</div>
|
||||
<div class="line"><a id="l00858" name="l00858"></a><span class="lineno"> 858</span> <span class="keywordflow">try</span> {</div>
|
||||
<div class="line"><a id="l00859" name="l00859"></a><span class="lineno"> 859</span> <a class="code hl_class" href="classDbcParser.html">DbcParser</a>().<a class="code hl_function" href="classDbcParser.html#aef72826942c9095d653fafa435855e56">ParseFile</a>(fixture.path.string());</div>
|
||||
<div class="line"><a id="l00860" name="l00860"></a><span class="lineno"> 860</span> CHECK(<span class="keyword">false</span>, statement);</div>
|
||||
<div class="line"><a id="l00861" name="l00861"></a><span class="lineno"> 861</span> } <span class="keywordflow">catch</span> (<span class="keyword">const</span> std::runtime_error &error) {</div>
|
||||
<div class="line"><a id="l00862" name="l00862"></a><span class="lineno"> 862</span> CHECK(std::string(error.what()).find(fixture.path.string() + <span class="stringliteral">":"</span> + std::to_string(line) + <span class="stringliteral">": "</span>) == 0,</div>
|
||||
<div class="line"><a id="l00863" name="l00863"></a><span class="lineno"> 863</span> statement + <span class="stringliteral">" "</span> + error.what());</div>
|
||||
<div class="line"><a id="l00864" name="l00864"></a><span class="lineno"> 864</span> }</div>
|
||||
<div class="line"><a id="l00865" name="l00865"></a><span class="lineno"> 865</span> }</div>
|
||||
<div class="line"><a id="l00866" name="l00866"></a><span class="lineno"> 866</span> <span class="keywordflow">for</span> (<span class="keyword">const</span> std::string suffix: {</div>
|
||||
<div class="line"><a id="l00867" name="l00867"></a><span class="lineno"> 867</span> <span class="stringliteral">"BO_ 1 Other: 8 ECU\n"</span>, <span class="comment">// Duplicate frame definition.</span></div>
|
||||
<div class="line"><a id="l00868" name="l00868"></a><span class="lineno"> 868</span> <span class="stringliteral">"SG_ State : 0|8@1+ (1,0) [0|255] \"\" ECU\n"</span>,<span class="comment">// Duplicate signal definition.</span></div>
|
||||
<div class="line"><a id="l00869" name="l00869"></a><span class="lineno"> 869</span> <span class="stringliteral">""</span>}) {</div>
|
||||
<div class="line"><a id="l00870" name="l00870"></a><span class="lineno"> 870</span> fixture.Write(<span class="stringliteral">"VAL_ 1 "</span> + std::string(suffix.empty() ? <span class="stringliteral">"Missing"</span> : <span class="stringliteral">"State"</span>) +</div>
|
||||
<div class="line"><a id="l00871" name="l00871"></a><span class="lineno"> 871</span> <span class="stringliteral">" 0 \"Description\";\n"</span> + definitions + suffix);</div>
|
||||
<div class="line"><a id="l00872" name="l00872"></a><span class="lineno"> 872</span> <span class="keywordflow">try</span> {</div>
|
||||
<div class="line"><a id="l00873" name="l00873"></a><span class="lineno"> 873</span> <a class="code hl_class" href="classDbcParser.html">DbcParser</a>().<a class="code hl_function" href="classDbcParser.html#aef72826942c9095d653fafa435855e56">ParseFile</a>(fixture.path.string());</div>
|
||||
<div class="line"><a id="l00874" name="l00874"></a><span class="lineno"> 874</span> CHECK(<span class="keyword">false</span>, <span class="stringliteral">"Missing reference or duplicate definition"</span>);</div>
|
||||
<div class="line"><a id="l00875" name="l00875"></a><span class="lineno"> 875</span> } <span class="keywordflow">catch</span> (<span class="keyword">const</span> std::runtime_error &error) {</div>
|
||||
<div class="line"><a id="l00876" name="l00876"></a><span class="lineno"> 876</span> <span class="keyword">const</span> std::string line = suffix.empty() ? <span class="stringliteral">"1"</span> : <span class="stringliteral">"4"</span>;</div>
|
||||
<div class="line"><a id="l00877" name="l00877"></a><span class="lineno"> 877</span> CHECK(std::string(error.what()).find(fixture.path.string() + <span class="stringliteral">":"</span> + line + <span class="stringliteral">": "</span>) == 0,</div>
|
||||
<div class="line"><a id="l00878" name="l00878"></a><span class="lineno"> 878</span> <span class="stringliteral">"Error retains the reference or duplicate definition source location"</span>);</div>
|
||||
<div class="line"><a id="l00879" name="l00879"></a><span class="lineno"> 879</span> }</div>
|
||||
<div class="line"><a id="l00880" name="l00880"></a><span class="lineno"> 880</span> }</div>
|
||||
<div class="line"><a id="l00881" name="l00881"></a><span class="lineno"> 881</span> <span class="keywordflow">for</span> (<span class="keyword">const</span> std::string number: {<span class="stringliteral">"+1"</span>, <span class="stringliteral">"1x"</span>, <span class="stringliteral">"0x10"</span>, <span class="stringliteral">"1.5"</span>, <span class="stringliteral">"1e2"</span>, <span class="stringliteral">"--1"</span>,</div>
|
||||
<div class="line"><a id="l00882" name="l00882"></a><span class="lineno"> 882</span> <span class="stringliteral">"-9223372036854775809"</span>, <span class="stringliteral">"18446744073709551616"</span>}) {</div>
|
||||
<div class="line"><a id="l00883" name="l00883"></a><span class="lineno"> 883</span> fixture.Write(<span class="stringliteral">"VAL_ 1 State "</span> + number + <span class="stringliteral">" \"Bad\";\n"</span> + definitions);</div>
|
||||
<div class="line"><a id="l00884" name="l00884"></a><span class="lineno"> 884</span> <span class="keywordflow">try</span> {</div>
|
||||
<div class="line"><a id="l00885" name="l00885"></a><span class="lineno"> 885</span> <a class="code hl_class" href="classDbcParser.html">DbcParser</a>().<a class="code hl_function" href="classDbcParser.html#aef72826942c9095d653fafa435855e56">ParseFile</a>(fixture.path.string());</div>
|
||||
<div class="line"><a id="l00886" name="l00886"></a><span class="lineno"> 886</span> CHECK(<span class="keyword">false</span>, number);</div>
|
||||
<div class="line"><a id="l00887" name="l00887"></a><span class="lineno"> 887</span> } <span class="keywordflow">catch</span> (<span class="keyword">const</span> std::runtime_error &error) {</div>
|
||||
<div class="line"><a id="l00888" name="l00888"></a><span class="lineno"> 888</span> CHECK(std::string(error.what()).find(fixture.path.string() + <span class="stringliteral">":1: "</span>) == 0, number);</div>
|
||||
<div class="line"><a id="l00889" name="l00889"></a><span class="lineno"> 889</span> }</div>
|
||||
<div class="line"><a id="l00890" name="l00890"></a><span class="lineno"> 890</span> }</div>
|
||||
<div class="line"><a id="l00891" name="l00891"></a><span class="lineno"> 891</span>}</div>
|
||||
<div class="line"><a id="l00892" name="l00892"></a><span class="lineno"> 892</span> </div>
|
||||
<div class="line"><a id="l00893" name="l00893"></a><span class="lineno"> 893</span><span class="keywordtype">int</span> RunParserTests(<span class="keywordtype">int</span> argc, <span class="keywordtype">char</span> **argv) {</div>
|
||||
<div class="line"><a id="l00894" name="l00894"></a><span class="lineno"> 894</span> DbcParserTest tests;</div>
|
||||
<div class="line"><a id="l00895" name="l00895"></a><span class="lineno"> 895</span> <span class="keywordflow">return</span> QTest::qExec(&tests, argc, argv);</div>
|
||||
<div class="line"><a id="l00896" name="l00896"></a><span class="lineno"> 896</span>}</div>
|
||||
<div class="line"><a id="l00897" name="l00897"></a><span class="lineno"> 897</span> </div>
|
||||
<div class="line"><a id="l00898" name="l00898"></a><span class="lineno"> 898</span><span class="preprocessor">#include "dbc_parser_test.moc"</span></div>
|
||||
<div class="line"><a id="l00606" name="l00606"></a><span class="lineno"> 606</span> QVERIFY_THROWS_EXCEPTION(std::invalid_argument, runtime = <a class="code hl_class" href="classDecodeDatabase.html">DecodeDatabase</a>(definitions));</div>
|
||||
<div class="line"><a id="l00607" name="l00607"></a><span class="lineno"> 607</span> definitions[0].signals.pop_back();</div>
|
||||
<div class="line"><a id="l00608" name="l00608"></a><span class="lineno"> 608</span> QVERIFY_THROWS_EXCEPTION(std::invalid_argument, runtime = <a class="code hl_class" href="classDecodeDatabase.html">DecodeDatabase</a>(definitions));</div>
|
||||
<div class="line"><a id="l00609" name="l00609"></a><span class="lineno"> 609</span> fixture.Write(<span class="stringliteral">"BO_ 1 Frame: 2 ECU\n\n"</span></div>
|
||||
<div class="line"><a id="l00610" name="l00610"></a><span class="lineno"> 610</span> <span class="stringliteral">"SG_ Branch m2 : 8|8@1+ (1,0) [0|255] \"\" ECU\n"</span></div>
|
||||
<div class="line"><a id="l00611" name="l00611"></a><span class="lineno"> 611</span> <span class="stringliteral">"SG_ Mode M : 0|1@1+ (1,0) [0|1] \"\" ECU\n"</span>);</div>
|
||||
<div class="line"><a id="l00612" name="l00612"></a><span class="lineno"> 612</span> <span class="keywordtype">bool</span> rejected = <span class="keyword">false</span>;</div>
|
||||
<div class="line"><a id="l00613" name="l00613"></a><span class="lineno"> 613</span> <span class="keywordflow">try</span> {</div>
|
||||
<div class="line"><a id="l00614" name="l00614"></a><span class="lineno"> 614</span> <a class="code hl_class" href="classDbcParser.html">DbcParser</a>().<a class="code hl_function" href="classDbcParser.html#aef72826942c9095d653fafa435855e56">ParseFile</a>(fixture.path.string());</div>
|
||||
<div class="line"><a id="l00615" name="l00615"></a><span class="lineno"> 615</span> } <span class="keywordflow">catch</span> (<span class="keyword">const</span> std::runtime_error &error) {</div>
|
||||
<div class="line"><a id="l00616" name="l00616"></a><span class="lineno"> 616</span> rejected = std::string(error.what()).find(fixture.path.string() + <span class="stringliteral">":3: "</span>) == 0U;</div>
|
||||
<div class="line"><a id="l00617" name="l00617"></a><span class="lineno"> 617</span> }</div>
|
||||
<div class="line"><a id="l00618" name="l00618"></a><span class="lineno"> 618</span> CHECK(rejected, <span class="stringliteral">"Deferred validation reports branch source line"</span>);</div>
|
||||
<div class="line"><a id="l00619" name="l00619"></a><span class="lineno"> 619</span> fixture.Write(<span class="stringliteral">"BO_ 1 Frame: 2 ECU\n"</span></div>
|
||||
<div class="line"><a id="l00620" name="l00620"></a><span class="lineno"> 620</span> <span class="stringliteral">"SG_ A : 8|8@1+ (1,0) [0|255] \"\" ECU\n"</span></div>
|
||||
<div class="line"><a id="l00621" name="l00621"></a><span class="lineno"> 621</span> <span class="stringliteral">"SG_ B : 15|8@0+ (1,0) [0|255] \"\" ECU\n"</span>);</div>
|
||||
<div class="line"><a id="l00622" name="l00622"></a><span class="lineno"> 622</span> rejected = <span class="keyword">false</span>;</div>
|
||||
<div class="line"><a id="l00623" name="l00623"></a><span class="lineno"> 623</span> <span class="keywordflow">try</span> {</div>
|
||||
<div class="line"><a id="l00624" name="l00624"></a><span class="lineno"> 624</span> <a class="code hl_class" href="classDbcParser.html">DbcParser</a>().<a class="code hl_function" href="classDbcParser.html#aef72826942c9095d653fafa435855e56">ParseFile</a>(fixture.path.string());</div>
|
||||
<div class="line"><a id="l00625" name="l00625"></a><span class="lineno"> 625</span> } <span class="keywordflow">catch</span> (<span class="keyword">const</span> std::runtime_error &) {</div>
|
||||
<div class="line"><a id="l00626" name="l00626"></a><span class="lineno"> 626</span> rejected = <span class="keyword">true</span>;</div>
|
||||
<div class="line"><a id="l00627" name="l00627"></a><span class="lineno"> 627</span> }</div>
|
||||
<div class="line"><a id="l00628" name="l00628"></a><span class="lineno"> 628</span> CHECK(rejected, <span class="stringliteral">"Ordinary overlapping signals rejected"</span>);</div>
|
||||
<div class="line"><a id="l00629" name="l00629"></a><span class="lineno"> 629</span>}</div>
|
||||
<div class="line"><a id="l00630" name="l00630"></a><span class="lineno"> 630</span> </div>
|
||||
<div class="line"><a id="l00631" name="l00631"></a><span class="lineno"> 631</span><span class="keywordtype">void</span> DbcParserTest::invalidSignals() {</div>
|
||||
<div class="line"><a id="l00632" name="l00632"></a><span class="lineno"> 632</span> Fixture fixture;</div>
|
||||
<div class="line"><a id="l00633" name="l00633"></a><span class="lineno"> 633</span> <span class="keyword">const</span> std::string ordinary = SignalLine(<span class="stringliteral">"0"</span>, <span class="stringliteral">"8"</span>, <span class="stringliteral">"1+"</span>, <span class="stringliteral">"1"</span>, <span class="stringliteral">"0"</span>, <span class="stringliteral">"0"</span>, <span class="stringliteral">"255"</span>);</div>
|
||||
<div class="line"><a id="l00634" name="l00634"></a><span class="lineno"> 634</span> <span class="keywordflow">for</span> (<span class="keyword">const</span> std::string value: {<span class="stringliteral">"-1"</span>, <span class="stringliteral">"+1"</span>, <span class="stringliteral">"0junk"</span>, <span class="stringliteral">"0x10"</span>, <span class="stringliteral">"1.5"</span>,</div>
|
||||
<div class="line"><a id="l00635" name="l00635"></a><span class="lineno"> 635</span> <span class="stringliteral">"4294967296"</span>, <span class="stringliteral">"999999999999999999999"</span>}) {</div>
|
||||
<div class="line"><a id="l00636" name="l00636"></a><span class="lineno"> 636</span> RejectSignal(fixture, SignalLine(value, <span class="stringliteral">"8"</span>, <span class="stringliteral">"1+"</span>, <span class="stringliteral">"1"</span>, <span class="stringliteral">"0"</span>, <span class="stringliteral">"0"</span>, <span class="stringliteral">"255"</span>));</div>
|
||||
<div class="line"><a id="l00637" name="l00637"></a><span class="lineno"> 637</span> RejectSignal(fixture, SignalLine(<span class="stringliteral">"0"</span>, value, <span class="stringliteral">"1+"</span>, <span class="stringliteral">"1"</span>, <span class="stringliteral">"0"</span>, <span class="stringliteral">"0"</span>, <span class="stringliteral">"255"</span>));</div>
|
||||
<div class="line"><a id="l00638" name="l00638"></a><span class="lineno"> 638</span> }</div>
|
||||
<div class="line"><a id="l00639" name="l00639"></a><span class="lineno"> 639</span> <span class="keywordflow">for</span> (<span class="keyword">const</span> std::string length: {<span class="stringliteral">"0"</span>, <span class="stringliteral">"65"</span>})</div>
|
||||
<div class="line"><a id="l00640" name="l00640"></a><span class="lineno"> 640</span> RejectSignal(fixture, SignalLine(<span class="stringliteral">"0"</span>, length, <span class="stringliteral">"1+"</span>, <span class="stringliteral">"1"</span>, <span class="stringliteral">"0"</span>, <span class="stringliteral">"0"</span>, <span class="stringliteral">"255"</span>));</div>
|
||||
<div class="line"><a id="l00641" name="l00641"></a><span class="lineno"> 641</span> <span class="keywordflow">for</span> (<span class="keyword">const</span> std::string order: {<span class="stringliteral">"2+"</span>, <span class="stringliteral">"9-"</span>, <span class="stringliteral">"1"</span>, <span class="stringliteral">"1x"</span>, <span class="stringliteral">"1++"</span>, <span class="stringliteral">"01+"</span>})</div>
|
||||
<div class="line"><a id="l00642" name="l00642"></a><span class="lineno"> 642</span> RejectSignal(fixture, SignalLine(<span class="stringliteral">"0"</span>, <span class="stringliteral">"8"</span>, order, <span class="stringliteral">"1"</span>, <span class="stringliteral">"0"</span>, <span class="stringliteral">"0"</span>, <span class="stringliteral">"255"</span>));</div>
|
||||
<div class="line"><a id="l00643" name="l00643"></a><span class="lineno"> 643</span> <span class="keywordflow">for</span> (<span class="keyword">const</span> std::string value: {<span class="stringliteral">"1junk"</span>, <span class="stringliteral">"nan"</span>, <span class="stringliteral">"NaN"</span>, <span class="stringliteral">"inf"</span>, <span class="stringliteral">"-inf"</span>, <span class="stringliteral">"1e999"</span>, <span class="stringliteral">"1e-999"</span>, <span class="stringliteral">"0x1p2"</span>, <span class="stringliteral">""</span>, <span class="stringliteral">"1e"</span>, <span class="stringliteral">"1.2.3"</span>}) {</div>
|
||||
<div class="line"><a id="l00644" name="l00644"></a><span class="lineno"> 644</span> RejectSignal(fixture, SignalLine(<span class="stringliteral">"0"</span>, <span class="stringliteral">"8"</span>, <span class="stringliteral">"1+"</span>, value, <span class="stringliteral">"0"</span>, <span class="stringliteral">"0"</span>, <span class="stringliteral">"255"</span>));</div>
|
||||
<div class="line"><a id="l00645" name="l00645"></a><span class="lineno"> 645</span> RejectSignal(fixture, SignalLine(<span class="stringliteral">"0"</span>, <span class="stringliteral">"8"</span>, <span class="stringliteral">"1+"</span>, <span class="stringliteral">"1"</span>, value, <span class="stringliteral">"0"</span>, <span class="stringliteral">"255"</span>));</div>
|
||||
<div class="line"><a id="l00646" name="l00646"></a><span class="lineno"> 646</span> RejectSignal(fixture, SignalLine(<span class="stringliteral">"0"</span>, <span class="stringliteral">"8"</span>, <span class="stringliteral">"1+"</span>, <span class="stringliteral">"1"</span>, <span class="stringliteral">"0"</span>, value, <span class="stringliteral">"255"</span>));</div>
|
||||
<div class="line"><a id="l00647" name="l00647"></a><span class="lineno"> 647</span> RejectSignal(fixture, SignalLine(<span class="stringliteral">"0"</span>, <span class="stringliteral">"8"</span>, <span class="stringliteral">"1+"</span>, <span class="stringliteral">"1"</span>, <span class="stringliteral">"0"</span>, <span class="stringliteral">"0"</span>, value));</div>
|
||||
<div class="line"><a id="l00648" name="l00648"></a><span class="lineno"> 648</span> }</div>
|
||||
<div class="line"><a id="l00649" name="l00649"></a><span class="lineno"> 649</span> RejectSignal(fixture, SignalLine(<span class="stringliteral">"0"</span>, <span class="stringliteral">"8"</span>, <span class="stringliteral">"1+"</span>, <span class="stringliteral">"1"</span>, <span class="stringliteral">"0"</span>, <span class="stringliteral">"2"</span>, <span class="stringliteral">"1"</span>));</div>
|
||||
<div class="line"><a id="l00650" name="l00650"></a><span class="lineno"> 650</span> <span class="keywordflow">for</span> (<span class="keyword">const</span> std::string name: {<span class="stringliteral">""</span>, <span class="stringliteral">"Two Names"</span>, <span class="stringliteral">"Value m1M"</span>}) {</div>
|
||||
<div class="line"><a id="l00651" name="l00651"></a><span class="lineno"> 651</span> std::string line = ordinary;</div>
|
||||
<div class="line"><a id="l00652" name="l00652"></a><span class="lineno"> 652</span> line.replace(4U, 5U, name);</div>
|
||||
<div class="line"><a id="l00653" name="l00653"></a><span class="lineno"> 653</span> RejectSignal(fixture, line);</div>
|
||||
<div class="line"><a id="l00654" name="l00654"></a><span class="lineno"> 654</span> }</div>
|
||||
<div class="line"><a id="l00655" name="l00655"></a><span class="lineno"> 655</span> <span class="keywordflow">for</span> (<span class="keyword">const</span> std::string broken: {</div>
|
||||
<div class="line"><a id="l00656" name="l00656"></a><span class="lineno"> 656</span> <span class="stringliteral">"SG_"</span>, <span class="stringliteral">"SG_ Value"</span>, <span class="stringliteral">"SG_ Value : 0|8@1+ (1,0) [0|255] ECU"</span>,</div>
|
||||
<div class="line"><a id="l00657" name="l00657"></a><span class="lineno"> 657</span> <span class="stringliteral">"SG_ Value : 0|8@1+ (1,0) [0|255] \"\""</span>,</div>
|
||||
<div class="line"><a id="l00658" name="l00658"></a><span class="lineno"> 658</span> <span class="stringliteral">"SG_ Value : 0|8@1+ (1,0) [0|255] \"\" ECU,"</span>,</div>
|
||||
<div class="line"><a id="l00659" name="l00659"></a><span class="lineno"> 659</span> <span class="stringliteral">"SG_ Value : 0|8@1+ (1,0) [0|255] \"\" ECU extra"</span>})</div>
|
||||
<div class="line"><a id="l00660" name="l00660"></a><span class="lineno"> 660</span> RejectSignal(fixture, broken);</div>
|
||||
<div class="line"><a id="l00661" name="l00661"></a><span class="lineno"> 661</span> RejectSignal(fixture, SignalLine(<span class="stringliteral">"64"</span>, <span class="stringliteral">"1"</span>, <span class="stringliteral">"1+"</span>, <span class="stringliteral">"1"</span>, <span class="stringliteral">"0"</span>, <span class="stringliteral">"0"</span>, <span class="stringliteral">"1"</span>));</div>
|
||||
<div class="line"><a id="l00662" name="l00662"></a><span class="lineno"> 662</span> RejectSignal(fixture, SignalLine(<span class="stringliteral">"63"</span>, <span class="stringliteral">"2"</span>, <span class="stringliteral">"1+"</span>, <span class="stringliteral">"1"</span>, <span class="stringliteral">"0"</span>, <span class="stringliteral">"0"</span>, <span class="stringliteral">"3"</span>));</div>
|
||||
<div class="line"><a id="l00663" name="l00663"></a><span class="lineno"> 663</span> RejectSignal(fixture, SignalLine(<span class="stringliteral">"56"</span>, <span class="stringliteral">"2"</span>, <span class="stringliteral">"0+"</span>, <span class="stringliteral">"1"</span>, <span class="stringliteral">"0"</span>, <span class="stringliteral">"0"</span>, <span class="stringliteral">"3"</span>));</div>
|
||||
<div class="line"><a id="l00664" name="l00664"></a><span class="lineno"> 664</span> RejectSignal(fixture, SignalLine(<span class="stringliteral">"4294967295"</span>, <span class="stringliteral">"64"</span>, <span class="stringliteral">"1+"</span>, <span class="stringliteral">"1"</span>, <span class="stringliteral">"0"</span>, <span class="stringliteral">"0"</span>, <span class="stringliteral">"1"</span>));</div>
|
||||
<div class="line"><a id="l00665" name="l00665"></a><span class="lineno"> 665</span> RejectSignal(fixture, ordinary, 0U);</div>
|
||||
<div class="line"><a id="l00666" name="l00666"></a><span class="lineno"> 666</span> <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keywordtype">char</span> delimiter: {<span class="charliteral">'|'</span>, <span class="charliteral">'@'</span>, <span class="charliteral">'('</span>, <span class="charliteral">')'</span>, <span class="charliteral">'['</span>, <span class="charliteral">']'</span>, <span class="charliteral">'"'</span>}) {</div>
|
||||
<div class="line"><a id="l00667" name="l00667"></a><span class="lineno"> 667</span> std::string line = ordinary;</div>
|
||||
<div class="line"><a id="l00668" name="l00668"></a><span class="lineno"> 668</span> line.erase(line.find(delimiter), 1U);</div>
|
||||
<div class="line"><a id="l00669" name="l00669"></a><span class="lineno"> 669</span> RejectSignal(fixture, line);</div>
|
||||
<div class="line"><a id="l00670" name="l00670"></a><span class="lineno"> 670</span> }</div>
|
||||
<div class="line"><a id="l00671" name="l00671"></a><span class="lineno"> 671</span>}</div>
|
||||
<div class="line"><a id="l00672" name="l00672"></a><span class="lineno"> 672</span> </div>
|
||||
<div class="line"><a id="l00673" name="l00673"></a><span class="lineno"> 673</span><span class="keywordtype">void</span> DbcParserTest::validSignals() {</div>
|
||||
<div class="line"><a id="l00674" name="l00674"></a><span class="lineno"> 674</span> Fixture fixture;</div>
|
||||
<div class="line"><a id="l00675" name="l00675"></a><span class="lineno"> 675</span> <span class="keyword">const</span> <a class="code hl_class" href="classDbcParser.html">DbcParser</a> signalParser;</div>
|
||||
<div class="line"><a id="l00676" name="l00676"></a><span class="lineno"> 676</span> fixture.Write(<span class="stringliteral">"BO_ 1 Frame: 8 ECU\n"</span> +</div>
|
||||
<div class="line"><a id="l00677" name="l00677"></a><span class="lineno"> 677</span> SignalLine(<span class="stringliteral">"0"</span>, <span class="stringliteral">"8"</span>, <span class="stringliteral">"1+"</span>, <span class="stringliteral">"0"</span>, <span class="stringliteral">"0"</span>, <span class="stringliteral">"0"</span>, <span class="stringliteral">"0"</span>) + <span class="stringliteral">"\n"</span> +</div>
|
||||
<div class="line"><a id="l00678" name="l00678"></a><span class="lineno"> 678</span> SignalLine(<span class="stringliteral">"8"</span>, <span class="stringliteral">"8"</span>, <span class="stringliteral">"1-"</span>, <span class="stringliteral">"-1"</span>, <span class="stringliteral">"0"</span>, <span class="stringliteral">"-255"</span>, <span class="stringliteral">"0"</span>, <span class="stringliteral">"Negative"</span>) + <span class="stringliteral">"\n"</span>);</div>
|
||||
<div class="line"><a id="l00679" name="l00679"></a><span class="lineno"> 679</span> <span class="keyword">const</span> <a class="code hl_struct" href="structDbcDatabase.html">DbcDatabase</a> factors = signalParser.<a class="code hl_function" href="classDbcParser.html#aef72826942c9095d653fafa435855e56">ParseFile</a>(fixture.path.string());</div>
|
||||
<div class="line"><a id="l00680" name="l00680"></a><span class="lineno"> 680</span> CHECK(factors.<a class="code hl_variable" href="structDbcDatabase.html#a2cade5d0234ee816132127542f8c612b">frames</a>[0].signals.size() == 2U &&</div>
|
||||
<div class="line"><a id="l00681" name="l00681"></a><span class="lineno"> 681</span> factors.<a class="code hl_variable" href="structDbcDatabase.html#a2cade5d0234ee816132127542f8c612b">frames</a>[0].signals[0].factor == 0.0 &&</div>
|
||||
<div class="line"><a id="l00682" name="l00682"></a><span class="lineno"> 682</span> factors.<a class="code hl_variable" href="structDbcDatabase.html#a2cade5d0234ee816132127542f8c612b">frames</a>[0].signals[1].factor == -1.0,</div>
|
||||
<div class="line"><a id="l00683" name="l00683"></a><span class="lineno"> 683</span> <span class="stringliteral">"Zero and negative factors and equal range boundaries"</span>);</div>
|
||||
<div class="line"><a id="l00684" name="l00684"></a><span class="lineno"> 684</span> </div>
|
||||
<div class="line"><a id="l00685" name="l00685"></a><span class="lineno"> 685</span> <span class="keyword">struct </span>SignalCase {</div>
|
||||
<div class="line"><a id="l00686" name="l00686"></a><span class="lineno"> 686</span> <span class="keyword">const</span> <span class="keywordtype">char</span> *start;</div>
|
||||
<div class="line"><a id="l00687" name="l00687"></a><span class="lineno"> 687</span> <span class="keyword">const</span> <span class="keywordtype">char</span> *length;</div>
|
||||
<div class="line"><a id="l00688" name="l00688"></a><span class="lineno"> 688</span> <span class="keyword">const</span> <span class="keywordtype">char</span> *order;</div>
|
||||
<div class="line"><a id="l00689" name="l00689"></a><span class="lineno"> 689</span> <span class="keywordtype">unsigned</span> payload;</div>
|
||||
<div class="line"><a id="l00690" name="l00690"></a><span class="lineno"> 690</span> };</div>
|
||||
<div class="line"><a id="l00691" name="l00691"></a><span class="lineno"> 691</span> <span class="keyword">const</span> SignalCase validSignals[] = {</div>
|
||||
<div class="line"><a id="l00692" name="l00692"></a><span class="lineno"> 692</span> {<span class="stringliteral">"0"</span>, <span class="stringliteral">"1"</span>, <span class="stringliteral">"1+"</span>, 1U},</div>
|
||||
<div class="line"><a id="l00693" name="l00693"></a><span class="lineno"> 693</span> {<span class="stringliteral">"7"</span>, <span class="stringliteral">"1"</span>, <span class="stringliteral">"0-"</span>, 1U},</div>
|
||||
<div class="line"><a id="l00694" name="l00694"></a><span class="lineno"> 694</span> {<span class="stringliteral">"0"</span>, <span class="stringliteral">"64"</span>, <span class="stringliteral">"1+"</span>, 8U},</div>
|
||||
<div class="line"><a id="l00695" name="l00695"></a><span class="lineno"> 695</span> {<span class="stringliteral">"7"</span>, <span class="stringliteral">"64"</span>, <span class="stringliteral">"0-"</span>, 8U},</div>
|
||||
<div class="line"><a id="l00696" name="l00696"></a><span class="lineno"> 696</span> {<span class="stringliteral">"63"</span>, <span class="stringliteral">"1"</span>, <span class="stringliteral">"1+"</span>, 8U},</div>
|
||||
<div class="line"><a id="l00697" name="l00697"></a><span class="lineno"> 697</span> {<span class="stringliteral">"56"</span>, <span class="stringliteral">"1"</span>, <span class="stringliteral">"0+"</span>, 8U},</div>
|
||||
<div class="line"><a id="l00698" name="l00698"></a><span class="lineno"> 698</span> {<span class="stringliteral">"3"</span>, <span class="stringliteral">"12"</span>, <span class="stringliteral">"0+"</span>, 2U},</div>
|
||||
<div class="line"><a id="l00699" name="l00699"></a><span class="lineno"> 699</span> {<span class="stringliteral">"2039"</span>, <span class="stringliteral">"1"</span>, <span class="stringliteral">"1+"</span>, 255U}};</div>
|
||||
<div class="line"><a id="l00700" name="l00700"></a><span class="lineno"> 700</span> <span class="keywordflow">for</span> (<span class="keyword">const</span> SignalCase &test: validSignals) {</div>
|
||||
<div class="line"><a id="l00701" name="l00701"></a><span class="lineno"> 701</span> fixture.Write(<span class="stringliteral">"BO_ 1 Frame: "</span> + std::to_string(test.payload) + <span class="stringliteral">" ECU\n"</span> +</div>
|
||||
<div class="line"><a id="l00702" name="l00702"></a><span class="lineno"> 702</span> SignalLine(test.start, test.length, test.order, <span class="stringliteral">".5e+1"</span>, <span class="stringliteral">"-2.5E-1"</span>, <span class="stringliteral">"-1."</span>, <span class="stringliteral">"+2e2"</span>) + <span class="stringliteral">"\n"</span>);</div>
|
||||
<div class="line"><a id="l00703" name="l00703"></a><span class="lineno"> 703</span> <span class="keywordflow">try</span> {</div>
|
||||
<div class="line"><a id="l00704" name="l00704"></a><span class="lineno"> 704</span> <span class="keyword">const</span> <a class="code hl_struct" href="structDbcDatabase.html">DbcDatabase</a> parsed = signalParser.<a class="code hl_function" href="classDbcParser.html#aef72826942c9095d653fafa435855e56">ParseFile</a>(fixture.path.string());</div>
|
||||
<div class="line"><a id="l00705" name="l00705"></a><span class="lineno"> 705</span> <span class="keyword">const</span> <a class="code hl_struct" href="structSignalInfo.html">SignalInfo</a> &signal = parsed.<a class="code hl_variable" href="structDbcDatabase.html#a2cade5d0234ee816132127542f8c612b">frames</a>.at(0).signals.at(0);</div>
|
||||
<div class="line"><a id="l00706" name="l00706"></a><span class="lineno"> 706</span> QCOMPARE(signal.<a class="code hl_variable" href="structSignalInfo.html#ace290724f9801521609aedaa946d61f1">startBit</a>, <span class="keyword">static_cast<</span>std::uint32_t<span class="keyword">></span>(std::stoul(test.start)));</div>
|
||||
<div class="line"><a id="l00707" name="l00707"></a><span class="lineno"> 707</span> QCOMPARE(signal.<a class="code hl_variable" href="structSignalInfo.html#a1008b5201f71848177217bd52fb84baa">length</a>, <span class="keyword">static_cast<</span>std::uint32_t<span class="keyword">></span>(std::stoul(test.length)));</div>
|
||||
<div class="line"><a id="l00708" name="l00708"></a><span class="lineno"> 708</span> QCOMPARE(signal.<a class="code hl_variable" href="structSignalInfo.html#af363b1563fb4c7cc8973f9a80c06846c">isLittleEndian</a>, test.order[0] == <span class="charliteral">'1'</span>);</div>
|
||||
<div class="line"><a id="l00709" name="l00709"></a><span class="lineno"> 709</span> QCOMPARE(signal.<a class="code hl_variable" href="structSignalInfo.html#a52a52b320eef92fbcb4626307f9a498f">isSigned</a>, test.order[1] == <span class="charliteral">'-'</span>);</div>
|
||||
<div class="line"><a id="l00710" name="l00710"></a><span class="lineno"> 710</span> QCOMPARE(signal.<a class="code hl_variable" href="structSignalInfo.html#ae4f78d99a2750aa564d7eba860171499">factor</a>, 5.0);</div>
|
||||
<div class="line"><a id="l00711" name="l00711"></a><span class="lineno"> 711</span> QCOMPARE(signal.<a class="code hl_variable" href="structSignalInfo.html#ab7d0769f47aa540656b22e4e49db517e">offset</a>, -0.25);</div>
|
||||
<div class="line"><a id="l00712" name="l00712"></a><span class="lineno"> 712</span> QCOMPARE(signal.<a class="code hl_variable" href="structSignalInfo.html#ada7bf94fbeaa26bd08c73982b5af255b">minimum</a>, -1.0);</div>
|
||||
<div class="line"><a id="l00713" name="l00713"></a><span class="lineno"> 713</span> QCOMPARE(signal.<a class="code hl_variable" href="structSignalInfo.html#adf1c4331b9eabced0d7fdda40ff0eb52">maximum</a>, 200.0);</div>
|
||||
<div class="line"><a id="l00714" name="l00714"></a><span class="lineno"> 714</span> } <span class="keywordflow">catch</span> (<span class="keyword">const</span> std::exception &error) { CHECK(<span class="keyword">false</span>, error.what()); }</div>
|
||||
<div class="line"><a id="l00715" name="l00715"></a><span class="lineno"> 715</span> }</div>
|
||||
<div class="line"><a id="l00716" name="l00716"></a><span class="lineno"> 716</span> fixture.Write(<span class="stringliteral">"BO_ 1 Frame: 8 ECU\n"</span></div>
|
||||
<div class="line"><a id="l00717" name="l00717"></a><span class="lineno"> 717</span> <span class="stringliteral">"SG_\tValue\t:\t0 | 8 @1+ ( 1 , 0 ) [ 0 | 255 ] \"rpm\" ECU1,\tECU2\n"</span>);</div>
|
||||
<div class="line"><a id="l00718" name="l00718"></a><span class="lineno"> 718</span> <span class="keywordflow">try</span> {</div>
|
||||
<div class="line"><a id="l00719" name="l00719"></a><span class="lineno"> 719</span> <span class="keyword">const</span> <a class="code hl_struct" href="structDbcDatabase.html">DbcDatabase</a> parsed = signalParser.<a class="code hl_function" href="classDbcParser.html#aef72826942c9095d653fafa435855e56">ParseFile</a>(fixture.path.string());</div>
|
||||
<div class="line"><a id="l00720" name="l00720"></a><span class="lineno"> 720</span> <span class="keyword">const</span> <a class="code hl_struct" href="structSignalInfo.html">SignalInfo</a> &signal = parsed.<a class="code hl_variable" href="structDbcDatabase.html#a2cade5d0234ee816132127542f8c612b">frames</a>.at(0).signals.at(0);</div>
|
||||
<div class="line"><a id="l00721" name="l00721"></a><span class="lineno"> 721</span> CHECK(signal.<a class="code hl_variable" href="structSignalInfo.html#a379e422a00cad56f896cacf60455b088">name</a> == <span class="stringliteral">"Value"</span> && signal.<a class="code hl_variable" href="structSignalInfo.html#a1f214f03e94ef5794de2d3367bfcbd01">unit</a> == <span class="stringliteral">"rpm"</span> &&</div>
|
||||
<div class="line"><a id="l00722" name="l00722"></a><span class="lineno"> 722</span> signal.<a class="code hl_variable" href="structSignalInfo.html#a2c95562fd0b29327a7fd7b1e6feee7f3">receivers</a> == std::vector<std::string>({<span class="stringliteral">"ECU1"</span>, <span class="stringliteral">"ECU2"</span>}),</div>
|
||||
<div class="line"><a id="l00723" name="l00723"></a><span class="lineno"> 723</span> <span class="stringliteral">"Signal tabs, spaces, and receiver list"</span>);</div>
|
||||
<div class="line"><a id="l00724" name="l00724"></a><span class="lineno"> 724</span> } <span class="keywordflow">catch</span> (<span class="keyword">const</span> std::exception &error) { CHECK(<span class="keyword">false</span>, error.what()); }</div>
|
||||
<div class="line"><a id="l00725" name="l00725"></a><span class="lineno"> 725</span>}</div>
|
||||
<div class="line"><a id="l00726" name="l00726"></a><span class="lineno"> 726</span> </div>
|
||||
<div class="line"><a id="l00727" name="l00727"></a><span class="lineno"> 727</span><span class="keywordtype">void</span> DbcParserTest::dispatch() {</div>
|
||||
<div class="line"><a id="l00728" name="l00728"></a><span class="lineno"> 728</span> CountingHandler::instances = 0;</div>
|
||||
<div class="line"><a id="l00729" name="l00729"></a><span class="lineno"> 729</span> CountingHandler::calls = 0;</div>
|
||||
<div class="line"><a id="l00730" name="l00730"></a><span class="lineno"> 730</span> <a class="code hl_struct" href="structDbcDatabase.html">DbcDatabase</a> dispatchDatabase;</div>
|
||||
<div class="line"><a id="l00731" name="l00731"></a><span class="lineno"> 731</span> <a class="code hl_struct" href="structDbcParseContext.html">DbcParseContext</a> context{dispatchDatabase, <span class="keyword">nullptr</span>};</div>
|
||||
<div class="line"><a id="l00732" name="l00732"></a><span class="lineno"> 732</span> <a class="code hl_class" href="classDbcStatementDispatcher.html">DbcStatementDispatcher</a> dispatcher;</div>
|
||||
<div class="line"><a id="l00733" name="l00733"></a><span class="lineno"> 733</span> dispatcher.RegisterType<CountingHandler>(<span class="stringliteral">"TEST_"</span>);</div>
|
||||
<div class="line"><a id="l00734" name="l00734"></a><span class="lineno"> 734</span> CHECK(dispatcher.<a class="code hl_function" href="classDbcStatementDispatcher.html#a495c2d5c7ebb8103b1987cdd87c142ed">Dispatch</a>(<span class="stringliteral">"TEST_ first"</span>, context) &&</div>
|
||||
<div class="line"><a id="l00735" name="l00735"></a><span class="lineno"> 735</span> dispatcher.<a class="code hl_function" href="classDbcStatementDispatcher.html#a495c2d5c7ebb8103b1987cdd87c142ed">Dispatch</a>(<span class="stringliteral">"TEST_ second"</span>, context) &&</div>
|
||||
<div class="line"><a id="l00736" name="l00736"></a><span class="lineno"> 736</span> CountingHandler::instances == 1 && CountingHandler::calls == 2 &&</div>
|
||||
<div class="line"><a id="l00737" name="l00737"></a><span class="lineno"> 737</span> dispatchDatabase.<a class="code hl_variable" href="structDbcDatabase.html#a2cade5d0234ee816132127542f8c612b">frames</a>.size() == 2U,</div>
|
||||
<div class="line"><a id="l00738" name="l00738"></a><span class="lineno"> 738</span> <span class="stringliteral">"Factory dispatch and handler reuse"</span>);</div>
|
||||
<div class="line"><a id="l00739" name="l00739"></a><span class="lineno"> 739</span> CHECK(!dispatcher.<a class="code hl_function" href="classDbcStatementDispatcher.html#a495c2d5c7ebb8103b1987cdd87c142ed">Dispatch</a>(<span class="stringliteral">"TEST_OTHER data"</span>, context) &&</div>
|
||||
<div class="line"><a id="l00740" name="l00740"></a><span class="lineno"> 740</span> !dispatcher.<a class="code hl_function" href="classDbcStatementDispatcher.html#a495c2d5c7ebb8103b1987cdd87c142ed">Dispatch</a>(<span class="stringliteral">"BO_TX_BU_ 1 : ECU;"</span>, context) &&</div>
|
||||
<div class="line"><a id="l00741" name="l00741"></a><span class="lineno"> 741</span> !dispatcher.<a class="code hl_function" href="classDbcStatementDispatcher.html#a495c2d5c7ebb8103b1987cdd87c142ed">Dispatch</a>(<span class="stringliteral">"VAL_TABLE_ States 0 \"Stopped\";"</span>, context) &&</div>
|
||||
<div class="line"><a id="l00742" name="l00742"></a><span class="lineno"> 742</span> CountingHandler::calls == 2,</div>
|
||||
<div class="line"><a id="l00743" name="l00743"></a><span class="lineno"> 743</span> <span class="stringliteral">"Exact and unknown keyword dispatch"</span>);</div>
|
||||
<div class="line"><a id="l00744" name="l00744"></a><span class="lineno"> 744</span>}</div>
|
||||
<div class="line"><a id="l00745" name="l00745"></a><span class="lineno"> 745</span> </div>
|
||||
<div class="line"><a id="l00746" name="l00746"></a><span class="lineno"> 746</span><span class="keywordtype">void</span> DbcParserTest::independentSessions() {</div>
|
||||
<div class="line"><a id="l00747" name="l00747"></a><span class="lineno"> 747</span> Fixture fixture;</div>
|
||||
<div class="line"><a id="l00748" name="l00748"></a><span class="lineno"> 748</span> <span class="keyword">const</span> <a class="code hl_class" href="classDbcParser.html">DbcParser</a> parser;</div>
|
||||
<div class="line"><a id="l00749" name="l00749"></a><span class="lineno"> 749</span> fixture.Write(<span class="stringliteral">"BO_ 1 First: 8 ECU\n"</span>);</div>
|
||||
<div class="line"><a id="l00750" name="l00750"></a><span class="lineno"> 750</span> CHECK(parser.<a class="code hl_function" href="classDbcParser.html#aef72826942c9095d653fafa435855e56">ParseFile</a>(fixture.path.string()).<a class="code hl_variable" href="structDbcDatabase.html#a2cade5d0234ee816132127542f8c612b">frames</a>.size() == 1U, <span class="stringliteral">"First parse"</span>);</div>
|
||||
<div class="line"><a id="l00751" name="l00751"></a><span class="lineno"> 751</span> fixture.Write(<span class="stringliteral">"SG_ Speed : invalid\n"</span>);</div>
|
||||
<div class="line"><a id="l00752" name="l00752"></a><span class="lineno"> 752</span> <span class="keywordflow">try</span> {</div>
|
||||
<div class="line"><a id="l00753" name="l00753"></a><span class="lineno"> 753</span> parser.<a class="code hl_function" href="classDbcParser.html#aef72826942c9095d653fafa435855e56">ParseFile</a>(fixture.path.string());</div>
|
||||
<div class="line"><a id="l00754" name="l00754"></a><span class="lineno"> 754</span> CHECK(<span class="keyword">false</span>, <span class="stringliteral">"Independent parse context"</span>);</div>
|
||||
<div class="line"><a id="l00755" name="l00755"></a><span class="lineno"> 755</span> } <span class="keywordflow">catch</span> (<span class="keyword">const</span> std::runtime_error &error) {</div>
|
||||
<div class="line"><a id="l00756" name="l00756"></a><span class="lineno"> 756</span> CHECK(std::string(error.what()).find(<span class="stringliteral">"Signal found before any frame"</span>) !=</div>
|
||||
<div class="line"><a id="l00757" name="l00757"></a><span class="lineno"> 757</span> std::string::npos,</div>
|
||||
<div class="line"><a id="l00758" name="l00758"></a><span class="lineno"> 758</span> <span class="stringliteral">"Independent parse context"</span>);</div>
|
||||
<div class="line"><a id="l00759" name="l00759"></a><span class="lineno"> 759</span> }</div>
|
||||
<div class="line"><a id="l00760" name="l00760"></a><span class="lineno"> 760</span> fixture.Write(<span class="stringliteral">"BO_ 2 Second: 8 ECU\n"</span>);</div>
|
||||
<div class="line"><a id="l00761" name="l00761"></a><span class="lineno"> 761</span> <span class="keyword">const</span> <a class="code hl_struct" href="structDbcDatabase.html">DbcDatabase</a> recovered = parser.<a class="code hl_function" href="classDbcParser.html#aef72826942c9095d653fafa435855e56">ParseFile</a>(fixture.path.string());</div>
|
||||
<div class="line"><a id="l00762" name="l00762"></a><span class="lineno"> 762</span> CHECK(recovered.<a class="code hl_variable" href="structDbcDatabase.html#a2cade5d0234ee816132127542f8c612b">frames</a>.size() == 1U && recovered.<a class="code hl_variable" href="structDbcDatabase.html#a2cade5d0234ee816132127542f8c612b">frames</a>[0].canId == 2U,</div>
|
||||
<div class="line"><a id="l00763" name="l00763"></a><span class="lineno"> 763</span> <span class="stringliteral">"Fresh parse after error"</span>);</div>
|
||||
<div class="line"><a id="l00764" name="l00764"></a><span class="lineno"> 764</span>}</div>
|
||||
<div class="line"><a id="l00765" name="l00765"></a><span class="lineno"> 765</span> </div>
|
||||
<div class="line"><a id="l00766" name="l00766"></a><span class="lineno"> 766</span> </div>
|
||||
<div class="line"><a id="l00767" name="l00767"></a><span class="lineno"> 767</span><span class="keywordtype">void</span> DbcParserTest::valueDescriptions() {</div>
|
||||
<div class="line"><a id="l00768" name="l00768"></a><span class="lineno"> 768</span> Fixture fixture;</div>
|
||||
<div class="line"><a id="l00769" name="l00769"></a><span class="lineno"> 769</span> fixture.Write(</div>
|
||||
<div class="line"><a id="l00770" name="l00770"></a><span class="lineno"> 770</span> <span class="stringliteral">"VAL_\t256\tState\t0\t\"Off\"\t1 \"On\" 2 \"Error with spaces; and \\\"quotes\\\"\";\n"</span></div>
|
||||
<div class="line"><a id="l00771" name="l00771"></a><span class="lineno"> 771</span> <span class="stringliteral">"BO_ 256 Status: 8 ECU\n"</span></div>
|
||||
<div class="line"><a id="l00772" name="l00772"></a><span class="lineno"> 772</span> <span class="stringliteral">"SG_ State : 0|8@1+ (2,10) [0|520] \"\" ECU\n"</span></div>
|
||||
<div class="line"><a id="l00773" name="l00773"></a><span class="lineno"> 773</span> <span class="stringliteral">"VAL_ 256 State 3 \"\";\n"</span></div>
|
||||
<div class="line"><a id="l00774" name="l00774"></a><span class="lineno"> 774</span> <span class="stringliteral">"VAL_ 2147483904 State -9223372036854775808 \"Minimum\" -1 \"Negative\" 9223372036854775807 \"Maximum\";\n"</span></div>
|
||||
<div class="line"><a id="l00775" name="l00775"></a><span class="lineno"> 775</span> <span class="stringliteral">"BO_ 2147483904 Extended: 8 ECU\n"</span></div>
|
||||
<div class="line"><a id="l00776" name="l00776"></a><span class="lineno"> 776</span> <span class="stringliteral">"SG_ State : 0|64@1- (1,0) [-1e20|1e20] \"\" ECU\n"</span></div>
|
||||
<div class="line"><a id="l00777" name="l00777"></a><span class="lineno"> 777</span> <span class="stringliteral">"BO_ 2048 Unsigned: 8 ECU\n"</span></div>
|
||||
<div class="line"><a id="l00778" name="l00778"></a><span class="lineno"> 778</span> <span class="stringliteral">"SG_ State : 0|64@1+ (1,0) [0|2e20] \"\" ECU\n"</span></div>
|
||||
<div class="line"><a id="l00779" name="l00779"></a><span class="lineno"> 779</span> <span class="stringliteral">"VAL_ 2147485696 State 9223372036854775808 \"High\" 18446744073709551615 \"Full\";\n"</span>);</div>
|
||||
<div class="line"><a id="l00780" name="l00780"></a><span class="lineno"> 780</span> <span class="keyword">const</span> <a class="code hl_struct" href="structDbcDatabase.html">DbcDatabase</a> parsed = <a class="code hl_class" href="classDbcParser.html">DbcParser</a>().<a class="code hl_function" href="classDbcParser.html#aef72826942c9095d653fafa435855e56">ParseFile</a>(fixture.path.string());</div>
|
||||
<div class="line"><a id="l00781" name="l00781"></a><span class="lineno"> 781</span> <span class="keyword">const</span> <a class="code hl_class" href="classDecodeDatabase.html">DecodeDatabase</a> runtime = <a class="code hl_class" href="classDbcDecodeBuilder.html">DbcDecodeBuilder</a>().<a class="code hl_function" href="classDbcDecodeBuilder.html#a2bc6386dfb5e58976c42e22c19ec471b">Build</a>(parsed);</div>
|
||||
<div class="line"><a id="l00782" name="l00782"></a><span class="lineno"> 782</span> <span class="keyword">const</span> std::unique_ptr<TreeNode> tree = <a class="code hl_class" href="classDbcTreeBuilder.html">DbcTreeBuilder</a>().<a class="code hl_function" href="classDbcTreeBuilder.html#a7e57d067d831b14b383947fd125edd4b">Build</a>(parsed);</div>
|
||||
<div class="line"><a id="l00783" name="l00783"></a><span class="lineno"> 783</span> CHECK(tree->GetChild(0)->GetSignal() == <span class="keyword">nullptr</span>, <span class="stringliteral">"Frame node"</span>);</div>
|
||||
<div class="line"><a id="l00784" name="l00784"></a><span class="lineno"> 784</span> <span class="keywordflow">for</span> (std::size_t index = 0; index < parsed.<a class="code hl_variable" href="structDbcDatabase.html#a2cade5d0234ee816132127542f8c612b">frames</a>.size(); ++index) {</div>
|
||||
<div class="line"><a id="l00785" name="l00785"></a><span class="lineno"> 785</span> CHECK(tree->GetChild(index)->GetChild(0)->GetSignal()->valueDescriptions ==</div>
|
||||
<div class="line"><a id="l00786" name="l00786"></a><span class="lineno"> 786</span> parsed.<a class="code hl_variable" href="structDbcDatabase.html#a2cade5d0234ee816132127542f8c612b">frames</a>[index].signals[0].valueDescriptions &&</div>
|
||||
<div class="line"><a id="l00787" name="l00787"></a><span class="lineno"> 787</span> runtime.<a class="code hl_function" href="classDecodeDatabase.html#aa034c1510984a85f60ad6c0bd744d6e8">GetFrames</a>()[index].signals[0].valueDescriptions ==</div>
|
||||
<div class="line"><a id="l00788" name="l00788"></a><span class="lineno"> 788</span> parsed.<a class="code hl_variable" href="structDbcDatabase.html#a2cade5d0234ee816132127542f8c612b">frames</a>[index].signals[0].valueDescriptions,</div>
|
||||
<div class="line"><a id="l00789" name="l00789"></a><span class="lineno"> 789</span> <span class="stringliteral">"All mappings survive both builders"</span>);</div>
|
||||
<div class="line"><a id="l00790" name="l00790"></a><span class="lineno"> 790</span> }</div>
|
||||
<div class="line"><a id="l00791" name="l00791"></a><span class="lineno"> 791</span> CHECK(tree->GetChild(0)->GetChild(0)->GetSignal()->valueDescriptions ==</div>
|
||||
<div class="line"><a id="l00792" name="l00792"></a><span class="lineno"> 792</span> runtime.<a class="code hl_function" href="classDecodeDatabase.html#aa034c1510984a85f60ad6c0bd744d6e8">GetFrames</a>()[0].signals[0].valueDescriptions,</div>
|
||||
<div class="line"><a id="l00793" name="l00793"></a><span class="lineno"> 793</span> <span class="stringliteral">"Both builders preserve descriptions"</span>);</div>
|
||||
<div class="line"><a id="l00794" name="l00794"></a><span class="lineno"> 794</span> <a class="code hl_struct" href="structRawCanFrame.html">RawCanFrame</a> frame;</div>
|
||||
<div class="line"><a id="l00795" name="l00795"></a><span class="lineno"> 795</span> frame.<a class="code hl_variable" href="structRawCanFrame.html#a2d0e7fa0e3d5c20bbed55ed8f7888ff4">canId</a> = 256;</div>
|
||||
<div class="line"><a id="l00796" name="l00796"></a><span class="lineno"> 796</span> frame.<a class="code hl_variable" href="structRawCanFrame.html#a0acb487612104c99c9907344c035df83">data</a>.resize(8);</div>
|
||||
<div class="line"><a id="l00797" name="l00797"></a><span class="lineno"> 797</span> <span class="keyword">const</span> std::string expected[] = {<span class="stringliteral">"Off"</span>, <span class="stringliteral">"On"</span>, <span class="stringliteral">"Error with spaces; and \"quotes\""</span>, <span class="stringliteral">""</span>};</div>
|
||||
<div class="line"><a id="l00798" name="l00798"></a><span class="lineno"> 798</span> <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> value = 0; value < 5; ++value) {</div>
|
||||
<div class="line"><a id="l00799" name="l00799"></a><span class="lineno"> 799</span> frame.<a class="code hl_variable" href="structRawCanFrame.html#a0acb487612104c99c9907344c035df83">data</a>[0] = value;</div>
|
||||
<div class="line"><a id="l00800" name="l00800"></a><span class="lineno"> 800</span> <span class="keyword">const</span> <a class="code hl_struct" href="structDecodedSignalValue.html">DecodedSignalValue</a> decoded = <a class="code hl_class" href="classDbcDecoder.html">DbcDecoder</a>().<a class="code hl_function" href="classDbcDecoder.html#a345951ffe5d943a70d3a1ea1f39e74f7">Decode</a>(runtime, frame).signals[0];</div>
|
||||
<div class="line"><a id="l00801" name="l00801"></a><span class="lineno"> 801</span> CHECK(decoded.<a class="code hl_variable" href="structDecodedSignalValue.html#aac0ed361af545cde48d0e6f41a859686">valid</a> && decoded.<a class="code hl_variable" href="structDecodedSignalValue.html#a6847d05b3cb00d5e0f6c611968f57978">physicalValue</a> == value * 2 + 10, <span class="stringliteral">"Numeric scaling unchanged"</span>);</div>
|
||||
<div class="line"><a id="l00802" name="l00802"></a><span class="lineno"> 802</span> <span class="keyword">const</span> std::string *description = decoded.<a class="code hl_function" href="structDecodedSignalValue.html#affc38af1bf31bcb6f2c33044bce92bd2">GetValueDescription</a>();</div>
|
||||
<div class="line"><a id="l00803" name="l00803"></a><span class="lineno"> 803</span> CHECK(value < 4 ? description && *description == expected[value] : !description,</div>
|
||||
<div class="line"><a id="l00804" name="l00804"></a><span class="lineno"> 804</span> <span class="stringliteral">"Raw lookup and unknown value"</span>);</div>
|
||||
<div class="line"><a id="l00805" name="l00805"></a><span class="lineno"> 805</span> }</div>
|
||||
<div class="line"><a id="l00806" name="l00806"></a><span class="lineno"> 806</span> frame.<a class="code hl_variable" href="structRawCanFrame.html#a462193d275adc1dba8bd18ffa0e36bb7">isExtended</a> = <span class="keyword">true</span>;</div>
|
||||
<div class="line"><a id="l00807" name="l00807"></a><span class="lineno"> 807</span> <span class="keyword">struct </span>Boundary {</div>
|
||||
<div class="line"><a id="l00808" name="l00808"></a><span class="lineno"> 808</span> std::uint64_t bits;</div>
|
||||
<div class="line"><a id="l00809" name="l00809"></a><span class="lineno"> 809</span> <span class="keyword">const</span> <span class="keywordtype">char</span> *description;</div>
|
||||
<div class="line"><a id="l00810" name="l00810"></a><span class="lineno"> 810</span> };</div>
|
||||
<div class="line"><a id="l00811" name="l00811"></a><span class="lineno"> 811</span> <span class="keywordflow">for</span> (<span class="keyword">const</span> Boundary &test: {Boundary{0x8000000000000000ULL, <span class="stringliteral">"Minimum"</span>},</div>
|
||||
<div class="line"><a id="l00812" name="l00812"></a><span class="lineno"> 812</span> Boundary{0xFFFFFFFFFFFFFFFFULL, <span class="stringliteral">"Negative"</span>},</div>
|
||||
<div class="line"><a id="l00813" name="l00813"></a><span class="lineno"> 813</span> Boundary{0x7FFFFFFFFFFFFFFFULL, <span class="stringliteral">"Maximum"</span>}}) {</div>
|
||||
<div class="line"><a id="l00814" name="l00814"></a><span class="lineno"> 814</span> <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">byte</span> = 0; <span class="keywordtype">byte</span> < 8; ++byte)</div>
|
||||
<div class="line"><a id="l00815" name="l00815"></a><span class="lineno"> 815</span> frame.<a class="code hl_variable" href="structRawCanFrame.html#a0acb487612104c99c9907344c035df83">data</a>[<span class="keywordtype">byte</span>] = <span class="keyword">static_cast<</span>std::uint8_t<span class="keyword">></span>(test.bits >> (<span class="keywordtype">byte</span> * 8));</div>
|
||||
<div class="line"><a id="l00816" name="l00816"></a><span class="lineno"> 816</span> <span class="keyword">const</span> <a class="code hl_struct" href="structDecodedSignalValue.html">DecodedSignalValue</a> decoded = <a class="code hl_class" href="classDbcDecoder.html">DbcDecoder</a>().<a class="code hl_function" href="classDbcDecoder.html#a345951ffe5d943a70d3a1ea1f39e74f7">Decode</a>(runtime, frame).signals[0];</div>
|
||||
<div class="line"><a id="l00817" name="l00817"></a><span class="lineno"> 817</span> CHECK(decoded.<a class="code hl_function" href="structDecodedSignalValue.html#affc38af1bf31bcb6f2c33044bce92bd2">GetValueDescription</a>() && *decoded.<a class="code hl_function" href="structDecodedSignalValue.html#affc38af1bf31bcb6f2c33044bce92bd2">GetValueDescription</a>() == test.description,</div>
|
||||
<div class="line"><a id="l00818" name="l00818"></a><span class="lineno"> 818</span> <span class="stringliteral">"Signed boundaries and distinct extended frame"</span>);</div>
|
||||
<div class="line"><a id="l00819" name="l00819"></a><span class="lineno"> 819</span> }</div>
|
||||
<div class="line"><a id="l00820" name="l00820"></a><span class="lineno"> 820</span> frame.<a class="code hl_variable" href="structRawCanFrame.html#a2d0e7fa0e3d5c20bbed55ed8f7888ff4">canId</a> = 2048;</div>
|
||||
<div class="line"><a id="l00821" name="l00821"></a><span class="lineno"> 821</span> <span class="keywordflow">for</span> (<span class="keyword">const</span> Boundary &test: {Boundary{0x8000000000000000ULL, <span class="stringliteral">"High"</span>},</div>
|
||||
<div class="line"><a id="l00822" name="l00822"></a><span class="lineno"> 822</span> Boundary{0xFFFFFFFFFFFFFFFFULL, <span class="stringliteral">"Full"</span>}}) {</div>
|
||||
<div class="line"><a id="l00823" name="l00823"></a><span class="lineno"> 823</span> <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">byte</span> = 0; <span class="keywordtype">byte</span> < 8; ++byte)</div>
|
||||
<div class="line"><a id="l00824" name="l00824"></a><span class="lineno"> 824</span> frame.<a class="code hl_variable" href="structRawCanFrame.html#a0acb487612104c99c9907344c035df83">data</a>[<span class="keywordtype">byte</span>] = <span class="keyword">static_cast<</span>std::uint8_t<span class="keyword">></span>(test.bits >> (<span class="keywordtype">byte</span> * 8));</div>
|
||||
<div class="line"><a id="l00825" name="l00825"></a><span class="lineno"> 825</span> <span class="keyword">const</span> <a class="code hl_struct" href="structDecodedSignalValue.html">DecodedSignalValue</a> decoded = <a class="code hl_class" href="classDbcDecoder.html">DbcDecoder</a>().<a class="code hl_function" href="classDbcDecoder.html#a345951ffe5d943a70d3a1ea1f39e74f7">Decode</a>(runtime, frame).signals[0];</div>
|
||||
<div class="line"><a id="l00826" name="l00826"></a><span class="lineno"> 826</span> CHECK(decoded.<a class="code hl_function" href="structDecodedSignalValue.html#affc38af1bf31bcb6f2c33044bce92bd2">GetValueDescription</a>() && *decoded.<a class="code hl_function" href="structDecodedSignalValue.html#affc38af1bf31bcb6f2c33044bce92bd2">GetValueDescription</a>() == test.description,</div>
|
||||
<div class="line"><a id="l00827" name="l00827"></a><span class="lineno"> 827</span> <span class="stringliteral">"Unsigned boundaries"</span>);</div>
|
||||
<div class="line"><a id="l00828" name="l00828"></a><span class="lineno"> 828</span> }</div>
|
||||
<div class="line"><a id="l00829" name="l00829"></a><span class="lineno"> 829</span> CHECK(FindValueDescription(runtime.<a class="code hl_function" href="classDecodeDatabase.html#aa034c1510984a85f60ad6c0bd744d6e8">GetFrames</a>()[0].signals[0].valueDescriptions, std::int64_t(1)) != <span class="keyword">nullptr</span>,</div>
|
||||
<div class="line"><a id="l00830" name="l00830"></a><span class="lineno"> 830</span> <span class="stringliteral">"Nonnegative signed lookup matches unsigned key"</span>);</div>
|
||||
<div class="line"><a id="l00831" name="l00831"></a><span class="lineno"> 831</span> frame.<a class="code hl_variable" href="structRawCanFrame.html#a0acb487612104c99c9907344c035df83">data</a>.clear();</div>
|
||||
<div class="line"><a id="l00832" name="l00832"></a><span class="lineno"> 832</span> CHECK(!<a class="code hl_class" href="classDbcDecoder.html">DbcDecoder</a>().Decode(runtime, frame).signals[0].GetValueDescription(), <span class="stringliteral">"Invalid decode has no description"</span>);</div>
|
||||
<div class="line"><a id="l00833" name="l00833"></a><span class="lineno"> 833</span>}</div>
|
||||
<div class="line"><a id="l00834" name="l00834"></a><span class="lineno"> 834</span> </div>
|
||||
<div class="line"><a id="l00835" name="l00835"></a><span class="lineno"> 835</span><span class="keywordtype">void</span> DbcParserTest::invalidValueDescriptions() {</div>
|
||||
<div class="line"><a id="l00836" name="l00836"></a><span class="lineno"> 836</span> Fixture fixture;</div>
|
||||
<div class="line"><a id="l00837" name="l00837"></a><span class="lineno"> 837</span> <span class="keyword">const</span> std::string definitions = <span class="stringliteral">"BO_ 1 Frame: 8 ECU\nSG_ State : 0|64@1+ (1,0) [0|2e20] \"\" ECU\n"</span>;</div>
|
||||
<div class="line"><a id="l00838" name="l00838"></a><span class="lineno"> 838</span> <span class="keywordflow">for</span> (<span class="keyword">const</span> std::string statement: {</div>
|
||||
<div class="line"><a id="l00839" name="l00839"></a><span class="lineno"> 839</span> <span class="stringliteral">"VAL_"</span>, <span class="stringliteral">"VAL_ 1 State;"</span>, <span class="stringliteral">"VAL_ 1 State ;"</span>, <span class="stringliteral">"VAL_ 1 State 0 \"Off\""</span>,</div>
|
||||
<div class="line"><a id="l00840" name="l00840"></a><span class="lineno"> 840</span> <span class="stringliteral">"VAL_ 1 State 0 \"Off\"; junk"</span>, <span class="stringliteral">"VAL_ 1 State 0 Off;"</span>,</div>
|
||||
<div class="line"><a id="l00841" name="l00841"></a><span class="lineno"> 841</span> <span class="stringliteral">"VAL_ 1 State 0 \"Unclosed;"</span>, <span class="stringliteral">"VAL_ 1 State 0 \"Off\"1 \"On\";"</span>,</div>
|
||||
<div class="line"><a id="l00842" name="l00842"></a><span class="lineno"> 842</span> <span class="stringliteral">"VAL_ 1 State 0 \"Off\" 00 \"Duplicate\";"</span>,</div>
|
||||
<div class="line"><a id="l00843" name="l00843"></a><span class="lineno"> 843</span> <span class="stringliteral">"VAL_ 1 State 0 \"Off\" -0 \"Duplicate\";"</span>,</div>
|
||||
<div class="line"><a id="l00844" name="l00844"></a><span class="lineno"> 844</span> <span class="stringliteral">"VAL_ 1 State 0 \"Off\";\nVAL_ 1 State 0 \"Duplicate\";"</span>,</div>
|
||||
<div class="line"><a id="l00845" name="l00845"></a><span class="lineno"> 845</span> <span class="stringliteral">"VAL_ 2 State 0 \"Missing frame\";"</span>, <span class="stringliteral">"VAL_ 1 Missing 0 \"Missing signal\";"</span>,</div>
|
||||
<div class="line"><a id="l00846" name="l00846"></a><span class="lineno"> 846</span> <span class="stringliteral">"VAL_ -1 State 0 \"Bad ID\";"</span>, <span class="stringliteral">"VAL_ 536870912 State 0 \"Bad ID\";"</span>,</div>
|
||||
<div class="line"><a id="l00847" name="l00847"></a><span class="lineno"> 847</span> <span class="stringliteral">"VAL_ 4294967296 State 0 \"Bad ID\";"</span>, <span class="stringliteral">"VAL_ Environment 0 \"Unsupported\";"</span>,</div>
|
||||
<div class="line"><a id="l00848" name="l00848"></a><span class="lineno"> 848</span> <span class="stringliteral">"VAL_ 1 State 0 \"Bad\\q escape\";"</span>}) {</div>
|
||||
<div class="line"><a id="l00849" name="l00849"></a><span class="lineno"> 849</span> fixture.Write(definitions + statement + <span class="charliteral">'\n'</span>);</div>
|
||||
<div class="line"><a id="l00850" name="l00850"></a><span class="lineno"> 850</span> <span class="keyword">const</span> <span class="keywordtype">int</span> line = statement.find(<span class="charliteral">'\n'</span>) == std::string::npos ? 3 : 4;</div>
|
||||
<div class="line"><a id="l00851" name="l00851"></a><span class="lineno"> 851</span> <span class="keywordflow">try</span> {</div>
|
||||
<div class="line"><a id="l00852" name="l00852"></a><span class="lineno"> 852</span> <a class="code hl_class" href="classDbcParser.html">DbcParser</a>().<a class="code hl_function" href="classDbcParser.html#aef72826942c9095d653fafa435855e56">ParseFile</a>(fixture.path.string());</div>
|
||||
<div class="line"><a id="l00853" name="l00853"></a><span class="lineno"> 853</span> CHECK(<span class="keyword">false</span>, statement);</div>
|
||||
<div class="line"><a id="l00854" name="l00854"></a><span class="lineno"> 854</span> } <span class="keywordflow">catch</span> (<span class="keyword">const</span> std::runtime_error &error) {</div>
|
||||
<div class="line"><a id="l00855" name="l00855"></a><span class="lineno"> 855</span> CHECK(std::string(error.what()).find(fixture.path.string() + <span class="stringliteral">":"</span> + std::to_string(line) + <span class="stringliteral">": "</span>) == 0,</div>
|
||||
<div class="line"><a id="l00856" name="l00856"></a><span class="lineno"> 856</span> statement + <span class="stringliteral">" "</span> + error.what());</div>
|
||||
<div class="line"><a id="l00857" name="l00857"></a><span class="lineno"> 857</span> }</div>
|
||||
<div class="line"><a id="l00858" name="l00858"></a><span class="lineno"> 858</span> }</div>
|
||||
<div class="line"><a id="l00859" name="l00859"></a><span class="lineno"> 859</span> <span class="keywordflow">for</span> (<span class="keyword">const</span> std::string suffix: {</div>
|
||||
<div class="line"><a id="l00860" name="l00860"></a><span class="lineno"> 860</span> <span class="stringliteral">"BO_ 1 Other: 8 ECU\n"</span>, <span class="comment">// Duplicate frame definition.</span></div>
|
||||
<div class="line"><a id="l00861" name="l00861"></a><span class="lineno"> 861</span> <span class="stringliteral">"SG_ State : 0|8@1+ (1,0) [0|255] \"\" ECU\n"</span>,<span class="comment">// Duplicate signal definition.</span></div>
|
||||
<div class="line"><a id="l00862" name="l00862"></a><span class="lineno"> 862</span> <span class="stringliteral">""</span>}) {</div>
|
||||
<div class="line"><a id="l00863" name="l00863"></a><span class="lineno"> 863</span> fixture.Write(<span class="stringliteral">"VAL_ 1 "</span> + std::string(suffix.empty() ? <span class="stringliteral">"Missing"</span> : <span class="stringliteral">"State"</span>) +</div>
|
||||
<div class="line"><a id="l00864" name="l00864"></a><span class="lineno"> 864</span> <span class="stringliteral">" 0 \"Description\";\n"</span> + definitions + suffix);</div>
|
||||
<div class="line"><a id="l00865" name="l00865"></a><span class="lineno"> 865</span> <span class="keywordflow">try</span> {</div>
|
||||
<div class="line"><a id="l00866" name="l00866"></a><span class="lineno"> 866</span> <a class="code hl_class" href="classDbcParser.html">DbcParser</a>().<a class="code hl_function" href="classDbcParser.html#aef72826942c9095d653fafa435855e56">ParseFile</a>(fixture.path.string());</div>
|
||||
<div class="line"><a id="l00867" name="l00867"></a><span class="lineno"> 867</span> CHECK(<span class="keyword">false</span>, <span class="stringliteral">"Missing reference or duplicate definition"</span>);</div>
|
||||
<div class="line"><a id="l00868" name="l00868"></a><span class="lineno"> 868</span> } <span class="keywordflow">catch</span> (<span class="keyword">const</span> std::runtime_error &error) {</div>
|
||||
<div class="line"><a id="l00869" name="l00869"></a><span class="lineno"> 869</span> <span class="keyword">const</span> std::string line = suffix.empty() ? <span class="stringliteral">"1"</span> : <span class="stringliteral">"4"</span>;</div>
|
||||
<div class="line"><a id="l00870" name="l00870"></a><span class="lineno"> 870</span> CHECK(std::string(error.what()).find(fixture.path.string() + <span class="stringliteral">":"</span> + line + <span class="stringliteral">": "</span>) == 0,</div>
|
||||
<div class="line"><a id="l00871" name="l00871"></a><span class="lineno"> 871</span> <span class="stringliteral">"Error retains the reference or duplicate definition source location"</span>);</div>
|
||||
<div class="line"><a id="l00872" name="l00872"></a><span class="lineno"> 872</span> }</div>
|
||||
<div class="line"><a id="l00873" name="l00873"></a><span class="lineno"> 873</span> }</div>
|
||||
<div class="line"><a id="l00874" name="l00874"></a><span class="lineno"> 874</span> <span class="keywordflow">for</span> (<span class="keyword">const</span> std::string number: {<span class="stringliteral">"+1"</span>, <span class="stringliteral">"1x"</span>, <span class="stringliteral">"0x10"</span>, <span class="stringliteral">"1.5"</span>, <span class="stringliteral">"1e2"</span>, <span class="stringliteral">"--1"</span>,</div>
|
||||
<div class="line"><a id="l00875" name="l00875"></a><span class="lineno"> 875</span> <span class="stringliteral">"-9223372036854775809"</span>, <span class="stringliteral">"18446744073709551616"</span>}) {</div>
|
||||
<div class="line"><a id="l00876" name="l00876"></a><span class="lineno"> 876</span> fixture.Write(<span class="stringliteral">"VAL_ 1 State "</span> + number + <span class="stringliteral">" \"Bad\";\n"</span> + definitions);</div>
|
||||
<div class="line"><a id="l00877" name="l00877"></a><span class="lineno"> 877</span> <span class="keywordflow">try</span> {</div>
|
||||
<div class="line"><a id="l00878" name="l00878"></a><span class="lineno"> 878</span> <a class="code hl_class" href="classDbcParser.html">DbcParser</a>().<a class="code hl_function" href="classDbcParser.html#aef72826942c9095d653fafa435855e56">ParseFile</a>(fixture.path.string());</div>
|
||||
<div class="line"><a id="l00879" name="l00879"></a><span class="lineno"> 879</span> CHECK(<span class="keyword">false</span>, number);</div>
|
||||
<div class="line"><a id="l00880" name="l00880"></a><span class="lineno"> 880</span> } <span class="keywordflow">catch</span> (<span class="keyword">const</span> std::runtime_error &error) {</div>
|
||||
<div class="line"><a id="l00881" name="l00881"></a><span class="lineno"> 881</span> CHECK(std::string(error.what()).find(fixture.path.string() + <span class="stringliteral">":1: "</span>) == 0, number);</div>
|
||||
<div class="line"><a id="l00882" name="l00882"></a><span class="lineno"> 882</span> }</div>
|
||||
<div class="line"><a id="l00883" name="l00883"></a><span class="lineno"> 883</span> }</div>
|
||||
<div class="line"><a id="l00884" name="l00884"></a><span class="lineno"> 884</span>}</div>
|
||||
<div class="line"><a id="l00885" name="l00885"></a><span class="lineno"> 885</span> </div>
|
||||
<div class="line"><a id="l00886" name="l00886"></a><span class="lineno"> 886</span><span class="keywordtype">int</span> RunParserTests(<span class="keywordtype">int</span> argc, <span class="keywordtype">char</span> **argv) {</div>
|
||||
<div class="line"><a id="l00887" name="l00887"></a><span class="lineno"> 887</span> DbcParserTest tests;</div>
|
||||
<div class="line"><a id="l00888" name="l00888"></a><span class="lineno"> 888</span> <span class="keywordflow">return</span> QTest::qExec(&tests, argc, argv);</div>
|
||||
<div class="line"><a id="l00889" name="l00889"></a><span class="lineno"> 889</span>}</div>
|
||||
<div class="line"><a id="l00890" name="l00890"></a><span class="lineno"> 890</span> </div>
|
||||
<div class="line"><a id="l00891" name="l00891"></a><span class="lineno"> 891</span><span class="preprocessor">#include "dbc_parser_test.moc"</span></div>
|
||||
<div class="ttc" id="aclassDbcDecodeBuilder_html"><div class="ttname"><a href="classDbcDecodeBuilder.html">DbcDecodeBuilder</a></div><div class="ttdoc">Converts parsed DBC data into runtime decode database.</div><div class="ttdef"><b>Definition</b> <a href="dbc__decode__builder_8h_source.html#l00021">dbc_decode_builder.h:21</a></div></div>
|
||||
<div class="ttc" id="aclassDbcDecodeBuilder_html_a2bc6386dfb5e58976c42e22c19ec471b"><div class="ttname"><a href="classDbcDecodeBuilder.html#a2bc6386dfb5e58976c42e22c19ec471b">DbcDecodeBuilder::Build</a></div><div class="ttdeci">DecodeDatabase Build(const DbcDatabase &source) const</div><div class="ttdoc">Build runtime decode database.</div><div class="ttdef"><b>Definition</b> <a href="dbc__decode__builder_8cpp_source.html#l00015">dbc_decode_builder.cpp:15</a></div></div>
|
||||
<div class="ttc" id="aclassDbcDecoder_html"><div class="ttname"><a href="classDbcDecoder.html">DbcDecoder</a></div><div class="ttdoc">Runtime CAN decoder using prebuilt decode database.</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8h_source.html#l00084">dbc_decoder.h:84</a></div></div>
|
||||
<div class="ttc" id="aclassDbcDecoder_html_a345951ffe5d943a70d3a1ea1f39e74f7"><div class="ttname"><a href="classDbcDecoder.html#a345951ffe5d943a70d3a1ea1f39e74f7">DbcDecoder::Decode</a></div><div class="ttdeci">DecodedFrameValue Decode(const DecodeDatabase &database, const RawCanFrame &frame) const</div><div class="ttdoc">Decode one raw CAN frame.</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8cpp_source.html#l00022">dbc_decoder.cpp:22</a></div></div>
|
||||
<div class="ttc" id="aclassDbcDecoder_html_a345951ffe5d943a70d3a1ea1f39e74f7"><div class="ttname"><a href="classDbcDecoder.html#a345951ffe5d943a70d3a1ea1f39e74f7">DbcDecoder::Decode</a></div><div class="ttdeci">DecodedFrameValue Decode(const DecodeDatabase &database, const RawCanFrame &frame) const</div><div class="ttdoc">Decode one raw CAN frame.</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8cpp_source.html#l00023">dbc_decoder.cpp:23</a></div></div>
|
||||
<div class="ttc" id="aclassDbcParser_html"><div class="ttname"><a href="classDbcParser.html">DbcParser</a></div><div class="ttdoc">Minimal DBC parser.</div><div class="ttdef"><b>Definition</b> <a href="dbc__parser_8h_source.html#l00033">dbc_parser.h:33</a></div></div>
|
||||
<div class="ttc" id="aclassDbcParser_html_a0e915ce79c2e3d4c95a5aaf2bf0409bc"><div class="ttname"><a href="classDbcParser.html#a0e915ce79c2e3d4c95a5aaf2bf0409bc">DbcParser::ParseFileWithDiagnostics</a></div><div class="ttdeci">DbcParseResult ParseFileWithDiagnostics(const std::string &filePath) const</div><div class="ttdoc">Parse with warnings and a structured first error instead of throwing.</div><div class="ttdef"><b>Definition</b> <a href="dbc__parser_8cpp_source.html#l00044">dbc_parser.cpp:44</a></div></div>
|
||||
<div class="ttc" id="aclassDbcParser_html_aef72826942c9095d653fafa435855e56"><div class="ttname"><a href="classDbcParser.html#aef72826942c9095d653fafa435855e56">DbcParser::ParseFile</a></div><div class="ttdeci">DbcDatabase ParseFile(const std::string &filePath) const</div><div class="ttdoc">Parse DBC file.</div><div class="ttdef"><b>Definition</b> <a href="dbc__parser_8cpp_source.html#l00031">dbc_parser.cpp:31</a></div></div>
|
||||
<div class="ttc" id="aclassDbcStatementDispatcher_html"><div class="ttname"><a href="classDbcStatementDispatcher.html">DbcStatementDispatcher</a></div><div class="ttdef"><b>Definition</b> <a href="dbc__statement__handler_8h_source.html#l00091">dbc_statement_handler.h:91</a></div></div>
|
||||
<div class="ttc" id="aclassDbcStatementDispatcher_html_a495c2d5c7ebb8103b1987cdd87c142ed"><div class="ttname"><a href="classDbcStatementDispatcher.html#a495c2d5c7ebb8103b1987cdd87c142ed">DbcStatementDispatcher::Dispatch</a></div><div class="ttdeci">bool Dispatch(const std::string &line, DbcParseContext &context) const</div><div class="ttdef"><b>Definition</b> <a href="dbc__statement__handler_8cpp_source.html#l00391">dbc_statement_handler.cpp:391</a></div></div>
|
||||
<div class="ttc" id="aclassDbcStatementDispatcher_html_a495c2d5c7ebb8103b1987cdd87c142ed"><div class="ttname"><a href="classDbcStatementDispatcher.html#a495c2d5c7ebb8103b1987cdd87c142ed">DbcStatementDispatcher::Dispatch</a></div><div class="ttdeci">bool Dispatch(const std::string &line, DbcParseContext &context) const</div><div class="ttdef"><b>Definition</b> <a href="dbc__statement__handler_8cpp_source.html#l00388">dbc_statement_handler.cpp:388</a></div></div>
|
||||
<div class="ttc" id="aclassDbcStatementHandler_html"><div class="ttname"><a href="classDbcStatementHandler.html">DbcStatementHandler</a></div><div class="ttdef"><b>Definition</b> <a href="dbc__statement__handler_8h_source.html#l00044">dbc_statement_handler.h:44</a></div></div>
|
||||
<div class="ttc" id="aclassDbcTreeBuilder_html"><div class="ttname"><a href="classDbcTreeBuilder.html">DbcTreeBuilder</a></div><div class="ttdoc">Builds a simple tree from parsed DBC database.</div><div class="ttdef"><b>Definition</b> <a href="dbc__tree__builder_8h_source.html#l00023">dbc_tree_builder.h:23</a></div></div>
|
||||
<div class="ttc" id="aclassDbcTreeBuilder_html_a7e57d067d831b14b383947fd125edd4b"><div class="ttname"><a href="classDbcTreeBuilder.html#a7e57d067d831b14b383947fd125edd4b">DbcTreeBuilder::Build</a></div><div class="ttdeci">std::unique_ptr< TreeNode > Build(const DbcDatabase &database) const</div><div class="ttdoc">Build tree representation of parsed DBC data.</div><div class="ttdef"><b>Definition</b> <a href="dbc__tree__builder_8cpp_source.html#l00014">dbc_tree_builder.cpp:14</a></div></div>
|
||||
<div class="ttc" id="aclassDecodeDatabase_html"><div class="ttname"><a href="classDecodeDatabase.html">DecodeDatabase</a></div><div class="ttdoc">Immutable runtime snapshot. Copies share storage; reload replaces a snapshot. Owning lookup handles a...</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00087">decode_database.h:87</a></div></div>
|
||||
<div class="ttc" id="aclassDecodeDatabase_html_aa034c1510984a85f60ad6c0bd744d6e8"><div class="ttname"><a href="classDecodeDatabase.html#aa034c1510984a85f60ad6c0bd744d6e8">DecodeDatabase::GetFrames</a></div><div class="ttdeci">const std::vector< DecodeFrame > & GetFrames() const</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8cpp_source.html#l00028">decode_database.cpp:28</a></div></div>
|
||||
<div class="ttc" id="aclassDecodeDatabase_html_aa034c1510984a85f60ad6c0bd744d6e8"><div class="ttname"><a href="classDecodeDatabase.html#aa034c1510984a85f60ad6c0bd744d6e8">DecodeDatabase::GetFrames</a></div><div class="ttdeci">const std::vector< DecodeFrame > & GetFrames() const</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8cpp_source.html#l00105">decode_database.cpp:105</a></div></div>
|
||||
<div class="ttc" id="adbc__decode__builder_8h_html"><div class="ttname"><a href="dbc__decode__builder_8h.html">dbc_decode_builder.h</a></div><div class="ttdoc">Created: 2026-03-13 Author: Deeaitch (Dim. Himro)</div></div>
|
||||
<div class="ttc" id="adbc__decoder_8h_html"><div class="ttname"><a href="dbc__decoder_8h.html">dbc_decoder.h</a></div><div class="ttdoc">Created: 2026-03-13 Author: Deeaitch (Dim. Himro)</div></div>
|
||||
<div class="ttc" id="adbc__parser_8h_html"><div class="ttname"><a href="dbc__parser_8h.html">dbc_parser.h</a></div><div class="ttdoc">Created: 2026-03-13 Author: Deeaitch (Dim. Himro)</div></div>
|
||||
|
||||
Reference in new issue
Block a user