rgl 0.4.0 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (72) hide show
  1. data/ChangeLog +19 -10
  2. data/Gemfile +3 -0
  3. data/{README → README.rdoc} +70 -98
  4. data/Rakefile +44 -150
  5. data/examples/canvas.rb +63 -64
  6. data/examples/examples.rb +42 -42
  7. data/examples/graph.dot +46 -0
  8. data/examples/images/example.jpg +0 -0
  9. data/examples/images/module_graph.jpg +0 -0
  10. data/examples/images/rgl_modules.png +0 -0
  11. data/examples/{insel-der-tausend-gefahren.rb → insel_der_tausend_gefahren.rb} +18 -19
  12. data/examples/north.rb +2 -2
  13. data/examples/north2.rb +11 -11
  14. data/examples/rdep-rgl.rb +218 -222
  15. data/lib/rgl/adjacency.rb +78 -74
  16. data/lib/rgl/base.rb +160 -78
  17. data/lib/rgl/bellman_ford.rb +115 -0
  18. data/lib/rgl/bidirectional.rb +17 -10
  19. data/lib/rgl/bipartite.rb +87 -0
  20. data/lib/rgl/condensation.rb +13 -4
  21. data/lib/rgl/connected_components.rb +38 -30
  22. data/lib/rgl/dijkstra.rb +158 -0
  23. data/lib/rgl/dijkstra_visitor.rb +42 -0
  24. data/lib/rgl/dot.rb +40 -32
  25. data/lib/rgl/edge_properties_map.rb +55 -0
  26. data/lib/rgl/edmonds_karp.rb +136 -0
  27. data/lib/rgl/enumerable_ext.rb +4 -1
  28. data/lib/rgl/graph_iterator.rb +15 -0
  29. data/lib/rgl/graph_visitor.rb +138 -0
  30. data/lib/rgl/graph_wrapper.rb +15 -0
  31. data/lib/rgl/graphxml.rb +20 -10
  32. data/lib/rgl/implicit.rb +68 -66
  33. data/lib/rgl/mutable.rb +37 -31
  34. data/lib/rgl/path_builder.rb +40 -0
  35. data/lib/rgl/prim.rb +52 -0
  36. data/lib/rgl/rdot.rb +411 -374
  37. data/lib/rgl/topsort.rb +23 -16
  38. data/lib/rgl/transitivity.rb +29 -27
  39. data/lib/rgl/traversal.rb +67 -205
  40. data/rakelib/dep_graph.rake +4 -3
  41. data/test/bellman_ford_test.rb +187 -0
  42. data/test/bipartite_test.rb +47 -0
  43. data/test/components_test.rb +80 -0
  44. data/test/cycles_test.rb +60 -0
  45. data/test/dijkstra_test.rb +148 -0
  46. data/test/directed_graph_test.rb +118 -0
  47. data/test/dot_test.rb +26 -0
  48. data/test/edge_properties_map_test.rb +63 -0
  49. data/test/edge_test.rb +35 -0
  50. data/test/edmonds_karp_test.rb +105 -0
  51. data/{tests/TestGraph.rb → test/graph_test.rb} +6 -6
  52. data/test/graph_xml_test.rb +57 -0
  53. data/test/implicit_test.rb +53 -0
  54. data/test/prim_test.rb +98 -0
  55. data/{tests/TestRdot.rb → test/rdot_test.rb} +309 -308
  56. data/{tests → test}/test_helper.rb +4 -1
  57. data/{tests/TestTransitivity.rb → test/transitivity_test.rb} +43 -43
  58. data/test/traversal_test.rb +221 -0
  59. data/test/undirected_graph_test.rb +103 -0
  60. metadata +226 -145
  61. data/examples/example.jpg +0 -0
  62. data/examples/module_graph.jpg +0 -0
  63. data/install.rb +0 -49
  64. data/tests/TestComponents.rb +0 -65
  65. data/tests/TestCycles.rb +0 -61
  66. data/tests/TestDirectedGraph.rb +0 -125
  67. data/tests/TestDot.rb +0 -18
  68. data/tests/TestEdge.rb +0 -34
  69. data/tests/TestGraphXML.rb +0 -57
  70. data/tests/TestImplicit.rb +0 -52
  71. data/tests/TestTraversal.rb +0 -220
  72. data/tests/TestUnDirectedGraph.rb +0 -102
