def test_AnnotateDominatorTree_while_loop_C( while_loop: programl_pb2.ProgramGraph, ): annotator = liveness.LivenessAnnotator(while_loop) g = annotator.g annotator.Annotate(g, 3) assert g.graph["data_flow_positive_node_count"] == 0 assert g.graph["data_flow_steps"] == 5 # Features: assert g.nodes[0]["x"] == [-1, 0] assert g.nodes[1]["x"] == [-1, 0] assert g.nodes[2]["x"] == [-1, 0] assert g.nodes[3]["x"] == [-1, 1] assert g.nodes[4]["x"] == [-1, 0] assert g.nodes[5]["x"] == [-1, 0] assert g.nodes[6]["x"] == [-1, 0] # Labels: assert g.nodes[0]["y"] == liveness.NOT_LIVE_OUT assert g.nodes[1]["y"] == liveness.NOT_LIVE_OUT assert g.nodes[2]["y"] == liveness.NOT_LIVE_OUT assert g.nodes[2]["y"] == liveness.NOT_LIVE_OUT assert g.nodes[4]["y"] == liveness.NOT_LIVE_OUT # Loop induction variable assert g.nodes[5]["y"] == liveness.NOT_LIVE_OUT # Computed result assert g.nodes[6]["y"] == liveness.NOT_LIVE_OUT # Intermediate value
def test_AnnotateLiveness_wiki_b3b(wiki: programl_pb2.ProgramGraph): """Test liveness annotations from block b3b.""" annotator = liveness.LivenessAnnotator(wiki) g = annotator.g annotator.Annotate(g, 8) assert g.graph["data_flow_positive_node_count"] == 0 assert g.graph["data_flow_steps"] == 5 # Features: assert g.nodes[5]["x"] == [-1, 0] assert g.nodes[6]["x"] == [-1, 0] assert g.nodes[7]["x"] == [-1, 0] assert g.nodes[8]["x"] == [-1, 1] assert g.nodes[0]["x"] == [-1, 0] assert g.nodes[1]["x"] == [-1, 0] assert g.nodes[2]["x"] == [-1, 0] assert g.nodes[3]["x"] == [-1, 0] # Labels: assert g.nodes[5]["y"] == liveness.NOT_LIVE_OUT assert g.nodes[6]["y"] == liveness.NOT_LIVE_OUT assert g.nodes[7]["y"] == liveness.NOT_LIVE_OUT assert g.nodes[8]["y"] == liveness.NOT_LIVE_OUT assert g.nodes[0]["y"] == liveness.NOT_LIVE_OUT assert g.nodes[1]["y"] == liveness.NOT_LIVE_OUT assert g.nodes[2]["y"] == liveness.NOT_LIVE_OUT assert g.nodes[3]["y"] == liveness.NOT_LIVE_OUT
def test_AnnotateDominatorTree_graph_D(graph: programl_pb2.ProgramGraph): annotator = liveness.LivenessAnnotator(graph) g = annotator.g annotator.Annotate(g, 3) assert g.graph["data_flow_positive_node_count"] == 0 assert g.graph["data_flow_steps"] == 4 # Features: assert g.nodes[0]["x"] == [-1, 0] assert g.nodes[1]["x"] == [-1, 0] assert g.nodes[2]["x"] == [-1, 0] assert g.nodes[3]["x"] == [-1, 1] assert g.nodes[4]["x"] == [-1, 0] assert g.nodes[5]["x"] == [-1, 0] # Labels: assert g.nodes[0]["y"] == liveness.NOT_LIVE_OUT assert g.nodes[1]["y"] == liveness.NOT_LIVE_OUT assert g.nodes[2]["y"] == liveness.NOT_LIVE_OUT assert g.nodes[3]["y"] == liveness.NOT_LIVE_OUT assert g.nodes[4]["y"] == liveness.NOT_LIVE_OUT assert g.nodes[5]["y"] == liveness.NOT_LIVE_OUT
def test_AnnotateLiveness_exit_block_is_removed( wiki: programl_pb2.ProgramGraph, ): n = len(wiki.node) annotator = liveness.LivenessAnnotator(wiki) annotator.Annotate(annotator.g, 5) assert n == annotator.g.number_of_nodes()
def test_MakeAnnotated_real_graphs(real_graph: programl_pb2.ProgramGraph, ): """Opaque black-box test of annotator.""" annotator = liveness.LivenessAnnotator(real_graph) annotated = annotator.MakeAnnotated(10) assert len(annotated.graphs) <= 10 # Assume all graphs produce annotations. for graph in annotated.graphs: assert graph.graph["data_flow_steps"] >= 1