class TestPrim
Public Instance Methods
setup()
click to toggle source
# File test/prim_test.rb, line 10 def setup @graph = AdjacencyGraph[1,2, 1,3, 2,3, 2,4, 3,4] @edge_weights = { [1, 2] => 10, [1, 3] => 1, [2, 3] => 1, [2, 4] => 1, [3, 4] => 10 } @edge_weights_lambda = lambda { |edge| @edge_weights[edge] } end
test_minimum_spanning_tree()
click to toggle source
# File test/prim_test.rb, line 24 def test_minimum_spanning_tree assert(minimum_spanning_tree.is_a?(AdjacencyGraph)) end
test_minimum_spanning_tree_edges()
click to toggle source
# File test/prim_test.rb, line 28 def test_minimum_spanning_tree_edges assert_equal([[1, 3], [2, 3], [2, 4]], minimum_spanning_tree_edges) end
test_minimum_spanning_tree_for_disconnected_graph()
click to toggle source
# File test/prim_test.rb, line 32 def test_minimum_spanning_tree_for_disconnected_graph @graph.add_edge(5, 6) @graph.add_edge(6, 7) @edge_weights.merge!([5, 6] => 1, [6, 7] => 2) assert_equal([[1, 3], [2, 3], [2, 4]], minimum_spanning_tree_edges(@edge_weights, 1)) assert_equal([[5, 6], [6, 7]], minimum_spanning_tree_edges(@edge_weights, 5)) end
test_negative_weights()
click to toggle source
# File test/prim_test.rb, line 77 def test_negative_weights @edge_weights[[1, 3]] = -2 @edge_weights[[2, 3]] = -2 assert_equal([[1, 3], [2, 3], [2, 4]], minimum_spanning_tree_edges) end
test_visitor()
click to toggle source
# File test/prim_test.rb, line 41 def test_visitor visitor = DijkstraVisitor.new(@graph) events = [] %w[examine_vertex examine_edge edge_relaxed edge_not_relaxed finish_vertex].each do |event| visitor.send("set_#{event}_event_handler") { |*args| events << { event.to_sym => args } } end @graph.prim_minimum_spanning_tree(@edge_weights, 1, visitor) assert_equal( [ { :examine_vertex => [1] }, { :examine_edge => [1, 2] }, { :edge_relaxed => [1, 2] }, { :examine_edge => [1, 3] }, { :edge_relaxed => [1, 3] }, { :finish_vertex => [1] }, { :examine_vertex => [3] }, { :examine_edge => [3, 2] }, { :edge_relaxed => [3, 2] }, { :examine_edge => [3, 4] }, { :edge_relaxed => [3, 4] }, { :finish_vertex => [3] }, { :examine_vertex => [2] }, { :examine_edge => [2, 4] }, { :edge_relaxed => [2, 4] }, { :finish_vertex => [2] }, { :examine_vertex => [4] }, { :finish_vertex => [4] }, ], events ) end