def test_expression_evaluation_5(): #IGNORE:C01111 msg = \ ''' Test expression evaluation (returning of partially evaluated expression when accessing variables) ''' #skip_test(msg) print msg from freeode.ast import RoleVariable, NodeFuncCall from freeode.interpreter import (IModule, IFloat, ExecutionEnvironment, Interpreter, istype) import freeode.simlparser as simlparser from freeode.util import func #, aa_make_tree #parse the expression ps = simlparser.Parser() ex = ps.parseExpressionStr('a + 2*2') # print # print 'AST (parser output): -----------------------------------------------------------' # print aa_make_tree(ex) #create module where name lives mod = IModule() #create attribute 'a' with no value val_2 = IFloat() val_2.__siml_role__ = RoleVariable mod.a = val_2 # print # print 'Module where variable is located: --------------------------------------------' # print aa_make_tree(mod) #create environment for lookup of variables (stack frame) env = ExecutionEnvironment() env.global_scope = mod #interpret the expression intp = Interpreter() intp.environment = env res = intp.eval(ex) # print # print 'Result object - should be an unevaluated expression: --------------------------------------------------------------' # print aa_make_tree(res) assert isinstance(res, NodeFuncCall) assert res.function is func(IFloat.__add__) assert istype(res, IFloat)
def test_expression_evaluation_3(): #IGNORE:C01111 msg = 'Test expression evaluation (access to variables)' #skip_test(msg) print msg from freeode.interpreter import (IModule, IFloat, Interpreter, ExecutionEnvironment) import freeode.simlparser as simlparser #parse the expression ps = simlparser.Parser() ex = ps.parseExpressionStr('1 + a * 2') print print 'AST (parser output): -----------------------------------------------------------' print ex #create module where name lives mod = IModule() val_2 = IFloat(2.0) mod.a = val_2 print print 'Module where variable is located: --------------------------------------------' print mod #create environment for lookup of variables (stack frame) env = ExecutionEnvironment() env.global_scope = mod #interpret the expression intp = Interpreter() intp.push_environment(env) res = intp.eval(ex) print print 'Result object: --------------------------------------------------------------' print res assert res.value == 5.0