@@ -0,0 +1,2635 @@
+#!/usr/bin/env python%0A%0A#=============================================================================================%0A# MODULE DOCSTRING%0A#=============================================================================================%0A%0A%22%22%22%0ATest classes and function in module openforcefield.typing.engines.smirnoff.io.%0A%0A%22%22%22%0A%0A%0A#=============================================================================================%0A# GLOBAL IMPORTS%0A#=============================================================================================%0A%0Aimport ast%0A%0Aimport pytest%0Afrom simtk import unit%0A%0Afrom openforcefield.typing.engines.smirnoff.io import (%0A    _ast_unit_eval,%0A    _extract_attached_units,%0A)%0A%0A%0A#=============================================================================================%0A# QUANTITY PARSING UTILITIES%0A#=============================================================================================%0A%0A@pytest.mark.parametrize('unit_string,expected_unit',%5B%0A    ('kilocalories_per_mole', unit.kilocalories_per_mole),%0A    ('kilocalories_per_mole/angstrom**2', unit.kilocalories_per_mole/unit.angstrom**2),%0A    ('joule/(mole * nanometer**2)', unit.joule/(unit.mole * unit.nanometer**2)),%0A    ('picosecond**(-1)', unit.picosecond**(-1)),%0A    ('300.0 * kelvin', 300*unit.kelvin),%0A    ('1 * kilojoule + 500 * joule', 1.5*unit.kilojoule),%0A    ('1 / meter', 1.0 / unit.meter)%0A%5D)%0Adef test_ast_unit_eval(unit_string, expected_unit):%0A    %22%22%22Test that _ast_unit_eval() correctly parses string quantities.%22%22%22%0A    ast_root_node = ast.parse(unit_string, mode='eval').body%0A    parsed_units = _ast_unit_eval(ast_root_node)%0A    assert parsed_units == expected_unit%0A%0A%0A@pytest.mark.parametrize('attributes,expected',%5B%0A    (%7B'not_parsed': 'blabla'%7D,%0A        %7B%7D),%0A    (%7B'not_parsed': 'blabla', 'attr_unit': 'angstrom/femtosecond'%7D,%0A        %7B'attr': unit.angstrom/unit.femtosecond%7D),%0A    (%7B'not_parsed': 'blabla', 'attr1_unit': 'meter', 'attr2_unit': 'kilojoule_per_mole'%7D,%0A        %7B'attr1': unit.meter, 'attr2': unit.kilojoule_per_mole%7D),%0A%5D)%0Adef test_extract_attached_units(attributes, expected):%0A    %22%22%22Test that _extract_attached_units() correctly parses the correct.%22%22%22%0A    assert _extract_attached_units(attributes) == expected%0A%0A%0A@pytest.mark.parametrize('attributes',%5B%0A    %7B'attr_unit': '300.0 * kelvin'%7D,%0A    %7B'attr_unit': '1 / picosecond'%7D%0A%5D)%0Adef test_extract_attached_units_raises(attributes):%0A    %22%22%22Test that _extract_attached_units() raises an error when a quantity is specified instead of a unit.%22%22%22%0A    with pytest.raises(ValueError, match='associated to a quantity rather than only units'):%0A        _extract_attached_units(attributes)%0A

Add tests quantity from string parsing