26 #include <FMI1/fmi1_capi.h> 29 #include "config_test.h" 32 #define MODEL_IDENTIFIER FMU_DUMMY_CS_MODEL_IDENTIFIER 35 #define INSTANCE_NAME "Test Model" 42 printf(
"module = %s, log level = %d: %s\n", module, log_level, message);
46 void fmilogger(fmi1_component_t
c, fmi1_string_t instanceName,
fmi1_status_t status, fmi1_string_t category, fmi1_string_t message, ...)
51 va_start(argp, message);
53 printf(
"fmiStatus = %d; %s (%s): %s\n", status, instanceName, category, msg);
55 printf(
"Warning: message was trancated");
62 printf(
"Press any key to exit\n");
80 callbacks->
malloc = malloc;
81 callbacks->
calloc = calloc;
83 callbacks->
free = free;
92 printf(
"fmi1_capi_create_dllfmu: ");
95 printf(
"An error occured while fmi1_capi_create_dllfmu was called, an error message should been printed.\n");
111 printf(
"fmi1_capi_load_dll: ");
112 status = fmi1_capi_load_dll(
fmu);
130 printf(
"fmi1_capi_load_fcn: ");
131 status = fmi1_capi_load_fcn(
fmu);
134 printf(
"Error in fmi1_capi_load_fcn: %s\n",
"fmi1_capi_get_last_error(fmu)");
148 const char* version = fmi1_capi_get_version(
fmu);
150 printf(
"fmi1_capi_get_version: ");
152 printf(
"Expected \"%s\" but returned \"%s\"",
FMI_VERSION, version);
166 const char* platformtype = fmi1_capi_get_types_platform(
fmu);
168 printf(
"fmi1_capi_get_types_platform: ");
169 if (strcmp(FMI_PLATFORM_TYPE, platformtype) != 0) {
170 printf(
"Expected \"%s\" but returned \"%s\"", FMI_PLATFORM_TYPE, platformtype);
184 fmi1_string_t fmuLocation;
185 fmi1_string_t mimeType;
187 fmi1_boolean_t visible;
188 fmi1_boolean_t interactive;
189 fmi1_boolean_t loggingOn;
198 if (fmi1_capi_instantiate_slave(
fmu,
INSTANCE_NAME,
FMI_GUID, fmuLocation, mimeType, timeout, visible, interactive, loggingOn) == NULL) {
199 printf(
"fmi1_capi_instantiate_slave: Failed\n");
202 printf(
"fmi1_capi_instantiate_slave: Success\n");
216 fmi1_boolean_t StopTimeDefined;
222 status = fmi1_capi_initialize_slave(
fmu, tStart, StopTimeDefined, tStop);
224 printf(
"fmi1_capi_initialize_slave: Failed\n");
227 printf(
"fmi1_capi_initialize_slave: Success\n");
241 printf(
"fmi1_capi_set_debug_logging: Failed\n");
244 printf(
"fmi1_capi_set_debug_logging: Success\n");
256 status = fmi1_capi_cancel_step(
fmu);
258 printf(
"fmi1_capi_cancel_step: Failed\n");
261 printf(
"fmi1_capi_cancel_step: Success\n");
273 fmi1_real_t currentCommunicationPoint;
274 fmi1_real_t communicationStepSize;
275 fmi1_boolean_t newStep;
277 currentCommunicationPoint = 0;
278 communicationStepSize = 0.1;
280 status = fmi1_capi_do_step(
fmu, currentCommunicationPoint, communicationStepSize, newStep);
282 printf(
"fmi1_capi_do_step: Failed\n");
285 printf(
"fmi1_capi_do_step: Success\n");
301 status = fmi1_capi_get_status(
fmu, statuskind, &statusvalue);
303 printf(
"fmi1_capi_get_status: Failed\n");
306 printf(
"fmi1_capi_get_status: Success\n");
321 status = fmi1_capi_get_real_status(
fmu, statuskind, &real);
323 printf(
"fmi1_capi_get_real_status: Failed\n");
326 printf(
"fmi1_capi_get_real_status: Success\n");
339 fmi1_integer_t integer;
341 status = fmi1_capi_get_integer_status(
fmu, statuskind, &integer);
343 printf(
"fmi1_capi_get_integer_status: Failed\n");
346 printf(
"fmi1_capi_get_integer_status: Success\n");
359 fmi1_boolean_t boolean;
361 status = fmi1_capi_get_boolean_status(
fmu, statuskind, &
boolean);
363 printf(
"fmi1_capi_get_boolean_status: Failed\n");
366 printf(
"fmi1_capi_get_boolean_status: Success\n");
379 fmi1_string_t string;
381 status = fmi1_capi_get_string_status(
fmu, statuskind, &
string);
383 printf(
"fmi1_capi_get_string_status: Failed\n");
386 printf(
"fmi1_capi_get_string_status: Success\n");
398 fmi1_value_reference_t vrs[
N_STRING];
404 vrs[k] = (fmi1_value_reference_t)k;
406 values_ref[k] = values[k];
410 status = fmi1_capi_set_string(
fmu, vrs, N_STRING, values);
412 printf(
"fmi1_capi_set_string: Failed\n");
415 printf(
"fmi1_capi_set_string: Success\n");
419 status = fmi1_capi_get_string(
fmu, vrs, N_STRING, values);
421 printf(
"fmi1_capi_get_string: Failed\n");
425 if (strcmp(values_ref[k], values[k]) != 0) {
426 printf(
"fmi1_capi_get_string returned values[%u] = \"%s\" expected \"%s\"\n", (
unsigned)k, values[k], values_ref[k]);
430 printf(
"fmi1_capi_get_string: Success\n");
449 vrs[k] = (fmi1_value_reference_t)k;
450 values[k] = (k + 1) * 12;
451 values_ref[k] = values[k];
455 status = fmi1_capi_set_integer(
fmu, vrs, N_INTEGER, values);
457 printf(
"fmi1_capi_set_integer: Failed\n");
460 printf(
"fmi1_capi_set_integer: Success\n");
464 status = fmi1_capi_get_integer(
fmu, vrs, N_INTEGER, values);
466 printf(
"fmi1_capi_get_integer: Failed\n");
470 if (values_ref[k] != values[k]) {
471 printf(
"fmi1_capi_get_integer returned values[%d] = \"%d\" expected \"%d\"\n", k, values[k], values_ref[k]);
475 printf(
"fmi1_capi_get_integer: Success\n");
494 vrs[k] = (fmi1_value_reference_t)k;
496 values_ref[k] = values[k];
500 status = fmi1_capi_set_boolean(
fmu, vrs,
N_BOOLEAN, values);
502 printf(
"fmi1_capi_set_boolean: Failed\n");
505 printf(
"fmi1_capi_set_boolean: Success\n");
509 status = fmi1_capi_get_boolean(
fmu, vrs,
N_BOOLEAN, values);
511 printf(
"fmi1_capi_get_boolean: Failed\n");
515 if (values_ref[k] != values[k]) {
516 printf(
"fmi1_capi_get_boolean returned values[%u] = \"%s\" expected \"%s\"\n", (
unsigned)k, values[k] ?
"fmiTrue" :
"fmiFalse", values_ref[k] ?
"fmiTrue" :
"fmiFalse");
520 printf(
"fmi1_capi_get_boolean: Success\n");
533 fmi1_value_reference_t vrs[
N_REAL];
534 fmi1_real_t values[
N_REAL];
535 fmi1_real_t values_ref[
N_REAL];
538 for (k = 0; k <
N_REAL; k++) {
539 vrs[k] = (fmi1_value_reference_t)(
N_STATES + k);
540 values[k] = (fmi1_real_t)(k + 1) * 12;
541 values_ref[k] = values[k];
545 status = fmi1_capi_set_real(
fmu, vrs, N_REAL, values);
547 printf(
"fmi1_capi_set_real: Failed\n");
550 printf(
"fmi1_capi_set_real: Success\n");
554 status = fmi1_capi_get_real(
fmu, vrs, N_REAL, values);
556 printf(
"fmi1_capi_get_real: Failed\n");
559 for (k = 0; k <
N_REAL; k++) {
560 if (values_ref[k] != values[k]) {
561 printf(
"fmi1_capi_get_real returned values[%u] = \"%f\" expected \"%f\"\n", (
unsigned)k, values[k], values_ref[k]);
565 printf(
"fmi1_capi_get_real: Success\n");
578 status = fmi1_capi_reset_slave(
fmu);
580 printf(
"fmi1_capi_reset_slave: Failed\n");
583 printf(
"fmi1_capi_reset_slave: Success\n");
609 status = fmi1_capi_set_real_input_derivatives(
fmu, vrs,
N_INPUT_REAL * N_INPUT_REAL_MAX_ORDER, order, values);
611 printf(
"fmi1_capi_set_real_input_derivatives: Failed\n");
614 printf(
"fmi1_capi_set_real_input_derivatives: Success\n");
642 printf(
"fmi1_capi_get_real_output_derivatives: Failed\n");
645 printf(
"fmi1_capi_get_real_output_derivatives: Success\n");
652 printf(
"fmi1_capi_get_real_output_derivatives: Failed\n");
657 fmi1_integer_t ord = k + 1;
658 printf(
"value[%d][%d] = %f \n", p, ord, value);
673 status = fmi1_capi_terminate_slave(
fmu);
675 printf(
"fmi1_capi_terminate_slave: Failed\n");
678 printf(
"fmi1_capi_terminate_slave: Success\n");
689 fmi1_capi_free_slave_instance(
fmu);
690 printf(
"fmi1_capi_free_slave_instance: Success\n");
700 fmi1_capi_free_dll(
fmu);
701 printf(
"fmi1_capi_free_dll: Success\n");
711 fmi1_capi_destroy_dllfmu(
fmu);
712 printf(
"fmi1_capi_destroy_dllfmu: Success\n");
721 int main(
int argc,
char *argv[])
758 printf(
"Everything seems to be ok!\n");
jm_calloc_f calloc
Allocate zero initialized memory.
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_get_types_platform()
Tests fmi1_capi_get_types_platform.
int test_create_dllfmu()
Tests fmi1_capi_create_dllfmu.
int test_free_slave_instance()
Tests fmi1_capi_free_slave_instance.
#define N_OUTPUT_REAL_MAX_ORDER
int test_terminate_slave()
Tests fmi1_capi_terminate_slave.
int test_set_debug_logging()
Tests fmi1_capi_set_debug_logging.
fmi1_callback_logger_ft logger
void fmilogger(fmi1_component_t c, fmi1_string_t instanceName, fmi1_status_t status, fmi1_string_t category, fmi1_string_t message,...)
jm_log_level_enu_t
Log levels supported via the logger functions in jm_callbacks.
fmi1_callback_allocate_memory_ft allocateMemory
int test_get_string_status()
Tests fmi1_capi_get_string_status.
int test_do_step()
Tests fmi1_capi_do_step.
#define N_INPUT_REAL_MAX_ORDER
jm_log_level_enu_t log_level
Logging level.
static jm_string jm_get_last_error(jm_callbacks *cb)
Get the last log message produced by the library.
int test_fmi_get_version()
Tests fmi1_capi_get_version.
jm_malloc_f malloc
Allocate non-initialized memory.
void importlogger(jm_callbacks *c, jm_string module, jm_log_level_enu_t log_level, jm_string message)
jm_voidp context
Arbitrary context pointer passed to the logger function.
const char * jm_string
A constant string.
int test_get_real_output_derivatives()
Tests fmi1_capi_get_real_output_derivatives The output values from fmi1_capi_get_real_output_derivati...
#define MODEL_IDENTIFIER_STR
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_get_boolean_status()
Tests fmi1_capi_get_boolean_status.
The callbacks struct is sent to all the modules in the library.
fmi1_callback_free_memory_ft freeMemory
int test_reset_slave()
Tests fmi1_capi_reset_slave.
int main(int argc, char *argv[])
Tests the C-API for FMI 1.0 Co-Simulation. 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.
int test_get_real_status()
Tests fmi1_capi_get_real_status.
int test_load_dll_fcn()
Tests fmi1_capi_load_fcn.
int test_get_integer_status()
Tests fmi1_capi_get_integer_status.
int test_destroy_dllfmu()
Tests fmi1_capi_destroy_dllfmu.
int test_set_real_input_derivatives()
Tests fmi1_capi_set_real_input_derivatives fmi1_capi_set_real_input_derivatives returns fmiError if w...
int test_get_status()
Tests fmi1_capi_get_status.
fmi1_fmu_kind_enu_t
FMU 1.0 kinds.
int test_free_dll()
Tests fmi1_capi_free_dll.
int test_cancel_step()
Tests fmi1_capi_cancel_step.
jm_realloc_f realloc
Re-allocate memory.
int test_load_dll()
Tests fmi1_capi_load_dll.
jm_status_enu_t
Return status codes.
int test_initialize_slave()
Tests fmi1_capi_initialize_slave.
jm_free_f free
Free-allocated memory.
jm_logger_f logger
Logging callback.
int test_instantiate_slave()
Tests fmi1_capi_instantiate_slave.
int test_set_get_boolean()
Tests fmi1_capi_set_boolean and fmi1_capi_get_boolean Some values are set with fmi1_capi_set_boolean...
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.
FMILIB_EXPORT int jm_vsnprintf(char *str, size_t size, const char *fmt, va_list al)
C89 compatible implementation of C99 vsnprintf.