|
24 | 24 | from io import StringIO, BytesIO |
25 | 25 | from collections import OrderedDict |
26 | 26 |
|
| 27 | +from pyfmi import load_fmu |
| 28 | + |
27 | 29 | from pyfmi.fmi import ( |
28 | 30 | FMUException, |
29 | 31 | FMUModelME2, |
|
63 | 65 |
|
64 | 66 | this_dir = Path(__file__).parent.absolute() |
65 | 67 | FMI3_REF_FMU_PATH = Path(this_dir) / 'files' / 'reference_fmus' / '3.0' |
| 68 | +FMI2_REF_FMU_PATH = Path(this_dir) / 'files' / 'reference_fmus' / '2.0' |
66 | 69 | file_path = os.path.dirname(os.path.abspath(__file__)) |
67 | 70 |
|
68 | 71 | def _run_negated_alias(model, result_type, result_file_name=""): |
@@ -2299,3 +2302,56 @@ def test_basic_class_functions(get_fmu, result_handling, expected_result_class): |
2299 | 2302 | assert isinstance(trajs, dict) |
2300 | 2303 | traj = trajs.get("time") |
2301 | 2304 | assert isinstance(traj, Trajectory) |
| 2305 | + |
| 2306 | +@pytest.mark.parametrize("fmu_path, result_handling", |
| 2307 | + [ |
| 2308 | + (FMI2_REF_FMU_PATH / "Feedthrough.fmu", "file"), |
| 2309 | + (FMI2_REF_FMU_PATH / "Feedthrough.fmu", "binary"), |
| 2310 | + (FMI2_REF_FMU_PATH / "Feedthrough.fmu", "memory"), |
| 2311 | + (FMI2_REF_FMU_PATH / "Feedthrough.fmu", "csv"), |
| 2312 | +
|
| 2313 | + (FMI3_REF_FMU_PATH / "Feedthrough.fmu", "binary"), |
| 2314 | + ] |
| 2315 | +) |
| 2316 | +def test_basic_variable_get_set_result_correctness(fmu_path, result_handling): |
| 2317 | + """Test that basic get/set and result values align for the different variable types.""" |
| 2318 | + fmu = load_fmu(fmu_path) |
| 2319 | + fmu.initialize() |
| 2320 | + # non-default values |
| 2321 | + bool_val = True |
| 2322 | + int32_val = 15 |
| 2323 | + float64_val = 3.14 |
| 2324 | + enum_val = 2 |
| 2325 | + |
| 2326 | + # verify values are not the defaults |
| 2327 | + assert fmu.get("Boolean_input")[0] != bool_val |
| 2328 | + assert fmu.get("Int32_input")[0] != int32_val |
| 2329 | + assert fmu.get("Float64_continuous_input")[0] != float64_val |
| 2330 | + assert fmu.get("Enumeration_input")[0] != enum_val |
| 2331 | + |
| 2332 | + fmu.set("Boolean_input", bool_val) |
| 2333 | + fmu.set("Int32_input", int32_val) |
| 2334 | + fmu.set("Float64_continuous_input", float64_val) |
| 2335 | + fmu.set("Enumeration_input", enum_val) |
| 2336 | + |
| 2337 | + # verify get/set |
| 2338 | + assert fmu.get("Boolean_input")[0] == bool_val |
| 2339 | + assert fmu.get("Int32_input")[0] == int32_val |
| 2340 | + assert fmu.get("Float64_continuous_input")[0] == float64_val |
| 2341 | + assert fmu.get("Enumeration_input")[0] == enum_val |
| 2342 | + |
| 2343 | + fmu.event_update() |
| 2344 | + fmu.enter_continuous_time_mode() |
| 2345 | + opts = {"ncp": 2, "initialize": False, "result_handling": result_handling} |
| 2346 | + res = fmu.simulate(options = opts) |
| 2347 | + |
| 2348 | + # verify simulation didn't change value |
| 2349 | + assert fmu.get("Boolean_input")[0] == bool_val |
| 2350 | + assert fmu.get("Int32_input")[0] == int32_val |
| 2351 | + assert fmu.get("Float64_continuous_input")[0] == float64_val |
| 2352 | + assert fmu.get("Enumeration_input")[0] == enum_val |
| 2353 | + |
| 2354 | + assert res["Boolean_input"][-1] == bool_val |
| 2355 | + assert res["Int32_input"][-1] == int32_val |
| 2356 | + assert res["Float64_continuous_input"][-1] == float64_val |
| 2357 | + assert res["Enumeration_input"][-1] == enum_val |
0 commit comments