Ejemplo n.º 1
0
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
Ejemplo n.º 2
0
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
Ejemplo n.º 3
0
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
Ejemplo n.º 4
0
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()
Ejemplo n.º 5
0
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