from __future__ import annotations import unittest from app.simulation.examples.test_mql.config import TestMqlConfig, resolve_numeric_expression class TestMqlConfigTest(unittest.TestCase): def test_resolves_global_parameters(self) -> None: config = TestMqlConfig.from_amesim_specs() self.assertEqual(config.global_parameters["D1"], 20.0) self.assertEqual(config.global_parameters["D2"], 20.0) self.assertEqual(config.global_parameters["D3"], 14.0) self.assertEqual(config.global_parameters["P0"], 153.0) self.assertEqual(config.global_parameters["Pdq"], 1.0) self.assertEqual(config.global_parameters["V"], 15.0) self.assertEqual(config.global_parameters["cf"], 0.45) self.assertEqual(config.fluid.name, "helium") self.assertAlmostEqual(config.fluid.specific_gas_constant, 2077.3, delta=0.5) def test_resolves_amesim_parameter_expressions(self) -> None: variables = {"D2": 20.0, "P0": 153.0, "cf": 0.45} self.assertAlmostEqual(resolve_numeric_expression("3.14*10^2/4", variables), 78.5) self.assertAlmostEqual(resolve_numeric_expression("0.045/D2", variables), 0.00225) self.assertAlmostEqual(resolve_numeric_expression("cf", variables), 0.45) self.assertAlmostEqual( resolve_numeric_expression("(P0-1.01300000000000e+00)/1.00000000000000e-05", variables), 15198700.0, ) self.assertIsNone(resolve_numeric_expression("predefined nitrogen (N2)", variables)) def test_groups_components_by_submodel(self) -> None: config = TestMqlConfig.from_amesim_specs() self.assertEqual(len(config.components_by_submodel("PNRP17")), 8) self.assertEqual(len(config.components_by_submodel("PNCH012")), 8) self.assertEqual(len(config.components_by_submodel("PNOR001")), 8) self.assertEqual(len(config.components_by_submodel("PNVO001")), 8) self.assertEqual(len(config.components_by_submodel("PNGD00")), 1) def test_resolves_representative_component_parameters(self) -> None: config = TestMqlConfig.from_amesim_specs() piston = config.component("pn_brp2_8") self.assertEqual(piston.submodel, "PNRP17") self.assertEqual(piston.parameter_value("dp"), 200.0) self.assertEqual(piston.parameter_value("dr"), 1.0) fixed_orifice = config.component("pn_orifice_18") self.assertEqual(fixed_orifice.submodel, "PNOR001") self.assertAlmostEqual(fixed_orifice.parameter_value("area"), 78.5) variable_orifice = config.component("pn_morifice_11") self.assertEqual(variable_orifice.submodel, "PNVO001") self.assertAlmostEqual(variable_orifice.parameter_value("cq"), 0.45) self.assertAlmostEqual(variable_orifice.parameter_value("area0"), 78.5) chamber = config.component("pn_c1_8") self.assertEqual(chamber.submodel, "PNCH012") self.assertEqual(chamber.parameter_value("cvol0"), 15.0) gas = config.component("pn_gas_data") self.assertEqual(gas.submodel, "PNGD00") self.assertAlmostEqual(gas.parameter_value("rGas"), 287.2) if __name__ == "__main__": unittest.main()