22#include " defines.hpp"
33#include < libdbc/dbc.hpp>
44
5+ void create_tmp_dbc_with (const char * filename, const char * content)
6+ {
7+ auto * file = std::fopen (filename, " w" );
8+ CHECK (file);
9+
10+ std::fputs (PRIMITIVE_DBC.c_str (), file);
11+ std::fputs (content, file);
12+ std::fclose (file);
13+ }
14+
15+
516TEST_CASE (" Testing dbc file loading error issues" , " [fileio][error]" ) {
617 auto parser = std::unique_ptr<libdbc::DbcParser>(new libdbc::DbcParser ());
718
@@ -58,4 +69,68 @@ TEST_CASE("Testing dbc file loading", "[fileio]") {
5869 REQUIRE (parser->get_messages ().front ().signals == msg.signals );
5970 }
6071
61- }
72+ }
73+
74+ TEST_CASE (" Testing negative values" ) {
75+ const auto * filename = std::tmpnam (NULL );
76+
77+ create_tmp_dbc_with (filename, R"( BO_ 234 MSG1: 8 Vector__XXX
78+ SG_ Sig1 : 55|16@0- (0.1,0) [-3276.8|-3276.7] "C" Vector__XXX
79+ SG_ Sig2 : 39|16@0- (0.1,0) [-3276.8|-3276.7] "C" Vector__XXX
80+ SG_ Sig3 : 23|16@0- (10,0) [-3276.8|-3276.7] "C" Vector__XXX
81+ SG_ Sig4 : 7|16@0- (1,-10) [0|32767] "" Vector__XXX)" );
82+
83+ auto parser = libdbc::DbcParser ();
84+ parser.parse_file (std::string (filename));
85+
86+ REQUIRE (parser.get_messages ().size () == 1 );
87+ REQUIRE (parser.get_messages ().at (0 ).signals .size () == 4 );
88+
89+ SECTION (" Evaluating first message" ) {
90+ const auto signal = parser.get_messages ().at (0 ).signals .at (0 );
91+ REQUIRE (signal.factor == 0.1 );
92+ REQUIRE (signal.offset == 0 );
93+ REQUIRE (signal.min == -3276.8 );
94+ REQUIRE (signal.max == -3276.7 );
95+ }
96+ SECTION (" Evaluating second message" ) {
97+ const auto signal = parser.get_messages ().at (0 ).signals .at (1 );
98+ REQUIRE (signal.factor == 0.1 );
99+ REQUIRE (signal.offset == 0 );
100+ REQUIRE (signal.min == -3276.8 );
101+ REQUIRE (signal.max == -3276.7 );
102+ }
103+ SECTION (" Evaluating third message" ){
104+ const auto signal = parser.get_messages ().at (0 ).signals .at (2 );
105+ REQUIRE (signal.factor == 10 );
106+ REQUIRE (signal.offset == 0 );
107+ REQUIRE (signal.min == -3276.8 );
108+ REQUIRE (signal.max == -3276.7 );
109+ }
110+ SECTION (" Evaluating fourth message" ){
111+ const auto signal = parser.get_messages ().at (0 ).signals .at (3 );
112+ REQUIRE (signal.factor == 1 );
113+ REQUIRE (signal.offset == -10 );
114+ REQUIRE (signal.min == 0 );
115+ REQUIRE (signal.max == 32767 );
116+ }
117+ }
118+
119+
120+ TEST_CASE (" Special characters in unit" ) {
121+ const auto * filename = std::tmpnam (NULL );
122+
123+ create_tmp_dbc_with (filename, R"( BO_ 234 MSG1: 8 Vector__XXX
124+ SG_ Speed : 0|8@1+ (1,0) [0|204] "Km/h" DEVICE1,DEVICE2,DEVICE3)" );
125+
126+
127+ auto parser = libdbc::DbcParser ();
128+ parser.parse_file (std::string (filename));
129+
130+ REQUIRE (parser.get_messages ().size () == 1 );
131+ REQUIRE (parser.get_messages ().at (0 ).signals .size () == 1 );
132+ SECTION (" Checking that signal with special characters as unit is parsed correctly" ) {
133+ const auto signal = parser.get_messages ().at (0 ).signals .at (0 );
134+ REQUIRE (signal.unit .compare (" Km/h" ) == 0 );
135+ }
136+ }
0 commit comments