rgraphum 0.0.1.alpha

Sign up to get free protection for your applications and to get access to all the features.
Files changed (106) hide show
  1. data/.gitignore +26 -0
  2. data/GLOSSARIES.md +108 -0
  3. data/GREMLIN.md +1398 -0
  4. data/Gemfile +4 -0
  5. data/LICENSE.txt +22 -0
  6. data/README.md +136 -0
  7. data/Rakefile +16 -0
  8. data/bin/.irbrc +41 -0
  9. data/bin/rgraphum_console +61 -0
  10. data/bin/rgraphum_runner +57 -0
  11. data/examples/ba_model/make.rb +19 -0
  12. data/examples/ba_model/make_dummy_twitter_rt_data.rb +0 -0
  13. data/examples/basic/check_modularity.rb +27 -0
  14. data/examples/basic/make_graph.rb +12 -0
  15. data/examples/parser/dot.rb +28 -0
  16. data/examples/sis_model/lifegame.rb +161 -0
  17. data/graph_struct.jpg +0 -0
  18. data/lib/rgraphum/analyzer/linear_regression.rb +31 -0
  19. data/lib/rgraphum/analyzer/meme_tracker.rb +296 -0
  20. data/lib/rgraphum/analyzer/twitter/rt_at_mark.rb +45 -0
  21. data/lib/rgraphum/analyzer.rb +8 -0
  22. data/lib/rgraphum/cluster.rb +67 -0
  23. data/lib/rgraphum/communities.rb +65 -0
  24. data/lib/rgraphum/community.rb +86 -0
  25. data/lib/rgraphum/cosine_similarity_matrix.rb +40 -0
  26. data/lib/rgraphum/edge.rb +194 -0
  27. data/lib/rgraphum/edges.rb +161 -0
  28. data/lib/rgraphum/ext/cosine_similarity_matrix.rb +79 -0
  29. data/lib/rgraphum/ext/linear_regression.rb +22 -0
  30. data/lib/rgraphum/ext/tf_idf.rb +52 -0
  31. data/lib/rgraphum/graph/gremlin.rb +193 -0
  32. data/lib/rgraphum/graph/math/clustering_coefficient.rb +53 -0
  33. data/lib/rgraphum/graph/math/community_detection.rb +141 -0
  34. data/lib/rgraphum/graph/math/degree_distribution.rb +50 -0
  35. data/lib/rgraphum/graph/math/dijkstra.rb +331 -0
  36. data/lib/rgraphum/graph/math.rb +45 -0
  37. data/lib/rgraphum/graph.rb +267 -0
  38. data/lib/rgraphum/importer.rb +97 -0
  39. data/lib/rgraphum/marshal.rb +26 -0
  40. data/lib/rgraphum/motifs.rb +8 -0
  41. data/lib/rgraphum/parsers/flare.rb +42 -0
  42. data/lib/rgraphum/parsers/gephi.rb +193 -0
  43. data/lib/rgraphum/parsers/graphviz.rb +78 -0
  44. data/lib/rgraphum/parsers/miserables.rb +54 -0
  45. data/lib/rgraphum/parsers.rb +32 -0
  46. data/lib/rgraphum/path.rb +37 -0
  47. data/lib/rgraphum/query.rb +130 -0
  48. data/lib/rgraphum/rgraphum_array.rb +159 -0
  49. data/lib/rgraphum/rgraphum_array_dividers.rb +43 -0
  50. data/lib/rgraphum/rgraphum_random.rb +5 -0
  51. data/lib/rgraphum/simulator/ba_model.rb +140 -0
  52. data/lib/rgraphum/simulator/sir_model.rb +178 -0
  53. data/lib/rgraphum/simulator/sis_model.rb +158 -0
  54. data/lib/rgraphum/simulator.rb +29 -0
  55. data/lib/rgraphum/statistic/power_law.rb +9 -0
  56. data/lib/rgraphum/t.rb +12 -0
  57. data/lib/rgraphum/tf_idf.rb +27 -0
  58. data/lib/rgraphum/version.rb +3 -0
  59. data/lib/rgraphum/vertex.rb +354 -0
  60. data/lib/rgraphum/vertices.rb +97 -0
  61. data/lib/rgraphum.rb +38 -0
  62. data/performance/add-vertices-edges.rb +20 -0
  63. data/performance/add-vertices.rb +12 -0
  64. data/performance/build-graph.rb +19 -0
  65. data/performance/delete-graph.rb +24 -0
  66. data/performance/delete-vertices.rb +25 -0
  67. data/performance/refer-graph.rb +23 -0
  68. data/rgraphum.gemspec +30 -0
  69. data/test/lib/rgraphum/analyzer/linear_regression_test.rb +20 -0
  70. data/test/lib/rgraphum/analyzer/meme_tracker_test.rb +383 -0
  71. data/test/lib/rgraphum/analyzer/twitter/rt_at_mark_test.rb +120 -0
  72. data/test/lib/rgraphum/array_test.rb +95 -0
  73. data/test/lib/rgraphum/bubble_test.rb +7 -0
  74. data/test/lib/rgraphum/communities_test.rb +53 -0
  75. data/test/lib/rgraphum/cosine_similarity_test.rb +18 -0
  76. data/test/lib/rgraphum/edge_test.rb +89 -0
  77. data/test/lib/rgraphum/edges_test.rb +178 -0
  78. data/test/lib/rgraphum/graph_builder_test.rb +64 -0
  79. data/test/lib/rgraphum/graph_dup_test.rb +199 -0
  80. data/test/lib/rgraphum/graph_plus_test.rb +80 -0
  81. data/test/lib/rgraphum/graph_test.rb +512 -0
  82. data/test/lib/rgraphum/gremlin_test.rb +145 -0
  83. data/test/lib/rgraphum/importers/idg_json_edges.json +20 -0
  84. data/test/lib/rgraphum/importers/idg_json_test.rb +207 -0
  85. data/test/lib/rgraphum/importers/idg_json_vertices.json +46 -0
  86. data/test/lib/rgraphum/math/average_distance_matrix_test.rb +142 -0
  87. data/test/lib/rgraphum/math/clustering_coefficient_test.rb +219 -0
  88. data/test/lib/rgraphum/math/community_test.rb +78 -0
  89. data/test/lib/rgraphum/math/degree_distribution_test.rb +40 -0
  90. data/test/lib/rgraphum/math/dijkstra_test.rb +146 -0
  91. data/test/lib/rgraphum/math/modularity_test.rb +154 -0
  92. data/test/lib/rgraphum/math/quick_average_distance_matrix_test.rb +84 -0
  93. data/test/lib/rgraphum/path_test.rb +44 -0
  94. data/test/lib/rgraphum/query/enumerable_test.rb +42 -0
  95. data/test/lib/rgraphum/query/where_operators_test.rb +75 -0
  96. data/test/lib/rgraphum/query/where_test.rb +59 -0
  97. data/test/lib/rgraphum/simulator/ba_model_test.rb +75 -0
  98. data/test/lib/rgraphum/simulator/sir_model_test.rb +513 -0
  99. data/test/lib/rgraphum/simulator/sis_model_test.rb +478 -0
  100. data/test/lib/rgraphum/simulator_test.rb +22 -0
  101. data/test/lib/rgraphum/tf_idf_test.rb +30 -0
  102. data/test/lib/rgraphum/vertex_test.rb +50 -0
  103. data/test/lib/rgraphum/vertices_test.rb +180 -0
  104. data/test/test_helper.rb +98 -0
  105. data/tmp/.gitkeep +0 -0
  106. metadata +254 -0