@@ -1,102 +0,0 @@
1
- require 'test/unit'
2
- require 'rgl/adjacency'
3
-
4
- include RGL
5
- include RGL::Edge
6
-
7
- class TestUnDirectedGraph < Test::Unit::TestCase
8
-
9
- def setup
10
- @dg = AdjacencyGraph.new
11
- [[1,2],[2,3],[3,2],[2,4]].each do |(src,target)|
12
- @dg.add_edge(src, target)
13
- end
14
- end
15
-
16
- def test_empty_graph
17
- dg = AdjacencyGraph.new
18
- assert(dg.empty?)
19
- assert(!dg.directed?)
20
- assert(!dg.has_edge?(2,1))
21
- assert(!dg.has_vertex?(3))
22
- # Non existend vertex result in a Name Error because each_key is
23
- # called for nil
24
- assert_raises(NoVertexError) {dg.out_degree(3)}
25
- assert_equal([],dg.vertices)
26
- assert_equal(0,dg.size)
27
- assert_equal(0,dg.num_vertices)
28
- assert_equal(0,dg.num_edges)
29
- assert_equal(UnDirectedEdge,dg.edge_class)
30
- assert([].eql?(dg.edges))
31
- assert([].eql?(dg.to_a))
32
- end
33
-
34
- def test_add
35
- dg = AdjacencyGraph.new
36
- dg.add_edge(1,2)
37
- assert(!dg.empty?)
38
- assert(dg.has_edge?(1,2))
39
- assert(dg.has_edge?(2,1), "Backwards edge not included!")
40
- assert(dg.has_vertex?(1) && dg.has_vertex?(2))
41
- assert(!dg.has_vertex?(3))
42
-
43
- assert_equal([1,2],dg.vertices.sort)
44
- assert([DirectedEdge.new(1,2)].eql?(dg.edges))
45
- assert_equal("(1=2)",dg.edges.to_s)
46
-
47
- assert_equal([2],dg.adjacent_vertices(1))
48
- assert_equal([1],dg.adjacent_vertices(2))
49
-
50
- assert_equal(1,dg.out_degree(1))
51
- assert_equal(1,dg.out_degree(2))
52
- end
53
-
54
- def test_edges
55
- assert_equal(3, @dg.edges.length)
56
- edges = [[1,2],[2,3],[2,4]].map {|x| UnDirectedEdge.new(*x)}
57
- assert_equal(edges, @dg.edges.sort)
58
- # assert_equal([0,1,2,3], @dg.edges.map {|l| l.info}.sort)
59
- end
60
-
61
- def test_vertices
62
- assert_equal([1,2,3,4], @dg.vertices.sort)
63
- end
64
-
65
- def test_edges_from_to?
66
- assert @dg.has_edge?(1,2)
67
- assert @dg.has_edge?(2,3)
68
- assert @dg.has_edge?(3,2)
69
- assert @dg.has_edge?(2,4)
70
- assert @dg.has_edge?(2,1)
71
- assert !@dg.has_edge?(3,1)
72
- assert !@dg.has_edge?(4,1)
73
- assert @dg.has_edge?(4,2)
74
- end
75
-
76
- def test_remove_edges
77
- @dg.remove_edge 1,2
78
- assert !@dg.has_edge?(1,2), "(1,2) should not be an edge any more."
79
- @dg.remove_edge 1,2
80
- assert !@dg.has_edge?(2,1)
81
- @dg.remove_vertex 3
82
- assert !@dg.has_vertex?(3), "3 should not be a vertex any more."
83
- assert !@dg.has_edge?(2,3)
84
- assert_equal([UnDirectedEdge.new(2,4)],@dg.edges)
85
- end
86
-
87
- def test_add_vertices
88
- dg = AdjacencyGraph.new
89
- dg.add_vertices 1,3,2,4
90
- assert_equal dg.vertices.sort, [1,2,3,4]
91
-
92
- dg.remove_vertices 1,3
93
- assert_equal dg.vertices.sort, [2,4]
94
-
95
- dg.remove_vertices 1,3,Object # ones again
96
- assert_equal dg.vertices.sort, [2,4]
97
- end
98
-
99
- def test_reverse
100
- assert_equal(@dg, @dg.reverse)
101
- end
102
- end