class TestComponents

Public Instance Methods

setup() click to toggle source
# File test/components_test.rb, line 21
  def setup
    @dg   = DirectedAdjacencyGraph.new(Array)
    edges = [[1, 2], [2, 3], [2, 4], [4, 5], [1, 6], [6, 4]]
    edges.each do |(src, target)|
      @dg.add_edge(src, target)
    end
    @bfs = @dg.bfs_iterator(1)
    @dfs = @dg.dfs_iterator(1)

    @ug = AdjacencyGraph.new(Array)
    @ug.add_edges(*edges)

    @dg2 = graph_from_string(<<-END
a -> b f h
b -> c a
c -> d b
d -> e
e -> d
f -> g
g -> f d
h -> i
i -> h j e c
    END
    )
  end
test_connected_components() click to toggle source
# File test/components_test.rb, line 47
def test_connected_components
  ccs = []
  @ug.each_connected_component { |c| ccs << c }
  assert_equal(1, ccs.size)

  ccs = []
  @ug.add_edge 10, 11
  @ug.add_edge 33, 44
  @ug.each_connected_component { |c| ccs << c.sort }
  assert_equal([[10, 11], [1, 2, 3, 4, 5, 6], [33, 44]].sort, ccs.sort)
end
test_strong_components() click to toggle source
# File test/components_test.rb, line 59
def test_strong_components
  vis = @dg2.strongly_connected_components

  assert_equal(4, vis.num_comp)

  result = vis.comp_map.to_a.sort.reduce({}) { |res, a|
    if res.key?(a[1])
      res[a[1]] << a[0]
    else
      res[a[1]] = [a[0]]
    end
    res
  }

  std_res = result.to_a.map {
      |a|
    [a[1][0], a[1]]
  }.sort

  assert_equal([["a", ["a", "b", "c", "h", "i"]], ["d", ["d", "e"]], ["f", ["f", "g"]], ["j", ["j"]]], std_res)
end