88
99// Testing of parsing messages
1010
11- TEST_CASE (" Parse Message 1 Big Endian" ) {
12- libdbc::DbcParser parser;
13-
14- const auto dbcContent = R"( BO_ 234 MSG1: 8 Vector__XXX
15- SG_ Sig1 : 0|8@0- (0.1,-3) [-3276.8|-3276.7] "C" Vector__XXX
16- SG_ Sig2 : 8|8@0- (0.15,7) [-3276.8|-3276.7] "C" Vector__XXX
17- )" ;
18-
19- const auto * filename = std::tmpnam (NULL );
20- CHECK (create_tmp_dbc_with (filename, dbcContent));
21-
22- parser.parse_file (filename);
23-
24- SECTION (" Evaluating first message" ) {
25- std::vector<double > out_values;
26- CHECK (parser.parseMessage (234 , std::vector<uint8_t >({0x01 , 0x02 }), out_values) == libdbc::Message::ParseSignalsStatus::ErrorBigEndian);
27- // Big endian not supported
28- // CHECK(out_values.size() == 2);
29- // CHECK(out_values.at(0) == 0x01 * 0.1 - 3);
30- // CHECK(out_values.at(1) == 0x02 * 0.15 + 7);
31- }
32-
33- }
34-
35- TEST_CASE (" Parse Message 2 Big Endian" ) {
11+ TEST_CASE (" Parse Message Unknown ID" ) {
3612 libdbc::DbcParser parser;
3713
3814 const auto dbcContent = R"( BO_ 234 MSG1: 8 Vector__XXX
@@ -48,18 +24,6 @@ BO_ 123 MSG2: 8 Vector__XXX
4824
4925 parser.parse_file (filename);
5026
51- SECTION (" Evaluating first message" ) {
52- std::vector<double > out_values;
53- CHECK (parser.parseMessage (234 , std::vector<uint8_t >({0x01 , 0x02 }), out_values) == libdbc::Message::ParseSignalsStatus::ErrorBigEndian);
54- // Big endian not supported
55- // std::vector<double> refData{0x01, 0x02};
56- // CHECK(refData.size() == 2);
57- // CHECK(out_values.size() == refData.size());
58- // for (int i=0; i < refData.size(); i++) {
59- // CHECK(out_values.at(i) == refData.at(i));
60- // }
61- }
62-
6327 SECTION (" Evaluating unknown message id" ) {
6428 std::vector<double > out_values;
6529 CHECK (parser.parseMessage (578 , std::vector<uint8_t >({0xFF , 0xA2 }), out_values) == libdbc::Message::ParseSignalsStatus::ErrorUnknownID);
@@ -130,38 +94,51 @@ TEST_CASE("Parse Message little endian") {
13094
13195 libdbc::DbcParser p;
13296 p.parse_file (filename);
133- p.sortSignals ();
13497
13598 std::vector<uint8_t > data{0x08 , 0x27 , 0xa3 , 0x22 , 0xe5 , 0x1f , 0x45 , 0x14 }; // little endian
13699 std::vector<double > result_values;
137100 REQUIRE (p.parseMessage (0x21d , data, result_values) == libdbc::Message::ParseSignalsStatus::Success);
138101 REQUIRE (result_values.size () == 4 );
139- REQUIRE (Catch::Approx (result_values.at (0 )) == 99.92 );
140- REQUIRE (Catch::Approx (result_values.at (1 )) == 88.67 );
102+
103+ REQUIRE (Catch::Approx (result_values.at (0 )) == 11.89 );
104+ REQUIRE (Catch::Approx (result_values.at (1 )) == 99.92 );
141105 REQUIRE (Catch::Approx (result_values.at (2 )) == 81.65 );
142- REQUIRE (Catch::Approx (result_values.at (3 )) == 11.89 );
106+ REQUIRE (Catch::Approx (result_values.at (3 )) == 88.67 );
143107}
144108
145- TEST_CASE (" Parse Message big endian" ) {
109+ TEST_CASE (" Parse Message big endian signed values " ) {
146110 const auto * filename = std::tmpnam (NULL );
147- create_tmp_dbc_with (filename, R"( BO_ 541 STATUS: 8 DEVICE1
148- SG_ Temperature : 48|16@0+ (0.01,-40) [-40|125] "C" DEVICE1
149- SG_ SOH : 0|16@0+ (0.01,0) [0|100] "%" DEVICE1
150- SG_ SOE : 32|16@0+ (0.01,0) [0|100] "%" DEVICE1
151- SG_ SOC : 16|16@0+ (0.01,0) [0|100] "%" DEVICE1)" );
111+ create_tmp_dbc_with (filename, R"( BO_ 545 MSG: 8 BMS2
112+ SG_ Sig1 : 62|1@0+ (1,0) [0|0] "" Vector__XXX
113+ SG_ Sig2 : 49|2@0+ (1,0) [0|0] "" Vector__XXX
114+ SG_ Sig3 : 39|16@0- (0.1,0) [0|0] "A" Vector__XXX
115+ SG_ Sig4 : 60|1@0+ (1,0) [0|0] "" Vector__XXX
116+ SG_ Sig5 : 55|1@0+ (1,0) [0|0] "" Vector__XXX
117+ SG_ Sig6 : 58|1@0+ (1,0) [0|0] "" Vector__XXX
118+ SG_ Sig7 : 59|1@0+ (1,0) [0|0] "" Vector__XXX
119+ SG_ Sig8 : 57|1@0+ (1,0) [0|0] "" Vector__XXX
120+ SG_ Sig9 : 56|1@0+ (1,0) [0|0] "" Vector__XXX
121+ SG_ Sig10 : 61|1@0+ (1,0) [0|0] "" Vector__XXX
122+ SG_ Sig11 : 7|16@0+ (0.001,0) [0|65.535] "V" Vector__XXX
123+ SG_ Sig12 : 23|16@0+ (0.1,0) [0|6553.5] "A" Vector__XXX)" );
152124
153125 libdbc::DbcParser p;
154126 p.parse_file (filename);
155127
156- std::vector<uint8_t > data{0x27 , 0x08 , 0x22 , 0xa3 , 0x1f , 0xe5 , 0x14 , 0x45 }; // big endian
128+ std::vector<uint8_t > data{13 , 177 , 0 , 216 , 251 , 180 , 0 , 31 }; // big endian
157129 std::vector<double > result_values;
158- REQUIRE (p.parseMessage (0x21d , data, result_values) == libdbc::Message::ParseSignalsStatus::ErrorBigEndian);
159- // Big endian not yet supported
160- // REQUIRE(result_values.size() == 4);
161- // REQUIRE(Catch::Approx(result_values.at(0)) == 99.92);
162- // REQUIRE(Catch::Approx(result_values.at(1)) == 88.67);
163- // REQUIRE(Catch::Approx(result_values.at(2)) == 81.65);
164- // REQUIRE(Catch::Approx(result_values.at(3)) == 11.89);
130+ REQUIRE (p.parseMessage (545 , data, result_values) == libdbc::Message::ParseSignalsStatus::Success);
131+ REQUIRE (result_values.size () == 12 );
132+ REQUIRE (Catch::Approx (result_values.at (0 )) == 0 );
133+ REQUIRE (Catch::Approx (result_values.at (1 )) == 0 );
134+ REQUIRE (Catch::Approx (result_values.at (2 )) == -110 );
135+ REQUIRE (Catch::Approx (result_values.at (3 )) == 1 );
136+ REQUIRE (Catch::Approx (result_values.at (4 )) == 0 );
137+ REQUIRE (Catch::Approx (result_values.at (5 )) == 1 );
138+ REQUIRE (Catch::Approx (result_values.at (6 )) == 1 );
139+ REQUIRE (Catch::Approx (result_values.at (7 )) == 1 );
140+ REQUIRE (Catch::Approx (result_values.at (8 )) == 1 );
141+ REQUIRE (Catch::Approx (result_values.at (9 )) == 0 );
142+ REQUIRE (Catch::Approx (result_values.at (10 )) == 3.5050 );
143+ REQUIRE (Catch::Approx (result_values.at (11 )) == 21.6 );
165144}
166-
167- // TODO: create also for big endian!
0 commit comments