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.
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