Source code for apps.bazel_parser.repo_graph_data_test
import pathlib
import pprint
import unittest
import networkx
from apps.bazel_parser import repo_graph_data
[docs]
class TestRepoGraphData(unittest.TestCase):
[docs]
def test_basics(self) -> None:
g: networkx.DiGraph = networkx.DiGraph(
[
("a", "b"),
("b", "c"),
("d", "e"),
# Show longest path can be greater than max depth
("a", "f"),
("f", "g"),
("g", "c"),
# Separate component
("h", "i"),
]
)
node_to_class = {
"a": "T",
"b": "T",
"c": "F",
"d": "G",
"e": "F",
"f": "H",
"g": "H",
"h": "H",
"i": "H",
}
node_probability = {
"c": 0.5,
"e": 0.25,
}
node_duration_s = {
"a": 1.5,
"b": 2.5,
"d": 3.5,
}
r = repo_graph_data.RepoGraphData(
graph=g,
node_to_class=node_to_class,
node_probability=node_probability,
node_duration_s=node_duration_s,
)
# XXX: Test the various computed values, etc.
print(r.df)
pprint.pprint(r.get_node("c"))
self.assertEqual(r.get_node("c")["node_probability_cache_hit"], 0.5)
self.assertEqual(r.get_node("c")["num_duration_ancestors"], 2)
self.assertEqual(r.get_node("d")["num_duration_ancestors"], 0)
self.assertEqual(r.get_node("i")["num_ancestors"], 1)
self.assertEqual(r.get_node("i")["num_duration_ancestors"], 0)
# XXX: num_source_descendants
with self.assertRaisesRegex(KeyError, "not there"):
r.get_node("not there")
graph_metrics = r.get_graph_metrics()
self.assertEqual(3, graph_metrics["longest_path"])
self.assertEqual(2, graph_metrics["max_depth"])
pprint.pprint(graph_metrics)
# XXX
r.to_gml(pathlib.Path("/tmp/mchristen_now.gml"))
r.to_csv(pathlib.Path("/tmp/mchristen_now.csv"))