Skip to main content
Glama
test_units.py4.09 kB
import pytest from server import ( introduce_expression, convert_to_units, quantity_simplify_units, print_latex_expression, expressions, initialize_units, local_vars, ) from vars import UnitSystem @pytest.fixture(autouse=True) def reset_globals(): # Clear global dictionaries before each test expressions.clear() local_vars.clear() # Clear local_vars to avoid cross-test pollution import server server.expression_counter = 0 # Ensure units are properly initialized for each test initialize_units() yield def test_convert_to_si(): # speed_of_light in [meter, second] expr_key = introduce_expression("speed_of_light") result_key = convert_to_units(expr_key, ["meter", "second"], UnitSystem.SI) latex = print_latex_expression(result_key) assert "\\text{m}" in latex and "\\text{s}" in latex assert "299792458" in latex def test_convert_to_impossible(): # speed_of_light in [meter] (should return unchanged) expr_key = introduce_expression("speed_of_light") result_key = convert_to_units(expr_key, ["meter"], UnitSystem.SI) latex = print_latex_expression(result_key) assert "\\text{c}" in latex # c is the symbol for speed of light def test_convert_to_cgs_gauss(): # ampere in [meter, gram, second] in cgs_gauss expr_key = introduce_expression("ampere") # First test with SI result_key_si = convert_to_units( expr_key, ["meter", "gram", "second"], UnitSystem.SI ) latex_si = print_latex_expression(result_key_si) assert "\\text{A}" in latex_si # A is the symbol for ampere # Then with CGS result_key_cgs = convert_to_units( expr_key, ["meter", "gram", "second"], UnitSystem.CGS ) latex_cgs = print_latex_expression(result_key_cgs) # In CGS, ampere should be converted to a combination of base units # Either we'll see the units or we'll still see ampere if conversion failed assert ( "\\text{g}" in latex_cgs or "\\text{m}" in latex_cgs or "\\text{A}" in latex_cgs ) def test_quantity_simplify(): # meter/kilometer should simplify to 1/1000 or 0.001 expr_key = introduce_expression("meter/kilometer") result_key = quantity_simplify_units(expr_key, UnitSystem.SI) latex = print_latex_expression(result_key) assert "0.001" in latex or "\\frac{1}{1000}" in latex or "10^{-3}" in latex # Also test .simplify() via sympy expr_key2 = introduce_expression("(meter/kilometer).simplify()") latex2 = print_latex_expression(expr_key2) assert "0.001" in latex2 or "\\frac{1}{1000}" in latex2 or "10^{-3}" in latex2 def test_convert_to_unknown_unit(): expr_key = introduce_expression("meter") result = convert_to_units(expr_key, ["not_a_unit"], UnitSystem.SI) assert "Error" in result or "error" in result.lower() def test_quantity_simplify_nonexistent_expr(): result = quantity_simplify_units("nonexistent_key", UnitSystem.SI) assert "Error" in result or "error" in result.lower() def test_convert_to_prefixed_units(): # Test with prefixed units already applied in the expression # Create speed of light in femtometer/second directly expr_key = introduce_expression( "speed_of_light * (10**15)", expr_var_name="speed_of_light_in_fm_s" ) latex = print_latex_expression(expr_key) assert "299792458" in latex and "10^{15}" in latex or "c" in latex # Test conversion from prefixed units expr_key = introduce_expression("1000*kilometer") result_key = convert_to_units(expr_key, ["meter"], UnitSystem.SI) latex = print_latex_expression(result_key) assert "1000000" in latex or "10^{6}" in latex # Test with a complex expression involving scaling expr_key = introduce_expression( "speed_of_light * 10**-9", expr_var_name="speed_in_nm_per_s" ) latex = print_latex_expression(expr_key) # The output might be formatted as \frac{c}{1000000000} or similar assert "\\text{c}" in latex and ( "10^{-9}" in latex or "1000000000" in latex or "\\frac" in latex )

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/sdiehl/sympy-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server