def test_lazy_evaluate_at_least_once_each_node(): evaluated = [] def func(): evaluated.append('bla') pg = PortGraph() vid = pg.add_actor(FuncNode(func)) assert pg.actor(vid).is_lazy() algo = LazyEvaluation(pg) env = EvaluationEnvironment() ws = WorkflowState(pg) algo.eval(env, ws) assert len(evaluated) == 1 algo.eval(env, ws) assert len(evaluated) == 1
def test_lazy_do_not_reevaluate_node_if_same_execution(): evaluated = [] def func(txt): evaluated.append(txt) return txt pg = PortGraph() vid = pg.add_actor(FuncNode(func)) assert pg.actor(vid).is_lazy() algo = LazyEvaluation(pg) env = EvaluationEnvironment() ws = WorkflowState(pg) ws.store_param(pg.in_port(vid, 'txt'), 'toto', env.current_execution()) algo.eval(env, ws) assert len(evaluated) == 1 algo.eval_node(env, ws, vid) assert len(evaluated) == 1
def test_lazy_always_reevaluate_non_lazy_nodes(): evaluated = [] def func(txt): evaluated.append(txt) return txt pg = PortGraph() vid = pg.add_actor(FuncNode(func)) pg.actor(vid).set_lazy(False) algo = LazyEvaluation(pg) env = EvaluationEnvironment() ws = WorkflowState(pg) ws.store_param(pg.in_port(vid, 'txt'), 'toto', env.current_execution()) algo.eval(env, ws) assert len(evaluated) == 1 env.new_execution() algo.eval(env, ws) assert len(evaluated) == 2