23 #include "config_test.h" 30 #include <FMI1/fmi1_capi.h> 34 #define MODEL_IDENTIFIER FMU_DUMMY_ME_MODEL_IDENTIFIER 37 #define INSTANCE_NAME "Test Model" 44 printf(
"module = %s, log level = %d: %s\n", module, log_level, message);
48 void fmilogger(fmi1_component_t
c, fmi1_string_t instanceName,
fmi1_status_t status, fmi1_string_t category, fmi1_string_t message, ...)
53 va_start(argp, message);
55 printf(
"fmiStatus = %d; %s (%s): %s\n", status, instanceName, category, msg);
57 printf(
"Warning: Message was truncated");
64 printf(
"Press any key to exit\n");
82 callbacks->
malloc = malloc;
83 callbacks->
calloc = calloc;
85 callbacks->
free = free;
93 printf(
"fmi1_capi_create_dllfmu: ");
96 printf(
"An error occured while fmi1_capi_create_dllfmu was called, an error message should been printed.\n");
112 printf(
"fmi1_capi_load_dll: ");
113 status = fmi1_capi_load_dll(
fmu);
115 printf(
"Error in fmi1_capi_load_dll: %s\n",
"fmi1_capi_get_last_error(fmu)");
131 printf(
"fmi1_capi_load_fcn: ");
132 status = fmi1_capi_load_fcn(
fmu);
135 printf(
"Error in fmi1_capi_load_fcn: %s\n",
"fmi1_capi_get_last_error(fmu)");
149 const char* version = fmi1_capi_get_version(
fmu);
151 printf(
"fmi1_capi_get_version: ");
153 printf(
"Expected \"%s\" but returned \"%s\"",
FMI_VERSION, version);
167 const char* platformtype = fmi1_capi_get_model_types_platform(
fmu);
169 printf(
"fmi1_capi_get_model_types_platform: ");
170 if (strcmp(FMI_PLATFORM_TYPE, platformtype) != 0) {
171 printf(
"Expected \"%s\" but returned \"%s\"", FMI_PLATFORM_TYPE, platformtype);
188 printf(
"fmi1_capi_instantiate_model: Failed\n");
191 printf(
"fmi1_capi_instantiate_model: Success\n");
203 status = fmi1_capi_set_time(
fmu, 0.1);
205 printf(
"fmi1_capi_set_time: Failed\n");
208 printf(
"fmi1_capi_set_time: Success\n");
224 states[k] = (fmi1_real_t)(k + 1) * 12;
227 status = fmi1_capi_set_continuous_states(
fmu, states, N_STATES);
229 printf(
"fmi1_capi_set_continuous_states: Failed\n");
232 printf(
"fmi1_capi_set_continuous_states: Success\n");
235 printf(
"\t x[%d] = %f\n",k, states[k]);
249 fmi1_boolean_t toleranceControlled;
250 fmi1_real_t relativeTolerance;
253 relativeTolerance = 1e-5;
255 status = fmi1_capi_initialize(
fmu, toleranceControlled, relativeTolerance, &eventInfo);
257 printf(
"fmi1_capi_initialize: Failed\n");
260 printf(
"fmi1_capi_initialize: Success\n");
262 printf(
"\t fmiEventInfo.iterationConverged = %s\n", eventInfo.
iterationConverged ?
"True" :
"False");
264 printf(
"\t fmiEventInfo.stateValuesChanged = %s\n", eventInfo.
stateValuesChanged ?
"True" :
"False");
265 printf(
"\t fmiEventInfo.terminateSimulation = %s\n", eventInfo.
terminateSimulation ?
"True" :
"False");
266 printf(
"\t fmiEventInfo.upcomingTimeEvent = %s\n", eventInfo.
upcomingTimeEvent ?
"True" :
"False");
267 printf(
"\t fmiEventInfo.nextEventTime = %f\n", eventInfo.
nextEventTime);
280 fmi1_boolean_t callEventUpdate;
282 status = fmi1_capi_completed_integrator_step(
fmu, &callEventUpdate);
284 printf(
"fmi1_capi_completed_integrator_step: Failed\n");
287 printf(
"fmi1_capi_completed_integrator_step: Success\n");
289 printf(
"\t callEventUpdate = %s\n", callEventUpdate ?
"True" :
"False");
305 status = fmi1_capi_get_derivatives(
fmu, dstates,
N_STATES);
307 printf(
"fmi1_capi_get_derivatives: Failed\n");
310 printf(
"fmi1_capi_get_derivatives: Success\n");
313 printf(
"\t dx[%d] = %f\n", k, dstates[k]);
328 printf(
"fmi1_capi_get_event_indicators: Failed\n");
331 printf(
"fmi1_capi_get_event_indicators: Success\n");
334 printf(
"\t nz[%d] = %f\n",k, zerocrossing[k]);
348 fmi1_boolean_t intermediateResults =
fmi1_false;
351 status = fmi1_capi_eventUpdate(
fmu, intermediateResults, &eventInfo);
353 printf(
"fmi1_capi_eventUpdate: Failed\n");
356 printf(
"fmi1_capi_eventUpdate: Success\n");
358 printf(
"\t fmiEventInfo.iterationConverged = %s\n", eventInfo.
iterationConverged ?
"True" :
"False");
360 printf(
"\t fmiEventInfo.stateValuesChanged = %s\n", eventInfo.
stateValuesChanged ?
"True" :
"False");
361 printf(
"\t fmiEventInfo.terminateSimulation = %s\n", eventInfo.
terminateSimulation ?
"True" :
"False");
362 printf(
"\t fmiEventInfo.upcomingTimeEvent = %s\n", eventInfo.
upcomingTimeEvent ?
"True" :
"False");
363 printf(
"\t fmiEventInfo.nextEventTime = %f\n", eventInfo.
nextEventTime);
379 status = fmi1_capi_get_continuous_states(
fmu, states,
N_STATES);
381 printf(
"fmi1_capi_get_continuous_states: Failed\n");
384 printf(
"fmi1_capi_get_continuous_states: Success\n");
387 printf(
"\t x[%d] = %f\n",k, states[k]);
404 status = fmi1_capi_get_nominal_continuous_states(
fmu, states,
N_STATES);
406 printf(
"fmi1_capi_get_nominal_continuous_states: Failed\n");
409 printf(
"fmi1_capi_get_nominal_continuous_states: Success\n");
412 printf(
"\t x[%d] = %f\n",k, states[k]);
427 fmi1_value_reference_t vrs[
N_STATES];
429 status = fmi1_capi_get_state_value_references(
fmu, vrs,
N_STATES);
431 printf(
"fmi1_capi_get_state_value_references: Failed\n");
434 printf(
"fmi1_capi_get_state_value_references: Success\n");
437 printf(
"\t vrs[%u] = %u\n", k, vrs[k]);
453 printf(
"fmi1_capi_set_debug_logging: Failed\n");
456 printf(
"fmi1_capi_set_debug_logging: Success\n");
468 fmi1_value_reference_t vrs[
N_STRING];
474 vrs[k] = (fmi1_value_reference_t)k;
476 values_ref[k] = values[k];
480 status = fmi1_capi_set_string(
fmu, vrs, N_STRING, values);
482 printf(
"fmi1_capi_set_string: Failed\n");
485 printf(
"fmi1_capi_set_string: Success\n");
489 status = fmi1_capi_get_string(
fmu, vrs, N_STRING, values);
491 printf(
"fmi1_capi_get_string: Failed\n");
495 if (strcmp(values_ref[k], values[k]) != 0) {
496 printf(
"fmi1_capi_get_string returned values[%u] = \"%s\" expected \"%s\"\n", (
unsigned)k, values[k], values_ref[k]);
500 printf(
"fmi1_capi_get_string: Success\n");
519 vrs[k] = (fmi1_value_reference_t)k;
520 values[k] = (k + 1) * 12;
521 values_ref[k] = values[k];
525 status = fmi1_capi_set_integer(
fmu, vrs, N_INTEGER, values);
527 printf(
"fmi1_capi_set_integer: Failed\n");
530 printf(
"fmi1_capi_set_integer: Success\n");
534 status = fmi1_capi_get_integer(
fmu, vrs, N_INTEGER, values);
536 printf(
"fmi1_capi_get_integer: Failed\n");
540 if (values_ref[k] != values[k]) {
541 printf(
"fmi1_capi_get_integer returned values[%d] = \"%d\" expected \"%d\"\n", k, values[k], values_ref[k]);
545 printf(
"fmi1_capi_get_integer: Success\n");
564 vrs[k] = (fmi1_value_reference_t)k;
566 values_ref[k] = values[k];
570 status = fmi1_capi_set_boolean(
fmu, vrs,
N_BOOLEAN, values);
572 printf(
"fmi1_capi_set_boolean: Failed\n");
575 printf(
"fmi1_capi_set_boolean: Success\n");
579 status = fmi1_capi_get_boolean(
fmu, vrs,
N_BOOLEAN, values);
581 printf(
"fmi1_capi_get_boolean: Failed\n");
585 if (values_ref[k] != values[k]) {
586 printf(
"fmi1_capi_get_boolean returned values[%u] = \"%s\" expected \"%s\"\n", (
unsigned)k, values[k] ?
"fmiTrue" :
"fmiFalse", values_ref[k] ?
"fmiTrue" :
"fmiFalse");
590 printf(
"fmi1_capi_get_boolean: Success\n");
603 fmi1_value_reference_t vrs[
N_REAL];
604 fmi1_real_t values[
N_REAL];
605 fmi1_real_t values_ref[
N_REAL];
608 for (k = 0; k <
N_REAL; k++) {
609 vrs[k] = (fmi1_value_reference_t)(
N_STATES + k);
610 values[k] = (fmi1_real_t)(k + 1) * 12;
611 values_ref[k] = values[k];
615 status = fmi1_capi_set_real(
fmu, vrs, N_REAL, values);
617 printf(
"fmi1_capi_set_real: Failed\n");
620 printf(
"fmi1_capi_set_real: Success\n");
624 status = fmi1_capi_get_real(
fmu, vrs, N_REAL, values);
626 printf(
"fmi1_capi_get_real: Failed\n");
629 for (k = 0; k <
N_REAL; k++) {
630 if (values_ref[k] != values[k]) {
632 printf(
"fmi1_capi_get_real returned values[%u] = \"%f\" expected \"%f\"\n", (
unsigned)k, (
double)values[k], (
double)values_ref[k]);
636 printf(
"fmi1_capi_get_real: Success\n");
650 status = fmi1_capi_terminate(
fmu);
652 printf(
"fmi1_capi_terminate: Failed\n");
655 printf(
"fmi1_capi_terminate: Success\n");
666 fmi1_capi_free_model_instance(
fmu);
667 printf(
"fmi1_capi_instantiate_model: Success\n");
677 fmi1_capi_free_dll(
fmu);
678 printf(
"fmi1_capi_free_dll: Success\n");
688 fmi1_capi_destroy_dllfmu(
fmu);
689 printf(
"fmi1_capi_destroy_dllfmu: Success\n");
698 int main(
int argc,
char *argv[])
734 printf(
"Everything seems to be ok!\n");
int test_create_dllfmu()
Tests fmi1_capi_create_dllfmu.
int test_set_get_string()
Tests fmi1_capi_set_string and fmi1_capi_get_string Some values are set with fmi1_capi_set_string. The same values are retrived with fmi1_capi_get_string and tested to be the same as thoughs that were set.
int test_get_event_indicators()
jm_calloc_f calloc
Allocate zero initialized memory.
int test_set_continuous_states()
Tests fmi1_capi_set_continuous_states.
fmi1_callback_logger_ft logger
int test_set_debug_logging()
Tests fmi1_capi_set_debug_logging.
void fmilogger(fmi1_component_t c, fmi1_string_t instanceName, fmi1_status_t status, fmi1_string_t category, fmi1_string_t message,...)
int test_completed_integrator_step()
Tests fmi1_capi_completed_integrator_step.
int test_fmi_set_time()
Tests fmi1_capi_set_time.
jm_log_level_enu_t
Log levels supported via the logger functions in jm_callbacks.
int test_free_model_instance()
Tests fmi1_capi_free_model_instance.
fmi1_callback_allocate_memory_ft allocateMemory
int test_fmi_get_version()
Tests fmi1_capi_get_version.
fmi1_real_t nextEventTime
fmi1_boolean_t stateValueReferencesChanged
fmi1_boolean_t upcomingTimeEvent
int test_get_derivatives()
Tests fmi1_capi_get_derivatives.
int test_get_continuous_states()
Tests fmi1_capi_get_continuous_states.
Include file to be used in client applications of the FMI Library.
jm_malloc_f malloc
Allocate non-initialized memory.
int test_get_nominal_continuous_states()
Tests fmi1_capi_get_nominal_continuous_states.
fmi1_boolean_t stateValuesChanged
jm_voidp context
Arbitrary context pointer passed to the logger function.
const char * jm_string
A constant string.
int test_fmi_get_model_types_platform()
Tests fmi1_capi_get_model_types_platform.
#define MODEL_IDENTIFIER_STR
int main(int argc, char *argv[])
Tests the C-API for FMI 1.0 Model Exchange. The tests are performed using a test-dll. The functions are called and the values are set or returned are validated either in the test function(output functions) or inside the dll(input functions). If any error occures, the program exits.
The callbacks struct is sent to all the modules in the library.
int test_get_state_value_references()
Tests fmi1_capi_get_state_value_references.
int test_load_dll_fcn()
Tests fmi1_capi_load_fcn.
int test_event_update()
Tests fmi1_capi_eventUpdate.
int test_destroy_dllfmu()
Tests fmi1_capi_destroy_dllfmu.
fmi1_callback_free_memory_ft freeMemory
void importlogger(jm_callbacks *c, jm_string module, jm_log_level_enu_t log_level, jm_string message)
int test_set_get_real()
Tests fmi1_capi_set_real and fmi1_capi_get_real Some values are set with fmi1_capi_set_real. The same values are retrived with fmi1_capi_get_real and tested to be the same as thoughs that were set.
int test_initialize()
Tests fmi1_capi_initialize.
int test_free_dll()
Tests fmi1_capi_free_dll.
fmi1_boolean_t iterationConverged
fmi1_fmu_kind_enu_t
FMU 1.0 kinds.
#define N_EVENT_INDICATORS
int test_set_get_boolean()
Tests fmi1_capi_set_boolean and fmi1_capi_get_boolean Some values are set with fmi1_capi_set_boolean...
jm_realloc_f realloc
Re-allocate memory.
jm_status_enu_t
Return status codes.
jm_free_f free
Free-allocated memory.
fmi1_boolean_t terminateSimulation
jm_logger_f logger
Logging callback.
int test_load_dll()
Tests fmi1_capi_load_dll.
int test_set_get_integer()
Tests fmi1_capi_set_integer and fmi1_capi_get_integer Some values are set with fmi1_capi_set_integer...
int test_instantiate_model()
Tests fmi1_capi_instantiate_model.
int test_terminate()
Tests fmi1_capi_terminate.
FMILIB_EXPORT int jm_vsnprintf(char *str, size_t size, const char *fmt, va_list al)
C89 compatible implementation of C99 vsnprintf.