@@ -0,0 +1,89 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+ require 'rgraphum'
4
+ require 'test_helper'
5
+
6
+ class RgraphumEdgeTest < MiniTest::Test
7
+ def setup
8
+ @graph = Rgraphum::Graph.new
9
+ @graph.vertices << { id: 1, label: "hoge" }
10
+ @graph.vertices << { id: 2, label: "huga" }
11
+
12
+ @vertex0, @vertex1 = @graph.vertices
13
+
14
+ @vertex0.edges << { source: @vertex0, target: @vertex1 }
15
+
16
+ @edge0 = @graph.edges[0]
17
+ end
18
+
19
+ def test_find_vertices_for_source_and_target
20
+ source_vertex = @edge0.find_vertex(:source, @graph.vertices)
21
+ p source_vertex if Rgraphum.verbose?
22
+ end
23
+
24
+ def test_vertex_within_term
25
+ t = Time.now
26
+ vertex_a = Rgraphum::Vertex.new
27
+ vertex_a.start = t
28
+ vertex_a.end = t + 2
29
+
30
+ vertex_b = Rgraphum::Vertex.new
31
+ vertex_b.start = t + 1
32
+ vertex_b.end = t + 3
33
+
34
+ assert_equal true, vertex_a.within_term(vertex_b)
35
+ assert_equal false, vertex_b.within_term(vertex_a)
36
+ end
37
+
38
+ def test_edge_dump_and_load
39
+ vertex1 = Rgraphum::Vertex.new(id: 1, label: "vertex 1")
40
+ vertex2 = Rgraphum::Vertex.new(id: 2, label: "vertex 2")
41
+ edge = Rgraphum::Edge.new({source: vertex1, target: vertex2})
42
+
43
+ data = Marshal.dump(edge)
44
+ edge_dash = Marshal.load(data)
45
+
46
+ rg_assert_equal edge, edge_dash
47
+ rg_assert_equal edge.source, edge_dash.source
48
+ rg_assert_equal edge.target, edge_dash.target
49
+ end
50
+
51
+ def test_invalid_field
52
+ v1 = Rgraphum::Vertex.new(label: "1")
53
+ v2 = Rgraphum::Vertex.new(label: "2")
54
+
55
+ assert_raises(ArgumentError) do
56
+ Rgraphum::Edge.new(source: v1, target: v2, labeeeeeeeeeeeeeeeeeeeel: "label")
57
+ end
58
+
59
+ assert_raises(ArgumentError) do
60
+ Rgraphum::Edge.new(source: v1, target: v2, label: "label", labeeeeeeeeeeeeeeeeeeeel: "label")
61
+ end
62
+ end
63
+
64
+ def test_invalid_source
65
+ v1 = Rgraphum::Vertex.new(label: "1")
66
+ v2 = Rgraphum::Vertex.new(label: "2")
67
+
68
+ assert_raises(ArgumentError) do
69
+ Rgraphum::Edge.new(target: v2, label: "label")
70
+ end
71
+
72
+ assert_raises(ArgumentError) do
73
+ Rgraphum::Edge.new(source: nil, target: v2, label: "label")
74
+ end
75
+ end
76
+
77
+ def test_invalid_target
78
+ v1 = Rgraphum::Vertex.new(label: "1")
79
+ v2 = Rgraphum::Vertex.new(label: "2")
80
+
81
+ assert_raises(ArgumentError) do
82
+ Rgraphum::Edge.new(source: v1, label: "label")
83
+ end
84
+
85
+ assert_raises(ArgumentError) do
86
+ Rgraphum::Edge.new(source: v1, target: nil, label: "label")
87
+ end
88
+ end
89
+ end
@@ -0,0 +1,178 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+ require 'rgraphum'
4
+ require 'test_helper'
5
+
6
+ class RgraphumEdgesTest < MiniTest::Test
7
+ def setup
8
+ @graph = Rgraphum::Graph.new
9
+ @graph.vertices << { id: 1, label: "hoge" }
10
+ @graph.vertices << { id: 2, label: "huga" }
11
+
12
+ @vertex0, @vertex1 = @graph.vertices
13
+ @vertex0.edges << { source: @vertex0, target: @vertex1 }
14
+
15
+ @edge0 = @graph.edges[0]
16
+ end
17
+
18
+ def test_edges
19
+ assert_instance_of Rgraphum::Vertex, @vertex0
20
+ assert_instance_of Rgraphum::Edges, @vertex0.edges
21
+
22
+ # rg_assert_equal [ { id: 0, :source => @vertex0, target: @vertex1 } ], @vertex0.edges
23
+ # rg_assert_equal [ { id: 0, :source => @vertex0, target: @vertex1 } ], @vertex1.edges
24
+ # rg_assert_equal [ { id: 0, :source => @vertex0, target: @vertex1 } ], @graph.edges
25
+
26
+ # rg_assert_equal [ { id: 0, :source => @vertex0, target: @vertex1 } ], @vertex0.edges
27
+ assert_equal 1, @vertex0.edges.size
28
+ assert_equal 0, @vertex0.edges[0].id
29
+ rg_assert_equal @vertex0, @vertex0.edges[0].source
30
+ rg_assert_equal @vertex1, @vertex0.edges[0].target
31
+
32
+ # rg_assert_equal [ { id: 0, :source => @vertex0, target: @vertex1 } ], @vertex1.edges
33
+ assert_equal 1, @vertex1.edges.size
34
+ assert_equal 0, @vertex1.edges[0].id
35
+ rg_assert_equal @vertex0, @vertex1.edges[0].source
36
+ rg_assert_equal @vertex1, @vertex1.edges[0].target
37
+
38
+ # rg_assert_equal [ { id: 0, :source => @vertex0, target: @vertex1 } ], @graph.edges
39
+ assert_equal 1, @graph.edges.size
40
+ assert_equal 0, @graph.edges[0].id
41
+ rg_assert_equal @vertex0, @graph.edges[0].source
42
+ rg_assert_equal @vertex1, @graph.edges[0].target
43
+ end
44
+
45
+ def test_edges_dump_and_load
46
+ vertex1 = Rgraphum::Vertex.new(id: 1, label: "vertex 1")
47
+ vertex2 = Rgraphum::Vertex.new(id: 2, label: "vertex 2")
48
+ vertex3 = Rgraphum::Vertex.new(id: 3, label: "vertex 3")
49
+ edge1 = Rgraphum::Edge.new(source: vertex1, target: vertex2)
50
+ edge2 = Rgraphum::Edge.new(source: vertex2, target: vertex3)
51
+ edges = [edge1, edge2, edge1]
52
+
53
+ data = Marshal.dump(edges)
54
+ edges_dash = Marshal.load(data)
55
+
56
+ rg_assert_equal edges, edges_dash
57
+ rg_refute_equal edges_dash[0], edges_dash[1]
58
+ assert_same edges_dash[0], edges_dash[2]
59
+ end
60
+
61
+ def test_delete
62
+ @graph.edges << { source: @vertex1, target: @vertex0 }
63
+ @edge1 = @graph.edges[-1]
64
+ # v0 -> v1
65
+ # <-
66
+ assert_equal 2, @graph.vertices.size
67
+ assert_equal 2, @graph.edges.size
68
+
69
+ @graph.edges.delete @edge0
70
+
71
+ # v0 v1
72
+ # <-
73
+ assert_equal 2, @graph.vertices.size
74
+ assert_equal 1, @graph.edges.size
75
+ assert_equal 1, @vertex0.edges.size
76
+ assert_equal 1, @vertex1.edges.size
77
+ rg_assert_equal @edge1,@vertex0.edges[0]
78
+ rg_assert_equal @edge1,@vertex1.edges[0]
79
+ rg_assert_equal @edge1.source, @vertex1
80
+ rg_assert_equal @edge1.target, @vertex0
81
+ end
82
+
83
+ # delete_if calls delete
84
+ # delete_if == reject!
85
+ def test_delete_if
86
+ graph = Rgraphum::Graph.new
87
+ (0..9).each do |i|
88
+ graph.vertices << { label: "v#{i}" }
89
+ end
90
+ (0..9).each do |i|
91
+ graph.edges << {
92
+ source: graph.vertices[i],
93
+ target: graph.vertices[(i+1) % 10],
94
+ weight: i,
95
+ }
96
+ end
97
+
98
+ # v0 -> v1 -> v2 -> v3 -> v4 -> v5 -> v6 -> v7 -> v8 -> v9
99
+ # ^ |
100
+ # +-----------------------------------------------------+
101
+ assert_equal 10, graph.vertices.size
102
+ assert_equal 10, graph.edges.size
103
+ graph.vertices do |vertex|
104
+ assert_equal 2, vertex.edges.size
105
+ end
106
+
107
+ graph.edges.delete_if { |edge| edge.weight.odd? }
108
+ # graph.edges.reject! { |edge| edge.weight.odd? }
109
+
110
+ # v0 -> v1 v2 -> v3 v4 -> v5 v6 -> v7 v8 -> v9
111
+ assert_equal 10, graph.vertices.size
112
+ assert_equal 5, graph.edges.size, "edges.size was 10 but deleted 5 edges"
113
+
114
+ assert_equal 0, graph.edges[0].weight
115
+ assert_equal 2, graph.edges[1].weight
116
+ assert_equal 4, graph.edges[2].weight
117
+ assert_equal 6, graph.edges[3].weight
118
+ assert_equal 8, graph.edges[4].weight
119
+
120
+ graph.vertices do |vertex|
121
+ assert_equal 1, vertex.edges.size
122
+ end
123
+ end
124
+
125
+ def test_reject
126
+ graph = Rgraphum::Graph.new
127
+ (0..9).each do |i|
128
+ graph.vertices << { label: "v#{i}" }
129
+ end
130
+ (0..9).each do |i|
131
+ graph.edges << {
132
+ source: graph.vertices[i],
133
+ target: graph.vertices[(i+1) % 10],
134
+ weight: i,
135
+ }
136
+ end
137
+
138
+ # v0 -> v1 -> v2 -> v3 -> v4 -> v5 -> v6 -> v7 -> v8 -> v9
139
+ # ^ |
140
+ # +-----------------------------------------------------+
141
+ assert_equal 10, graph.edges.size
142
+
143
+ rejected_edges = graph.edges.reject { |edge| edge.weight.odd? }
144
+
145
+ assert_equal 10, graph.vertices.size, "Should not change size"
146
+ assert_equal 10, graph.edges.size, "Should not change size"
147
+
148
+ # v0 -> v1 v2 -> v3 v4 -> v5 v6 -> v7 v8 -> v9
149
+ assert_equal 5, rejected_edges.size, "edges.size was 10 but deleted 5 edges"
150
+ end
151
+
152
+ def test_build_with_invalid_source
153
+ v1 = @graph.vertices.build(label: "1")
154
+ v2 = @graph.vertices.build(label: "2")
155
+
156
+ assert_raises(ArgumentError) do
157
+ @graph.edges.build(target: v2, label: "label")
158
+ end
159
+
160
+ assert_raises(ArgumentError) do
161
+ @graph.edges.build(source: nil, target: v2, label: "label")
162
+ end
163
+ end
164
+
165
+ def test_build_with_invalid_target
166
+ v1 = @graph.vertices.build(label: "1")
167
+ v2 = @graph.vertices.build(label: "2")
168
+
169
+ assert_raises(ArgumentError) do
170
+ @graph.edges.build(source: v1, label: "label")
171
+ end
172
+
173
+ assert_raises(ArgumentError) do
174
+ @graph.edges.build(source: v1, target: nil, label: "label")
175
+ end
176
+ end
177
+
178
+ end
@@ -0,0 +1,64 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+ require 'rgraphum'
4
+ require 'test_helper'
5
+
6
+ class RgraphumGraphBuilderTest < MiniTest::Test
7
+
8
+ def test_build_from_from_adjacency_matrix
9
+ labels = ["hoge","huga","piyo","puyo"]
10
+ matrix = [ [ 1.0 , 0.7 , 0.7 , nil ],
11
+ [ nil , 1.0 , nil , 0.9 ],
12
+ [ nil , 0.8 , 1.0 , 0.3 ],
13
+ [ nil , nil , nil , 1.0 ] ]
14
+
15
+
16
+ graph = Rgraphum::Graph.build_from_adjacency_matrix(matrix,labels)
17
+
18
+ assert_equal 4, graph.edges.size
19
+
20
+ rg_assert_equal graph.edges[0].source, graph.vertices[0]
21
+ rg_assert_equal graph.edges[0].target, graph.vertices[1]
22
+ rg_assert_equal graph.edges[0].weight, 0.7
23
+
24
+ rg_assert_equal graph.edges[1].source, graph.vertices[0]
25
+ rg_assert_equal graph.edges[1].target, graph.vertices[2]
26
+ rg_assert_equal graph.edges[1].weight, 0.7
27
+
28
+ rg_assert_equal graph.edges[2].source, graph.vertices[1]
29
+ rg_assert_equal graph.edges[2].target, graph.vertices[3]
30
+ rg_assert_equal graph.edges[2].weight, 0.9
31
+
32
+ rg_assert_equal graph.edges[3].source, graph.vertices[2]
33
+ rg_assert_equal graph.edges[3].target, graph.vertices[1]
34
+ rg_assert_equal graph.edges[3].weight, 0.8
35
+
36
+
37
+ graph = Rgraphum::Graph.build_from_adjacency_matrix(matrix,labels,{:loop=>true,limit:0.8})
38
+
39
+ rg_assert_equal graph.edges[0].source, graph.vertices[0]
40
+ rg_assert_equal graph.edges[0].target, graph.vertices[0]
41
+ rg_assert_equal graph.edges[0].weight, 1.0
42
+
43
+ rg_assert_equal graph.edges[1].source, graph.vertices[1]
44
+ rg_assert_equal graph.edges[1].target, graph.vertices[1]
45
+ rg_assert_equal graph.edges[1].weight, 1.0
46
+
47
+ rg_assert_equal graph.edges[2].source, graph.vertices[1]
48
+ rg_assert_equal graph.edges[2].target, graph.vertices[3]
49
+ rg_assert_equal graph.edges[2].weight, 0.9
50
+
51
+ rg_assert_equal graph.edges[3].source, graph.vertices[2]
52
+ rg_assert_equal graph.edges[3].target, graph.vertices[1]
53
+ rg_assert_equal graph.edges[3].weight, 0.8
54
+
55
+ rg_assert_equal graph.edges[4].source, graph.vertices[2]
56
+ rg_assert_equal graph.edges[4].target, graph.vertices[2]
57
+ rg_assert_equal graph.edges[4].weight, 1.0
58
+
59
+ rg_assert_equal graph.edges[5].source, graph.vertices[3]
60
+ rg_assert_equal graph.edges[5].target, graph.vertices[3]
61
+ rg_assert_equal graph.edges[5].weight, 1.0
62
+
63
+ end
64
+ end
@@ -0,0 +1,199 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+ require 'rgraphum'
4
+ require 'test_helper'
5
+
6
+ class RgraphumDupTest < MiniTest::Test
7
+ def setup
8
+ @graph = Rgraphum::Graph.new
9
+ @graph.vertices << { id: 1, label: "hoge" }
10
+ @graph.vertices << { id: 2, label: "huga" }
11
+ @graph.vertices << { id: 3, label: "piyo" }
12
+
13
+ vertices = @graph.vertices
14
+ @graph.edges << { id: 1, source: vertices[0], target: vertices[1], weight: 1 }
15
+ @graph.edges << { id: 2, source: vertices[1], target: vertices[2], weight: 1 }
16
+ @graph.edges << { id: 3, source: vertices[2], target: vertices[0], weight: 1 }
17
+
18
+ @vertex_0 = @graph.vertices[0]
19
+ end
20
+
21
+ def test_edge_dup
22
+ edge_dup = @vertex_0.edges[0].dup
23
+
24
+ refute_same @vertex_0.edges[0], edge_dup
25
+ end
26
+
27
+ def test_vertex_edges_dup
28
+ edges_dup = @vertex_0.edges.dup
29
+
30
+ refute_same @vertex_0.edges, edges_dup
31
+ assert_nil edges_dup.graph
32
+ assert_nil edges_dup.vertex
33
+
34
+ edges_dup.each_with_index do |edge,i|
35
+ rg_assert_equal edge, @vertex_0.edges[i]
36
+ refute_same edge, @vertex_0.edges[i]
37
+ end
38
+ end
39
+
40
+ def test_vertex_dup
41
+ # 1:hoge --- 2:huga
42
+ # \ /
43
+ # \ /
44
+ # 3:piyo
45
+
46
+ # 1:hoge----------|
47
+ # \ 1':hoge --- 2:huga
48
+ # \ | /
49
+ # \ | /
50
+ # \ | /
51
+ # 3:piyo
52
+
53
+ vertex = @vertex_0.dup
54
+
55
+ assert_instance_of Rgraphum::Vertex, vertex
56
+ refute_same vertex, @vertex_0
57
+
58
+ refute_empty vertex.edges
59
+ rg_assert_equal vertex.edges.vertex, vertex
60
+
61
+ assert_same vertex.edges.vertex, vertex
62
+
63
+ refute_same vertex.edges, @vertex_0.edges
64
+ vertex.edges.each_with_index do |edge,i|
65
+ rg_assert_equal edge, @vertex_0.edges[i]
66
+ refute_same edge, @vertex_0.edges[i]
67
+
68
+ rg_assert_equal vertex, edge.source unless edge.target == vertex
69
+ rg_assert_equal vertex, edge.target unless edge.source == vertex
70
+ rg_assert_equal @vertex_0, @vertex_0.edges[i].source unless @vertex_0.edges[i].target == @vertex_0
71
+ rg_assert_equal @vertex_0, @vertex_0.edges[i].target unless @vertex_0.edges[i].source == @vertex_0
72
+
73
+ assert (edge.source.object_id == vertex.object_id or edge.target.object_id == vertex.object_id)
74
+ assert_same vertex, edge.source unless edge.target.object_id == vertex.object_id
75
+ assert_same vertex, edge.target unless edge.source.object_id == vertex.object_id
76
+ end
77
+
78
+ # vertex.edges.each do |edge|
79
+ # p "vertex"
80
+ # p edge.object_id
81
+ # p edge
82
+ # end
83
+
84
+ # @graph.vertices.each do |vertex|
85
+ # vertex.edges.each do |edge|
86
+ # p "graph"
87
+ # p edge.object_id
88
+ # p edge
89
+ # end
90
+ # end
91
+ end
92
+
93
+ def test_vertices_dup
94
+ vertices = @graph.vertices.dup
95
+
96
+ rg_assert_equal @graph.vertices, vertices
97
+ assert_nil vertices.graph
98
+ refute_same @graph.vertices, vertices
99
+
100
+ [vertices, @graph.vertices].transpose.each do |a, b|
101
+ assert_instance_of Rgraphum::Vertex, a
102
+ rg_assert_equal b, a
103
+ refute_same b, a
104
+
105
+ refute_empty a.edges
106
+ assert_same a.edges.vertex, a
107
+
108
+ refute_same b.edges, a.edges
109
+
110
+ a.edges.each do |edge|
111
+ # assert i = b.edges.index(edge)
112
+ i = b.edges.index { |e| e.id == edge.id }
113
+
114
+ refute_same b.edges[i], edge
115
+
116
+ unless edge.target == a
117
+ rg_assert_equal a, edge.source
118
+ end
119
+
120
+ unless edge.source == a
121
+ rg_assert_equal a, edge.target
122
+ end
123
+
124
+ assert edge.source.object_id == a.object_id || edge.target.object_id == a.object_id
125
+ unless edge.target.object_id == a.object_id
126
+ assert_same a, edge.source
127
+ end
128
+ unless edge.source.object_id == a.object_id
129
+ assert_same a, edge.target
130
+ end
131
+
132
+ unless b.edges[i].target.object_id == b.object_id
133
+ assert_same b.edges[i].source, b
134
+ end
135
+ unless b.edges[i].source.object_id == b.object_id
136
+ assert_same b.edges[i].target, b
137
+ end
138
+ end
139
+ end
140
+ end
141
+
142
+ def test_graph_edges_dup
143
+ edges_dup = @graph.edges.dup
144
+
145
+ rg_assert_equal @graph.edges, edges_dup
146
+ refute_same @graph.edges, edges_dup
147
+ assert_nil edges_dup.graph
148
+ assert_nil edges_dup.vertex
149
+
150
+ @graph.vertices.each do |vertex|
151
+ edges_dup = vertex.edges.dup
152
+ refute_same vertex.edges, edges_dup
153
+ assert_nil edges_dup.graph
154
+ assert_nil edges_dup.vertex
155
+ end
156
+ end
157
+
158
+ def test_graph_dup
159
+ duped_graph = @graph.dup
160
+
161
+ assert_instance_of Rgraphum::Graph, duped_graph
162
+ refute_same duped_graph, @graph
163
+
164
+ rg_assert_equal duped_graph.vertices, @graph.vertices
165
+ refute_same duped_graph.vertices, @graph.vertices
166
+
167
+ rg_assert_equal duped_graph.edges, @graph.edges
168
+ refute_same duped_graph.edges, @graph.edges
169
+
170
+
171
+ @graph.vertices.each_with_index do |vertex, vertex_index|
172
+ duped_vertex = duped_graph.vertices[vertex_index]
173
+
174
+ rg_assert_equal duped_vertex, vertex
175
+ refute_same duped_vertex, vertex
176
+
177
+ vertex.edges.each_with_index do |edge,edge_index|
178
+ duped_edge = duped_vertex.edges[edge_index]
179
+
180
+ rg_assert_equal duped_edge, edge
181
+ refute_same duped_edge, edge
182
+
183
+ rg_assert_equal duped_edge.source, edge.source
184
+ refute_same duped_edge.source, edge.source
185
+ assert_same duped_graph.vertices.where(id: duped_edge.source.id).first, duped_edge.source
186
+
187
+ rg_assert_equal duped_edge.target, edge.target
188
+ refute_same duped_edge.target, edge.target
189
+ end
190
+ end
191
+
192
+ @graph.edges.each_with_index do |edge,edge_index|
193
+ duped_edge = duped_graph.edges[edge_index]
194
+
195
+ rg_assert_equal duped_edge, edge
196
+ refute_same duped_edge, edge
197
+ end
198
+ end
199
+ end
@@ -0,0 +1,80 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+ require 'rgraphum'
4
+ require 'test_helper'
5
+
6
+ class RgraphumPlusTest < MiniTest::Test
7
+ def setup
8
+ @graph_a = Rgraphum::Graph.new
9
+ @graph_a.vertices = [
10
+ { id: 1, label: "hoge" },
11
+ { id: 2, label: "huga" },
12
+ ]
13
+ vertices_a = @graph_a.vertices
14
+ @graph_a.edges << { id: 1, source: vertices_a[0], target: vertices_a[1], weight: 1}
15
+ @graph_a.edges << { id: 2, source: vertices_a[1], target: vertices_a[0], weight: 1}
16
+
17
+ @graph_b = Rgraphum::Graph.new
18
+ vertices_b = @graph_b.vertices = [
19
+ { id: 1, label: "piyo" },
20
+ { id: 2, label: "hogeratte" },
21
+ ]
22
+ vertices_b = @graph_b.vertices
23
+ @graph_b.edges << { id: 1, source: vertices_b[0], target: vertices_b[1], weight: 1 }
24
+ @graph_b.edges << { id: 2, source: vertices_b[1], target: vertices_b[0], weight: 1 }
25
+ end
26
+
27
+ def test_add
28
+ added_graph = @graph_a + @graph_b
29
+
30
+ assert_instance_of Rgraphum::Graph, added_graph
31
+ assert_equal [1,2,3,4], added_graph.vertices.id
32
+
33
+ refute_same @graph_a, added_graph
34
+ refute_same @graph_a.edges, added_graph.edges
35
+ refute_same @graph_b, added_graph
36
+ refute_same @graph_b.edges, added_graph.edges
37
+
38
+ @graph_a.vertices.each_with_index do |vertex, vertex_index|
39
+ added_vertex = added_graph.vertices[vertex_index]
40
+
41
+ rg_assert_equal vertex, added_vertex
42
+ refute_same vertex, added_vertex
43
+
44
+ vertex.edges.each_with_index do |edge, edge_index|
45
+ added_edge = added_vertex.edges[edge_index]
46
+
47
+ rg_assert_equal edge, added_edge
48
+ refute_same edge, added_edge
49
+
50
+ rg_assert_equal edge.source, added_edge.source
51
+ refute_same edge.source, added_edge.source
52
+ assert_same added_edge.source, added_graph.vertices.where(id: added_edge.source.id).first
53
+
54
+ rg_assert_equal edge.target, added_edge.target
55
+ refute_same edge.target, added_edge.target
56
+ end
57
+ end
58
+
59
+ @graph_b.vertices.each_with_index do |vertex, vertex_index|
60
+ added_vertex = added_graph.vertices[vertex_index + 2]
61
+
62
+ refute_same vertex, added_vertex
63
+
64
+ vertex.edges.each_with_index do |edge, edge_index|
65
+ added_edge = added_vertex.edges[edge_index]
66
+
67
+ refute_same edge, added_edge
68
+
69
+ assert_equal edge.id + 2, added_edge.id
70
+
71
+ refute_same edge.source, added_edge.source
72
+ assert_same added_edge.source, added_graph.vertices.where(id: added_edge.source.id).first
73
+
74
+ assert_equal edge.target.id + 2, added_edge.target.id
75
+ assert_equal edge.target.label, added_edge.target.label
76
+ refute_same edge.target, added_edge.target
77
+ end
78
+ end
79
+ end
80
+ end