-
Notifications
You must be signed in to change notification settings - Fork 35
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #5 from modelon/fmi-2002
Extend API: check if DefaultExperiment attributes defined
- Loading branch information
Showing
21 changed files
with
630 additions
and
75 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,112 @@ | ||
#include <stdio.h> | ||
|
||
#include <fmilib.h> | ||
#include "config_test.h" | ||
#include "fmil_test.h" | ||
|
||
static fmi1_import_t *parse_xml(const char *model_desc_path) | ||
{ | ||
jm_callbacks *cb = jm_get_default_callbacks(); | ||
fmi_import_context_t *ctx = fmi_import_allocate_context(cb); | ||
fmi1_import_t *xml; | ||
|
||
if (ctx == NULL) { | ||
return NULL; | ||
} | ||
|
||
xml = fmi1_import_parse_xml(ctx, model_desc_path); | ||
|
||
fmi_import_free_context(ctx); | ||
return xml; | ||
} | ||
|
||
/* get values from DefaultExperiment */ | ||
static int test_default_experiment_defined(fmi1_import_t *xml) | ||
{ | ||
/* test defined */ | ||
ASSERT_MSG(fmi1_import_get_default_experiment_has_start(xml) == 1, "test_undefined, has_start: incorrect"); | ||
ASSERT_MSG(fmi1_import_get_default_experiment_has_stop(xml) == 1, "test_undefined, has_stop: incorrect"); | ||
ASSERT_MSG(fmi1_import_get_default_experiment_has_tolerance(xml) == 1, "test_undefined, has_tolerance: incorrect"); | ||
|
||
/* test value */ | ||
ASSERT_MSG(fmi1_import_get_default_experiment_start(xml) == 2.3, "test_defined: incorrect startTime"); | ||
ASSERT_MSG(fmi1_import_get_default_experiment_stop(xml) == 3.55, "test_defined: incorrect stopTime"); | ||
ASSERT_MSG(fmi1_import_get_default_experiment_tolerance(xml) == 1e-6, "test_defined: incorrect tolerance"); | ||
|
||
return TEST_OK; | ||
} | ||
|
||
/* get default values from DefaultExperiment */ | ||
static int test_default_experiment_undefined(fmi1_import_t *xml) | ||
{ | ||
/* test defined */ | ||
ASSERT_MSG(fmi1_import_get_default_experiment_has_start(xml) == 0, "test_undefined, has_start: incorrect"); | ||
ASSERT_MSG(fmi1_import_get_default_experiment_has_stop(xml) == 0, "test_undefined, has_stop: incorrect"); | ||
ASSERT_MSG(fmi1_import_get_default_experiment_has_tolerance(xml) == 0, "test_undefined, has_tolerance: incorrect"); | ||
|
||
/* test value */ | ||
ASSERT_MSG(fmi1_import_get_default_experiment_start(xml) == 0.0, "test_undefined: incorrect default startTime"); | ||
ASSERT_MSG(fmi1_import_get_default_experiment_stop(xml) == 1.0, "test_undefined: incorrect default stopTime"); | ||
ASSERT_MSG(fmi1_import_get_default_experiment_tolerance(xml) == 1e-4, "test_undefined: incorrect default tolerance"); | ||
|
||
return TEST_OK; | ||
} | ||
|
||
/* get mix of default and user defined values from DefaultExperiment */ | ||
static int test_default_experiment_mixed(fmi1_import_t *xml) | ||
{ | ||
/* test defined */ | ||
ASSERT_MSG(fmi1_import_get_default_experiment_has_start(xml) == 1, "test_mixed, has_start: incorrect"); | ||
ASSERT_MSG(fmi1_import_get_default_experiment_has_stop(xml) == 0, "test_mixed, has_stop: incorrect"); | ||
ASSERT_MSG(fmi1_import_get_default_experiment_has_tolerance(xml) == 1, "test_mixed, has_tolerance: incorrect"); | ||
|
||
/* test value */ | ||
ASSERT_MSG(fmi1_import_get_default_experiment_start(xml) == 2.3, "test_mixed: incorrect default startTime"); | ||
ASSERT_MSG(fmi1_import_get_default_experiment_stop(xml) == 1.0, "test_mixed: incorrect default stopTime"); | ||
ASSERT_MSG(fmi1_import_get_default_experiment_tolerance(xml) == 1e-6, "test_mixed: incorrect default tolerance"); | ||
|
||
return TEST_OK; | ||
} | ||
|
||
int main(int argc, char **argv) | ||
{ | ||
#define PATH_BUF_SIZE 1000 | ||
char path_buf[PATH_BUF_SIZE]; /* buffer for path to md */ | ||
fmi1_import_t *xml; | ||
int ret = 1; | ||
if (argc != 2) { | ||
printf("Usage: %s <path to dir that contains 'defined' and 'undefined' " | ||
"parent dirs of modelDescription files (including trailing file separator " | ||
"(slash or backslash))>\n", argv[0]); | ||
return CTEST_RETURN_FAIL; | ||
} | ||
|
||
printf("Running fmi1_import_variable_test\n"); | ||
|
||
/* test 1 */ | ||
xml = parse_xml(strcat(strncpy(path_buf, argv[1], PATH_BUF_SIZE), "defined")); | ||
if (xml == NULL) { | ||
return CTEST_RETURN_FAIL; | ||
} | ||
ret &= test_default_experiment_defined(xml); | ||
fmi1_import_free(xml); | ||
|
||
/* test 2 */ | ||
xml = parse_xml(strcat(strncpy(path_buf, argv[1], PATH_BUF_SIZE), "undefined")); | ||
if (xml == NULL) { | ||
return CTEST_RETURN_FAIL; | ||
} | ||
ret &= test_default_experiment_undefined(xml); | ||
fmi1_import_free(xml); | ||
|
||
/* test 3 */ | ||
xml = parse_xml(strcat(strncpy(path_buf, argv[1], PATH_BUF_SIZE), "mixed")); | ||
if (xml == NULL) { | ||
return CTEST_RETURN_FAIL; | ||
} | ||
ret &= test_default_experiment_mixed(xml); | ||
fmi1_import_free(xml); | ||
|
||
return ret == 0 ? CTEST_RETURN_FAIL : CTEST_RETURN_SUCCESS; | ||
#undef PATH_BUF_SIZE | ||
} |
24 changes: 24 additions & 0 deletions
24
Test/FMI1/parser_test_xmls/default_experiment/defined/modelDescription.xml
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,24 @@ | ||
<?xml version="1.0" encoding="UTF-8"?> | ||
<fmiModelDescription | ||
fmiVersion="1.0" | ||
modelName="myModelName" | ||
guid="myGuid" | ||
modelIdentifier="myModelIdentifier" | ||
description="myDescription" | ||
author="myAuthor" | ||
generationTool="myGenerationTool" | ||
generationDateAndTime="2002-05-30T09:00:00" | ||
version="myModelVersion" | ||
variableNamingConvention="structured" | ||
numberOfContinuousStates="0" | ||
numberOfEventIndicators="0"> | ||
|
||
<DefaultExperiment | ||
startTime="2.3" | ||
stopTime="3.55" | ||
tolerance="1e-6" | ||
/> | ||
|
||
<ModelVariables/> | ||
|
||
</fmiModelDescription> |
23 changes: 23 additions & 0 deletions
23
Test/FMI1/parser_test_xmls/default_experiment/mixed/modelDescription.xml
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,23 @@ | ||
<?xml version="1.0" encoding="UTF-8"?> | ||
<fmiModelDescription | ||
fmiVersion="1.0" | ||
modelName="myModelName" | ||
guid="myGuid" | ||
modelIdentifier="myModelIdentifier" | ||
description="myDescription" | ||
author="myAuthor" | ||
generationTool="myGenerationTool" | ||
generationDateAndTime="2002-05-30T09:00:00" | ||
version="myModelVersion" | ||
variableNamingConvention="structured" | ||
numberOfContinuousStates="0" | ||
numberOfEventIndicators="0"> | ||
|
||
<DefaultExperiment | ||
startTime="2.3" | ||
tolerance="1e-6" | ||
/> | ||
|
||
<ModelVariables/> | ||
|
||
</fmiModelDescription> |
20 changes: 20 additions & 0 deletions
20
Test/FMI1/parser_test_xmls/default_experiment/undefined/modelDescription.xml
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,20 @@ | ||
<?xml version="1.0" encoding="UTF-8"?> | ||
<fmiModelDescription | ||
fmiVersion="1.0" | ||
modelName="myModelName" | ||
guid="myGuid" | ||
modelIdentifier="myModelIdentifier" | ||
description="myDescription" | ||
author="myAuthor" | ||
generationTool="myGenerationTool" | ||
generationDateAndTime="2002-05-30T09:00:00" | ||
version="myModelVersion" | ||
variableNamingConvention="structured" | ||
numberOfContinuousStates="0" | ||
numberOfEventIndicators="0"> | ||
|
||
<DefaultExperiment/> | ||
|
||
<ModelVariables/> | ||
|
||
</fmiModelDescription> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,118 @@ | ||
#include <stdio.h> | ||
|
||
#include <fmilib.h> | ||
#include "config_test.h" | ||
#include "fmil_test.h" | ||
|
||
static fmi2_import_t *parse_xml(const char *model_desc_path) | ||
{ | ||
jm_callbacks *cb = jm_get_default_callbacks(); | ||
fmi_import_context_t *ctx = fmi_import_allocate_context(cb); | ||
fmi2_import_t *xml; | ||
|
||
if (ctx == NULL) { | ||
return NULL; | ||
} | ||
|
||
xml = fmi2_import_parse_xml(ctx, model_desc_path, NULL); | ||
|
||
fmi_import_free_context(ctx); | ||
return xml; | ||
} | ||
|
||
/* get values from DefaultExperiment */ | ||
static int test_default_experiment_defined(fmi2_import_t *xml) | ||
{ | ||
/* test defined */ | ||
ASSERT_MSG(fmi2_import_get_default_experiment_has_start(xml) == 1, "test_undefined, has_start: incorrect"); | ||
ASSERT_MSG(fmi2_import_get_default_experiment_has_stop(xml) == 1, "test_undefined, has_stop: incorrect"); | ||
ASSERT_MSG(fmi2_import_get_default_experiment_has_tolerance(xml) == 1, "test_undefined, has_tolerance: incorrect"); | ||
ASSERT_MSG(fmi2_import_get_default_experiment_has_step(xml) == 1, "test_undefined, has_step: incorrect"); | ||
|
||
/* test value */ | ||
ASSERT_MSG(fmi2_import_get_default_experiment_start(xml) == 2.3, "test_defined: incorrect startTime"); | ||
ASSERT_MSG(fmi2_import_get_default_experiment_stop(xml) == 3.55, "test_defined: incorrect stopTime"); | ||
ASSERT_MSG(fmi2_import_get_default_experiment_tolerance(xml) == 1e-6, "test_defined: incorrect tolerance"); | ||
ASSERT_MSG(fmi2_import_get_default_experiment_step(xml) == 2e-3, "test_defined: incorrect stepSize"); | ||
|
||
return TEST_OK; | ||
} | ||
|
||
/* get default values from DefaultExperiment */ | ||
static int test_default_experiment_undefined(fmi2_import_t *xml) | ||
{ | ||
/* test defined */ | ||
ASSERT_MSG(fmi2_import_get_default_experiment_has_start(xml) == 0, "test_undefined, has_start: incorrect"); | ||
ASSERT_MSG(fmi2_import_get_default_experiment_has_stop(xml) == 0, "test_undefined, has_stop: incorrect"); | ||
ASSERT_MSG(fmi2_import_get_default_experiment_has_tolerance(xml) == 0, "test_undefined, has_tolerance: incorrect"); | ||
ASSERT_MSG(fmi2_import_get_default_experiment_has_step(xml) == 0, "test_undefined, has_step: incorrect"); | ||
|
||
/* test value */ | ||
ASSERT_MSG(fmi2_import_get_default_experiment_start(xml) == 0.0, "test_undefined: incorrect default startTime"); | ||
ASSERT_MSG(fmi2_import_get_default_experiment_stop(xml) == 1.0, "test_undefined: incorrect default stopTime"); | ||
ASSERT_MSG(fmi2_import_get_default_experiment_tolerance(xml) == 1e-4, "test_undefined: incorrect default tolerance"); | ||
ASSERT_MSG(fmi2_import_get_default_experiment_step(xml) == 1e-2, "test_undefined: incorrect default stepSize"); | ||
|
||
return TEST_OK; | ||
} | ||
|
||
/* get mix of default and user defined values from DefaultExperiment */ | ||
static int test_default_experiment_mixed(fmi2_import_t *xml) | ||
{ | ||
/* test defined */ | ||
ASSERT_MSG(fmi2_import_get_default_experiment_has_start(xml) == 1, "test_mixed, has_start: incorrect"); | ||
ASSERT_MSG(fmi2_import_get_default_experiment_has_stop(xml) == 0, "test_mixed, has_stop: incorrect"); | ||
ASSERT_MSG(fmi2_import_get_default_experiment_has_tolerance(xml) == 1, "test_mixed, has_tolerance: incorrect"); | ||
ASSERT_MSG(fmi2_import_get_default_experiment_has_step(xml) == 0, "test_mixed, has_step: incorrect"); | ||
|
||
/* test value */ | ||
ASSERT_MSG(fmi2_import_get_default_experiment_start(xml) == 2.3, "test_mixed: incorrect default startTime"); | ||
ASSERT_MSG(fmi2_import_get_default_experiment_stop(xml) == 1.0, "test_mixed: incorrect default stopTime"); | ||
ASSERT_MSG(fmi2_import_get_default_experiment_tolerance(xml) == 1e-6, "test_mixed: incorrect default tolerance"); | ||
ASSERT_MSG(fmi2_import_get_default_experiment_step(xml) == 1e-2, "test_mixed: incorrect default stepSize"); | ||
|
||
return TEST_OK; | ||
} | ||
|
||
int main(int argc, char **argv) | ||
{ | ||
#define PATH_BUF_SIZE 1000 | ||
char path_buf[PATH_BUF_SIZE]; /* buffer for path to md */ | ||
fmi2_import_t *xml; | ||
int ret = 1; | ||
if (argc != 2) { | ||
printf("Usage: %s <path to dir that contains 'defined' and 'undefined' " | ||
"parent dirs of modelDescription files (including trailing file separator " | ||
"(slash or backslash))>\n", argv[0]); | ||
return CTEST_RETURN_FAIL; | ||
} | ||
|
||
printf("Running fmi2_import_variable_test\n"); | ||
|
||
/* test 1 */ | ||
xml = parse_xml(strcat(strncpy(path_buf, argv[1], PATH_BUF_SIZE), "defined")); | ||
if (xml == NULL) { | ||
return CTEST_RETURN_FAIL; | ||
} | ||
ret &= test_default_experiment_defined(xml); | ||
fmi2_import_free(xml); | ||
|
||
/* test 2 */ | ||
xml = parse_xml(strcat(strncpy(path_buf, argv[1], PATH_BUF_SIZE), "undefined")); | ||
if (xml == NULL) { | ||
return CTEST_RETURN_FAIL; | ||
} | ||
ret &= test_default_experiment_undefined(xml); | ||
fmi2_import_free(xml); | ||
|
||
/* test 3 */ | ||
xml = parse_xml(strcat(strncpy(path_buf, argv[1], PATH_BUF_SIZE), "mixed")); | ||
if (xml == NULL) { | ||
return CTEST_RETURN_FAIL; | ||
} | ||
ret &= test_default_experiment_mixed(xml); | ||
fmi2_import_free(xml); | ||
|
||
return ret == 0 ? CTEST_RETURN_FAIL : CTEST_RETURN_SUCCESS; | ||
#undef PATH_BUF_SIZE | ||
} |
27 changes: 27 additions & 0 deletions
27
Test/FMI2/parser_test_xmls/default_experiment/defined/modelDescription.xml
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,27 @@ | ||
<?xml version="1.0" encoding="UTF-8"?> | ||
<fmiModelDescription | ||
fmiVersion="2.0" | ||
modelName="myModelName" | ||
guid="myGuid" | ||
description="myDescription" | ||
author="myAuthor" | ||
generationTool="myGenerationTool" | ||
generationDateAndTime="2002-05-30T09:00:00" | ||
version="myModelVersion" | ||
variableNamingConvention="structured" | ||
numberOfEventIndicators="3"> | ||
|
||
<ModelExchange | ||
modelIdentifier="myModelIdentifier" /> | ||
|
||
<DefaultExperiment | ||
startTime="2.3" | ||
stopTime="3.55" | ||
tolerance="1e-6" | ||
stepSize="2e-3" | ||
/> | ||
|
||
<ModelVariables/> | ||
<ModelStructure/> | ||
|
||
</fmiModelDescription> |
Oops, something went wrong.