def test_one_level(self): base_versions = [a1] api = DepsApiFake({a1: [b1], b1: []}) graph, overwrites = block_version_graph_build(api.get_dep_table, base_versions, {}) expected = BlockVersionGraph() expected.add_nodes([a1, b1]) expected.add_edge(a1, b1) self.assertEqual(graph, expected)
def test_diamond_2_version(self): base_versions = [a1, b1] api = DepsApiFake({a1: [c1], b1: [c2], c1: [], c2: []}) graph, overwrites = block_version_graph_build(api.get_dep_table, base_versions, {}) expected = BlockVersionGraph() expected.add_nodes([a1, b1, c1, c2]) expected.add_edge(a1, c1) expected.add_edge(b1, c2) self.assertEqual(graph, expected) self.assertEqual({}, overwrites)
def test_same_tables(self): base_versions = [c1, d1] api = DepsApiFake({c1: [a2], d1: [b2]}) graph, overwrites = block_version_graph_build(api.get_dep_table, base_versions, BlockVersionTable([an, bn, c1, d1])) expected = BlockVersionGraph() expected.add_nodes([c1, d1]) expected.add_edge(c1, an) expected.add_edge(d1, bn) self.assertEqual(graph, expected) self.assertEqual({c1: {an}, d1: {bn}}, overwrites)
def test_effective_overwrite_none(self): base_versions = [a1, b1] api = DepsApiFake({a1: [c1], b1: [c2], cn: []}) graph, overwrites = block_version_graph_build(api.get_dep_table, base_versions, BlockVersionTable([cn])) expected = BlockVersionGraph() expected.add_nodes([a1, b1, cn]) expected.add_edge(a1, cn) expected.add_edge(b1, cn) self.assertEqual(graph, expected) self.assertEqual({a1: {cn}, b1: {cn}}, overwrites)
def block_closure(self): # Lazy computation of closures if self._block_closure is None: self._block_closure, _ = block_version_graph_build(self._ref_translator.get_dep_table, [self.block_version], BlockVersionTable()) return self._block_closure