def test_value_from_expression(): # This function is used to get the value of an exponent, necessary for unit checking constants = {'c': 3} # dummy class class C(object): pass variables = {'s_constant_scalar': C(), 's_non_constant': C(), 's_non_scalar': C()} variables['s_constant_scalar'].scalar = True variables['s_constant_scalar'].constant = True variables['s_constant_scalar'].get_value = lambda: 2.0 variables['s_non_scalar'].constant = True variables['s_non_constant'].scalar = True variables['c'] = Constant('c', value=3) expressions = ['1', '-0.5', 'c', '2**c', '(c + 3) * 5', 'c + s_constant_scalar', 'True', 'False'] for expr in expressions: eval_expr = expr.replace('s_constant_scalar', 's_constant_scalar.get_value()') assert float(eval(eval_expr, variables, constants)) == _get_value_from_expression(expr, variables) wrong_expressions = ['s_non_constant', 's_non_scalar', 'c or True'] for expr in wrong_expressions: assert_raises(SyntaxError, lambda : _get_value_from_expression(expr, variables))
def test_value_from_expression(): # This function is used to get the value of an exponent, necessary for unit checking constants = {'c': 3} # dummy class class C(object): pass variables = {'s_constant_scalar': C(), 's_non_constant': C(), 's_non_scalar': C()} variables['s_constant_scalar'].scalar = True variables['s_constant_scalar'].constant = True variables['s_constant_scalar'].get_value = lambda: 2.0 variables['s_non_scalar'].constant = True variables['s_non_constant'].scalar = True variables['c'] = Constant('c', value=3) expressions = ['1', '-0.5', 'c', '2**c', '(c + 3) * 5', 'c + s_constant_scalar', 'True', 'False'] for expr in expressions: eval_expr = expr.replace('s_constant_scalar', 's_constant_scalar.get_value()') assert float(eval(eval_expr, variables, constants)) == _get_value_from_expression(expr, variables) wrong_expressions = ['s_non_constant', 's_non_scalar', 'c or True'] for expr in wrong_expressions: with pytest.raises(SyntaxError): _get_value_from_expression(expr, variables)