@@ -18,28 +18,36 @@ class Model : public fmu4cpp::fmu_base {
1818 FMU4CPP_CTOR (Model) {
1919
2020 register_variable (binary (" binaryIn" , &binaryIn_).setCausality (fmu4cpp::causality_t ::INPUT));
21- register_variable (real (" numberOut" , &numberOut_).setCausality (fmu4cpp::causality_t ::OUTPUT));
21+ register_variable (real (" realOut" , &realOut_).setCausality (fmu4cpp::causality_t ::OUTPUT));
22+ register_variable (integer (" integerOut" , &integerOut_).setCausality (fmu4cpp::causality_t ::OUTPUT));
23+ register_variable (string (" stringOut" , &stringOut_).setCausality (fmu4cpp::causality_t ::OUTPUT));
2224
2325 Model::reset ();
2426 }
2527
2628 bool do_step (double dt) override {
2729
28- std::cout << binaryIn_ << std::endl;
2930 nlohmann::json j = nlohmann::json::from_msgpack (binaryIn_);
30- numberOut_ = j[" number" ];
31+ realOut_ = j[" real" ];
32+ integerOut_ = j[" integer" ];
33+ stringOut_ = j[" string" ];
3134
3235 return true ;
3336 }
3437
3538 void reset () override {
36- binaryIn_ = " " ;
37- numberOut_ = 0 ;
39+ binaryIn_ = {};
40+ realOut_ = 0 ;
41+ integerOut_ = 0 ;
42+ stringOut_ = " empty" ;
3843 }
3944
4045private:
41- std::string binaryIn_;
42- double numberOut_;
46+ std::vector<uint8_t > binaryIn_;
47+
48+ double realOut_;
49+ int integerOut_;
50+ std::string stringOut_;
4351};
4452
4553fmu4cpp::model_info fmu4cpp::get_model_info () {
@@ -70,10 +78,14 @@ TEST_CASE("test_binary") {
7078 REQUIRE (fmi3EnterInitializationMode (c, false , 0 , 0 , false , 0 ) == fmi3OK);
7179 REQUIRE (fmi3ExitInitializationMode (c) == fmi3OK);
7280
73- double numberIn = 3.9 ;
81+ double realIn = 3.9 ;
82+ int integerIn = 42 ;
83+ std::string stringIn = " hello" ;
7484
7585 nlohmann::json j;
76- j[" number" ] = numberIn;
86+ j[" real" ] = realIn;
87+ j[" integer" ] = integerIn;
88+ j[" string" ] = stringIn;
7789
7890 const auto data = nlohmann::json::to_msgpack (j);
7991 const uint8_t *binaryPtr = data.data ();
@@ -95,15 +107,24 @@ TEST_CASE("test_binary") {
95107 bool terminateSimulation;
96108 bool earlyReturn;
97109 double lastSucessfulTime;
98-
99110 REQUIRE (fmi3DoStep (c, 0 , 0.1 , true , &eventhandlingNeeded, &terminateSimulation, &earlyReturn, &lastSucessfulTime) == fmi3OK);
100111
101112
102- fmi3ValueReference outVr = 2 ;
103- double numberOut;
104- fmi3GetFloat64 (c, &outVr, 1 , &numberOut, 1 );
113+ double realOut;
114+ fmi3ValueReference realVr = 2 ;
115+ CHECK (fmi3GetFloat64 (c, &realVr, 1 , &realOut, 1 ) == fmi3OK);
116+
117+ int integerOut;
118+ fmi3ValueReference integerVr = 3 ;
119+ CHECK (fmi3GetInt32 (c, &integerVr, 1 , &integerOut, 1 ) == fmi3OK);
120+
121+ fmi3String stringOut;
122+ fmi3ValueReference stringVr = 4 ;
123+ CHECK (fmi3GetString (c, &stringVr, 1 , &stringOut, 1 ) == fmi3OK);
105124
106- CHECK (numberOut == Catch::Approx (3.9 ));
125+ CHECK (realOut == Catch::Approx (realIn));
126+ CHECK (integerOut == integerIn);
127+ CHECK (stringOut == stringIn);
107128
108129 REQUIRE (fmi3Terminate (c) == fmi3OK);
109130
0 commit comments