3
3
import org .junit .Before ;
4
4
import org .junit .Rule ;
5
5
import org .junit .Test ;
6
- import org .neo4j .graphalgo .linkprediction .CommonNeighborsFinder ;
6
+ import org .neo4j .graphalgo .linkprediction .NeighborsFinder ;
7
7
import org .neo4j .graphdb .Direction ;
8
8
import org .neo4j .graphdb .Node ;
9
9
import org .neo4j .graphdb .RelationshipType ;
13
13
14
14
import java .util .Set ;
15
15
16
+ import static org .hamcrest .MatcherAssert .assertThat ;
17
+ import static org .hamcrest .core .IsCollectionContaining .hasItem ;
18
+ import static org .hamcrest .core .IsCollectionContaining .hasItems ;
16
19
import static org .junit .Assert .assertEquals ;
17
20
18
- public class CommonNeighborsFinderTest {
21
+ public class NeighborsFinderTest {
19
22
20
23
@ Rule
21
24
public final ImpermanentDatabaseRule DB = new ImpermanentDatabaseRule ();
@@ -39,12 +42,12 @@ public void excludeDirectRelationships() throws Throwable {
39
42
tx .success ();
40
43
}
41
44
42
- CommonNeighborsFinder commonNeighborsFinder = new CommonNeighborsFinder (api );
45
+ NeighborsFinder neighborsFinder = new NeighborsFinder (api );
43
46
44
47
try (Transaction tx = api .beginTx ()) {
45
48
Node node1 = api .getNodeById (0 );
46
49
Node node2 = api .getNodeById (1 );
47
- Set <Node > neighbors = commonNeighborsFinder .findCommonNeighbors (node1 , node2 , null , Direction .BOTH );
50
+ Set <Node > neighbors = neighborsFinder .findCommonNeighbors (node1 , node2 , null , Direction .BOTH );
48
51
49
52
assertEquals (0 , neighbors .size ());
50
53
}
@@ -59,11 +62,11 @@ public void sameNodeHasNoCommonNeighbors() throws Throwable {
59
62
tx .success ();
60
63
}
61
64
62
- CommonNeighborsFinder commonNeighborsFinder = new CommonNeighborsFinder (api );
65
+ NeighborsFinder neighborsFinder = new NeighborsFinder (api );
63
66
64
67
try (Transaction tx = api .beginTx ()) {
65
68
Node node1 = api .getNodeById (0 );
66
- Set <Node > neighbors = commonNeighborsFinder .findCommonNeighbors (node1 , node1 , null , Direction .BOTH );
69
+ Set <Node > neighbors = neighborsFinder .findCommonNeighbors (node1 , node1 , null , Direction .BOTH );
67
70
68
71
assertEquals (0 , neighbors .size ());
69
72
}
@@ -86,12 +89,12 @@ public void findNeighborsExcludingDirection() throws Throwable {
86
89
tx .success ();
87
90
}
88
91
89
- CommonNeighborsFinder commonNeighborsFinder = new CommonNeighborsFinder (api );
92
+ NeighborsFinder neighborsFinder = new NeighborsFinder (api );
90
93
91
94
try (Transaction tx = api .beginTx ()) {
92
95
Node node1 = api .getNodeById (0 );
93
96
Node node2 = api .getNodeById (1 );
94
- Set <Node > neighbors = commonNeighborsFinder .findCommonNeighbors (node1 , node2 , null , Direction .BOTH );
97
+ Set <Node > neighbors = neighborsFinder .findCommonNeighbors (node1 , node2 , null , Direction .BOTH );
95
98
96
99
assertEquals (2 , neighbors .size ());
97
100
}
@@ -111,12 +114,12 @@ public void findOutgoingNeighbors() throws Throwable {
111
114
tx .success ();
112
115
}
113
116
114
- CommonNeighborsFinder commonNeighborsFinder = new CommonNeighborsFinder (api );
117
+ NeighborsFinder neighborsFinder = new NeighborsFinder (api );
115
118
116
119
try (Transaction tx = api .beginTx ()) {
117
120
Node node1 = api .getNodeById (0 );
118
121
Node node2 = api .getNodeById (1 );
119
- Set <Node > neighbors = commonNeighborsFinder .findCommonNeighbors (node1 , node2 , FOLLOWS , Direction .OUTGOING );
122
+ Set <Node > neighbors = neighborsFinder .findCommonNeighbors (node1 , node2 , FOLLOWS , Direction .OUTGOING );
120
123
121
124
assertEquals (1 , neighbors .size ());
122
125
}
@@ -136,12 +139,12 @@ public void findIncomingNeighbors() throws Throwable {
136
139
tx .success ();
137
140
}
138
141
139
- CommonNeighborsFinder commonNeighborsFinder = new CommonNeighborsFinder (api );
142
+ NeighborsFinder neighborsFinder = new NeighborsFinder (api );
140
143
141
144
try (Transaction tx = api .beginTx ()) {
142
145
Node node1 = api .getNodeById (0 );
143
146
Node node2 = api .getNodeById (1 );
144
- Set <Node > neighbors = commonNeighborsFinder .findCommonNeighbors (node1 , node2 , FOLLOWS , Direction .INCOMING );
147
+ Set <Node > neighbors = neighborsFinder .findCommonNeighbors (node1 , node2 , FOLLOWS , Direction .INCOMING );
145
148
146
149
assertEquals (1 , neighbors .size ());
147
150
}
@@ -164,18 +167,92 @@ public void findNeighborsOfSpecificRelationshipType() throws Throwable {
164
167
tx .success ();
165
168
}
166
169
167
- CommonNeighborsFinder commonNeighborsFinder = new CommonNeighborsFinder (api );
170
+ NeighborsFinder neighborsFinder = new NeighborsFinder (api );
168
171
169
172
try (Transaction tx = api .beginTx ()) {
170
173
Node node1 = api .getNodeById (0 );
171
174
Node node2 = api .getNodeById (1 );
172
- Set <Node > neighbors = commonNeighborsFinder .findCommonNeighbors (node1 , node2 , COLLEAGUE , Direction .BOTH );
175
+ Set <Node > neighbors = neighborsFinder .findCommonNeighbors (node1 , node2 , COLLEAGUE , Direction .BOTH );
173
176
174
177
assertEquals (1 , neighbors .size ());
175
178
}
176
179
}
177
180
181
+ @ Test
182
+ public void dontCountDuplicates () throws Throwable {
183
+
184
+ Node node1 ;
185
+ Node node2 ;
186
+ Node node3 ;
187
+ Node node4 ;
188
+ try (Transaction tx = api .beginTx ()) {
189
+ node1 = api .createNode ();
190
+ node2 = api .createNode ();
191
+ node3 = api .createNode ();
192
+ node4 = api .createNode ();
193
+
194
+ node1 .createRelationshipTo (node3 , FRIEND );
195
+ node2 .createRelationshipTo (node3 , FRIEND );
196
+ node1 .createRelationshipTo (node4 , COLLEAGUE );
197
+ node2 .createRelationshipTo (node4 , COLLEAGUE );
198
+
199
+ tx .success ();
200
+ }
201
+
202
+ NeighborsFinder neighborsFinder = new NeighborsFinder (api );
203
+
204
+ try (Transaction tx = api .beginTx ()) {
205
+ Set <Node > neighbors = neighborsFinder .findNeighbors (node1 , node2 , null , Direction .BOTH );
206
+
207
+ assertEquals (2 , neighbors .size ());
208
+ assertThat (neighbors , hasItems (node3 , node4 ));
209
+ }
210
+ }
211
+
212
+ @ Test
213
+ public void otherNodeCountsAsNeighbor () throws Throwable {
214
+
215
+ Node node1 ;
216
+ Node node2 ;
217
+ try (Transaction tx = api .beginTx ()) {
218
+ node1 = api .createNode ();
219
+ node2 = api .createNode ();
220
+ node1 .createRelationshipTo (node2 , FRIEND );
178
221
222
+ tx .success ();
223
+ }
224
+
225
+ NeighborsFinder neighborsFinder = new NeighborsFinder (api );
226
+
227
+ try (Transaction tx = api .beginTx ()) {
228
+ Set <Node > neighbors = neighborsFinder .findNeighbors (node1 , node2 , null , Direction .BOTH );
229
+
230
+ assertEquals (2 , neighbors .size ());
231
+ assertThat (neighbors , hasItems (node1 , node2 ));
232
+ }
233
+ }
234
+
235
+ @ Test
236
+ public void otherNodeCountsAsOutgoingNeighbor () throws Throwable {
237
+ Node node1 ;
238
+ Node node2 ;
239
+ try (Transaction tx = api .beginTx ()) {
240
+ node1 = api .createNode ();
241
+ node2 = api .createNode ();
242
+ node1 .createRelationshipTo (node2 , FRIEND );
243
+
244
+ tx .success ();
245
+ }
246
+
247
+ NeighborsFinder neighborsFinder = new NeighborsFinder (api );
248
+
249
+ try (Transaction tx = api .beginTx ()) {
250
+ Set <Node > neighbors = neighborsFinder .findNeighbors (node1 , node2 , null , Direction .OUTGOING );
251
+
252
+ assertEquals (1 , neighbors .size ());
253
+ assertThat (neighbors , hasItems (node2 ));
254
+ }
255
+ }
179
256
180
257
}
181
258
0 commit comments