rgraphum 0.0.1.alpha
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.
- data/.gitignore +26 -0
- data/GLOSSARIES.md +108 -0
- data/GREMLIN.md +1398 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +22 -0
- data/README.md +136 -0
- data/Rakefile +16 -0
- data/bin/.irbrc +41 -0
- data/bin/rgraphum_console +61 -0
- data/bin/rgraphum_runner +57 -0
- data/examples/ba_model/make.rb +19 -0
- data/examples/ba_model/make_dummy_twitter_rt_data.rb +0 -0
- data/examples/basic/check_modularity.rb +27 -0
- data/examples/basic/make_graph.rb +12 -0
- data/examples/parser/dot.rb +28 -0
- data/examples/sis_model/lifegame.rb +161 -0
- data/graph_struct.jpg +0 -0
- data/lib/rgraphum/analyzer/linear_regression.rb +31 -0
- data/lib/rgraphum/analyzer/meme_tracker.rb +296 -0
- data/lib/rgraphum/analyzer/twitter/rt_at_mark.rb +45 -0
- data/lib/rgraphum/analyzer.rb +8 -0
- data/lib/rgraphum/cluster.rb +67 -0
- data/lib/rgraphum/communities.rb +65 -0
- data/lib/rgraphum/community.rb +86 -0
- data/lib/rgraphum/cosine_similarity_matrix.rb +40 -0
- data/lib/rgraphum/edge.rb +194 -0
- data/lib/rgraphum/edges.rb +161 -0
- data/lib/rgraphum/ext/cosine_similarity_matrix.rb +79 -0
- data/lib/rgraphum/ext/linear_regression.rb +22 -0
- data/lib/rgraphum/ext/tf_idf.rb +52 -0
- data/lib/rgraphum/graph/gremlin.rb +193 -0
- data/lib/rgraphum/graph/math/clustering_coefficient.rb +53 -0
- data/lib/rgraphum/graph/math/community_detection.rb +141 -0
- data/lib/rgraphum/graph/math/degree_distribution.rb +50 -0
- data/lib/rgraphum/graph/math/dijkstra.rb +331 -0
- data/lib/rgraphum/graph/math.rb +45 -0
- data/lib/rgraphum/graph.rb +267 -0
- data/lib/rgraphum/importer.rb +97 -0
- data/lib/rgraphum/marshal.rb +26 -0
- data/lib/rgraphum/motifs.rb +8 -0
- data/lib/rgraphum/parsers/flare.rb +42 -0
- data/lib/rgraphum/parsers/gephi.rb +193 -0
- data/lib/rgraphum/parsers/graphviz.rb +78 -0
- data/lib/rgraphum/parsers/miserables.rb +54 -0
- data/lib/rgraphum/parsers.rb +32 -0
- data/lib/rgraphum/path.rb +37 -0
- data/lib/rgraphum/query.rb +130 -0
- data/lib/rgraphum/rgraphum_array.rb +159 -0
- data/lib/rgraphum/rgraphum_array_dividers.rb +43 -0
- data/lib/rgraphum/rgraphum_random.rb +5 -0
- data/lib/rgraphum/simulator/ba_model.rb +140 -0
- data/lib/rgraphum/simulator/sir_model.rb +178 -0
- data/lib/rgraphum/simulator/sis_model.rb +158 -0
- data/lib/rgraphum/simulator.rb +29 -0
- data/lib/rgraphum/statistic/power_law.rb +9 -0
- data/lib/rgraphum/t.rb +12 -0
- data/lib/rgraphum/tf_idf.rb +27 -0
- data/lib/rgraphum/version.rb +3 -0
- data/lib/rgraphum/vertex.rb +354 -0
- data/lib/rgraphum/vertices.rb +97 -0
- data/lib/rgraphum.rb +38 -0
- data/performance/add-vertices-edges.rb +20 -0
- data/performance/add-vertices.rb +12 -0
- data/performance/build-graph.rb +19 -0
- data/performance/delete-graph.rb +24 -0
- data/performance/delete-vertices.rb +25 -0
- data/performance/refer-graph.rb +23 -0
- data/rgraphum.gemspec +30 -0
- data/test/lib/rgraphum/analyzer/linear_regression_test.rb +20 -0
- data/test/lib/rgraphum/analyzer/meme_tracker_test.rb +383 -0
- data/test/lib/rgraphum/analyzer/twitter/rt_at_mark_test.rb +120 -0
- data/test/lib/rgraphum/array_test.rb +95 -0
- data/test/lib/rgraphum/bubble_test.rb +7 -0
- data/test/lib/rgraphum/communities_test.rb +53 -0
- data/test/lib/rgraphum/cosine_similarity_test.rb +18 -0
- data/test/lib/rgraphum/edge_test.rb +89 -0
- data/test/lib/rgraphum/edges_test.rb +178 -0
- data/test/lib/rgraphum/graph_builder_test.rb +64 -0
- data/test/lib/rgraphum/graph_dup_test.rb +199 -0
- data/test/lib/rgraphum/graph_plus_test.rb +80 -0
- data/test/lib/rgraphum/graph_test.rb +512 -0
- data/test/lib/rgraphum/gremlin_test.rb +145 -0
- data/test/lib/rgraphum/importers/idg_json_edges.json +20 -0
- data/test/lib/rgraphum/importers/idg_json_test.rb +207 -0
- data/test/lib/rgraphum/importers/idg_json_vertices.json +46 -0
- data/test/lib/rgraphum/math/average_distance_matrix_test.rb +142 -0
- data/test/lib/rgraphum/math/clustering_coefficient_test.rb +219 -0
- data/test/lib/rgraphum/math/community_test.rb +78 -0
- data/test/lib/rgraphum/math/degree_distribution_test.rb +40 -0
- data/test/lib/rgraphum/math/dijkstra_test.rb +146 -0
- data/test/lib/rgraphum/math/modularity_test.rb +154 -0
- data/test/lib/rgraphum/math/quick_average_distance_matrix_test.rb +84 -0
- data/test/lib/rgraphum/path_test.rb +44 -0
- data/test/lib/rgraphum/query/enumerable_test.rb +42 -0
- data/test/lib/rgraphum/query/where_operators_test.rb +75 -0
- data/test/lib/rgraphum/query/where_test.rb +59 -0
- data/test/lib/rgraphum/simulator/ba_model_test.rb +75 -0
- data/test/lib/rgraphum/simulator/sir_model_test.rb +513 -0
- data/test/lib/rgraphum/simulator/sis_model_test.rb +478 -0
- data/test/lib/rgraphum/simulator_test.rb +22 -0
- data/test/lib/rgraphum/tf_idf_test.rb +30 -0
- data/test/lib/rgraphum/vertex_test.rb +50 -0
- data/test/lib/rgraphum/vertices_test.rb +180 -0
- data/test/test_helper.rb +98 -0
- data/tmp/.gitkeep +0 -0
- 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
|