diff --git a/packages/core/graph/src/AdjacencyList.js b/packages/core/graph/src/AdjacencyList.js index 12843c4338b..d68b2463f6a 100644 --- a/packages/core/graph/src/AdjacencyList.js +++ b/packages/core/graph/src/AdjacencyList.js @@ -439,14 +439,18 @@ export default class AdjacencyList { (Array.isArray(type) ? type.includes(this.#nodes.typeOf(node)) : type === this.#nodes.typeOf(node)); - let nodes = []; + let seen = new Set(); let node = this.#nodes.head(from); while (node !== null) { if (matches(node)) { let edge = this.#nodes.firstOut(node); while (edge !== null) { - nodes.push(this.#edges.to(edge)); + let to = this.#edges.to(edge); + if (!seen.has(to)) { + nodes.push(to); + seen.add(to); + } edge = this.#edges.nextOut(edge); } } @@ -473,12 +477,17 @@ export default class AdjacencyList { : type === this.#nodes.typeOf(node)); let nodes = []; + let seen = new Set(); let node = this.#nodes.head(to); while (node !== null) { if (matches(node)) { let edge = this.#nodes.firstIn(node); while (edge !== null) { - nodes.push(this.#edges.from(edge)); + let from = this.#edges.from(edge); + if (!seen.has(from)) { + nodes.push(from); + seen.add(from); + } edge = this.#edges.nextIn(edge); } } diff --git a/packages/core/graph/test/AdjacencyList.test.js b/packages/core/graph/test/AdjacencyList.test.js index 4814422083e..32108771f98 100644 --- a/packages/core/graph/test/AdjacencyList.test.js +++ b/packages/core/graph/test/AdjacencyList.test.js @@ -57,6 +57,18 @@ describe('AdjacencyList', () => { assert.deepEqual(graph.getNodeIdsConnectedTo(node1), [0, 2, 4, 5, 6]); }); + it('getNodeIdsConnectedTo and getNodeIdsConnectedFrom should remove duplicate values', () => { + let graph = new AdjacencyList(); + let a = graph.addNode(); + let b = graph.addNode(); + let c = graph.addNode(); + graph.addEdge(a, b); + graph.addEdge(a, c); + graph.addEdge(a, b, 2); + assert.deepEqual(graph.getNodeIdsConnectedFrom(a, -1), [b, c]); + assert.deepEqual(graph.getNodeIdsConnectedTo(b, -1), [a]); + }); + it('removeEdge should remove an edge of a specific type from the graph', () => { let graph = new AdjacencyList(); let a = graph.addNode();