diff --git a/lib/DuplicateCongestedPortSolver.ts b/lib/DuplicateCongestedPortSolver.ts index 9e9aa50..d520951 100644 --- a/lib/DuplicateCongestedPortSolver.ts +++ b/lib/DuplicateCongestedPortSolver.ts @@ -31,6 +31,7 @@ export interface DuplicatedPortSummary { } export interface DuplicateCongestedPortSolverReport { + /** Number of distinct electrical nets using each port. */ portUseCounts: Record duplicatedPorts: DuplicatedPortSummary[] } @@ -455,7 +456,7 @@ export class DuplicateCongestedPortSolver extends BaseSolver { const { topology, problem } = loadSerializedHyperGraph( this.serializedHyperGraph, ) - const portUseCounts = new Map() + const portNetIds = new Map>() for (let routeId = 0; routeId < problem.routeCount; routeId++) { const routeProblem = createSingleRouteProblem(problem, routeId) @@ -476,14 +477,17 @@ export class DuplicateCongestedPortSolver extends BaseSolver { for (const portId of getUsedPortIdsForSolvedRoute(routeSolver)) { const serializedPortId = getSerializedPortId(topology, portId) - portUseCounts.set( - serializedPortId, - (portUseCounts.get(serializedPortId) ?? 0) + 1, - ) + const netIds = portNetIds.get(serializedPortId) ?? new Set() + netIds.add(problem.routeNet[routeId]!) + portNetIds.set(serializedPortId, netIds) } } - return portUseCounts + return new Map( + [...portNetIds].map( + ([portId, netIds]) => [portId, netIds.size] as const, + ), + ) } private duplicateCongestedPorts( diff --git a/tests/solver/__snapshots__/duplicate-congested-port-same-net-repro.snap.svg b/tests/solver/__snapshots__/duplicate-congested-port-same-net-repro.snap.svg index 394af0b..58be386 100644 --- a/tests/solver/__snapshots__/duplicate-congested-port-same-net-repro.snap.svg +++ b/tests/solver/__snapshots__/duplicate-congested-port-same-net-repro.snap.svg @@ -1,116 +1,116 @@ input: 1 shared bottleneck portprepass output: 2 bottleneck portsinput: 1 shared bottleneck portprepass output: 1 bottleneck port