Skip to content

Commit e1241ff

Browse files
DarthMaxbrs96adamnsch
committed
Fix toRootNodeId Methods in HighLimitIdMap
Co-authored-by: Brian Shi <brian.shi@neotechnology.com> Co-authored-by: Adam Schill Collberg <adam.schill.collberg@protonmail.com>
1 parent 0f02348 commit e1241ff

File tree

2 files changed

+79
-5
lines changed

2 files changed

+79
-5
lines changed

core/src/main/java/org/neo4j/gds/core/loading/HighLimitIdMap.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -47,11 +47,6 @@ public long toMappedNodeId(long originalNodeId) {
4747
return super.toMappedNodeId(this.highToLowIdSpace.toMappedNodeId(originalNodeId));
4848
}
4949

50-
@Override
51-
public long toRootNodeId(long mappedNodeId) {
52-
return highToLowIdSpace.toOriginalNodeId(super.toRootNodeId(mappedNodeId));
53-
}
54-
5550
@Override
5651
public boolean contains(long originalNodeId) {
5752
return super.contains(highToLowIdSpace.toMappedNodeId(originalNodeId));
@@ -82,6 +77,11 @@ public long toFilteredNodeId(long rootNodeId) {
8277
return filteredIdMap.toFilteredNodeId(rootNodeId);
8378
}
8479

80+
@Override
81+
public long toRootNodeId(long mappedNodeId) {
82+
return filteredIdMap.toRootNodeId(mappedNodeId);
83+
}
84+
8585
@Override
8686
public boolean containsRootNodeId(long rootNodeId) {
8787
return filteredIdMap.containsRootNodeId(rootNodeId);
Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
/*
2+
* Copyright (c) "Neo4j"
3+
* Neo4j Sweden AB [http://neo4j.com]
4+
*
5+
* This file is part of Neo4j.
6+
*
7+
* Neo4j is free software: you can redistribute it and/or modify
8+
* it under the terms of the GNU General Public License as published by
9+
* the Free Software Foundation, either version 3 of the License, or
10+
* (at your option) any later version.
11+
*
12+
* This program is distributed in the hope that it will be useful,
13+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
14+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15+
* GNU General Public License for more details.
16+
*
17+
* You should have received a copy of the GNU General Public License
18+
* along with this program. If not, see <http://www.gnu.org/licenses/>.
19+
*/
20+
package org.neo4j.gds.core.loading;
21+
22+
import org.junit.jupiter.api.BeforeEach;
23+
import org.junit.jupiter.api.Nested;
24+
import org.junit.jupiter.api.Test;
25+
import org.neo4j.gds.NodeLabel;
26+
import org.neo4j.gds.core.loading.construction.NodeLabelTokens;
27+
28+
import java.util.List;
29+
30+
import static org.assertj.core.api.Assertions.assertThat;
31+
32+
class HighLimitIdMapTest {
33+
34+
private HighLimitIdMap idMap;
35+
36+
@BeforeEach
37+
void setup() {
38+
var builder = new LazyIdMapBuilder(4, true, false);
39+
builder.addNode(1000, NodeLabelTokens.ofStrings("A"));
40+
builder.addNode(2000, NodeLabelTokens.ofStrings("B"));
41+
builder.addNode(3000, NodeLabelTokens.ofStrings("C"));
42+
43+
this.idMap = builder.build().idMap();
44+
}
45+
46+
@Test
47+
void testToRootNodeId() {
48+
idMap.forEachNode(nodeId -> {
49+
assertThat(idMap.toRootNodeId(nodeId)).isEqualTo(nodeId);
50+
return true;
51+
});
52+
}
53+
54+
@Nested
55+
class FilteredHighLimitIdMap {
56+
57+
@Test
58+
void testToRootNodeId() {
59+
var filteredIdMapA = idMap.withFilteredLabels(List.of(NodeLabel.of("A")), 1).get();
60+
long expectedA = idMap.toMappedNodeId(1000);
61+
assertThat(filteredIdMapA.toRootNodeId(0)).isEqualTo(expectedA);
62+
63+
var filteredIdMapB = idMap.withFilteredLabels(List.of(NodeLabel.of("B")), 1).get();
64+
long expectedB = idMap.toMappedNodeId(2000);
65+
assertThat(filteredIdMapB.toRootNodeId(0)).isEqualTo(expectedB);
66+
67+
68+
var filteredIdMapC = idMap.withFilteredLabels(List.of(NodeLabel.of("C")), 1).get();
69+
long expectedC = idMap.toMappedNodeId(3000);
70+
assertThat(filteredIdMapC.toRootNodeId(0)).isEqualTo(expectedC);
71+
}
72+
}
73+
74+
}

0 commit comments

Comments
 (0)