From 21ac84e2d412c8b6bc12c26a0df76c2ab545b234 Mon Sep 17 00:00:00 2001 From: ThaiRC Date: Wed, 22 Jul 2026 17:54:09 +0700 Subject: [PATCH 1/2] fix: handle undefined effort in getEffortScale (#1525) --- .../hgportpointpathingsolver/types.ts | 2 +- .../TinyHypergraphPortPointPathingSolver.ts | 9 +++++---- tests/get-effort-scale.test.ts | 15 +++++++++++++++ 3 files changed, 21 insertions(+), 5 deletions(-) create mode 100644 tests/get-effort-scale.test.ts diff --git a/lib/solvers/PortPointPathingSolver/hgportpointpathingsolver/types.ts b/lib/solvers/PortPointPathingSolver/hgportpointpathingsolver/types.ts index 597c13955..b0dd9c055 100644 --- a/lib/solvers/PortPointPathingSolver/hgportpointpathingsolver/types.ts +++ b/lib/solvers/PortPointPathingSolver/hgportpointpathingsolver/types.ts @@ -92,7 +92,7 @@ export interface HgPortPointPathingSolverParams { colorMap?: Record inputSolvedRoutes?: SolvedRoutesHg[] layerCount: number - effort: number + effort?: number preserveTerminalPcbPortIds?: boolean minViaPadDiameter?: number flags: { diff --git a/lib/solvers/PortPointPathingSolver/tinyhypergraph/TinyHypergraphPortPointPathingSolver.ts b/lib/solvers/PortPointPathingSolver/tinyhypergraph/TinyHypergraphPortPointPathingSolver.ts index 4bec9097e..6bb81554e 100644 --- a/lib/solvers/PortPointPathingSolver/tinyhypergraph/TinyHypergraphPortPointPathingSolver.ts +++ b/lib/solvers/PortPointPathingSolver/tinyhypergraph/TinyHypergraphPortPointPathingSolver.ts @@ -129,7 +129,8 @@ const DUPLICATE_PORT_TRAVERSAL_PENALTY = 150 const DEFAULT_CRAMPED_PORT_TRAVERSAL_PENALTY = 150 const MAX_CONNECTIONS_FOR_DUPLICATE_CONGESTED_PORT_PREPASS = 180 -const getEffortScale = (effort: number) => Math.max(effort, 1e-2) +export const getEffortScale = (effort?: number) => + Math.max(Number.isFinite(effort) ? (effort as number) : 1, 1e-2) const getTinyViaSizeOptions = ( minViaPadDiameter?: number, @@ -139,7 +140,7 @@ const getTinyViaSizeOptions = ( : {} const getTinyHyperGraphSolveGraphOptions = ( - effort: number, + effort?: number, minViaPadDiameter?: number, ): TinyHyperGraphSolverOptions => { const effortScale = getEffortScale(effort) @@ -153,7 +154,7 @@ const getTinyHyperGraphSolveGraphOptions = ( } const getTinyHyperGraphSectionSolverOptions = ( - effort: number, + effort?: number, minViaPadDiameter?: number, ): TinyHyperGraphSectionSolverOptions => { const effortScale = getEffortScale(effort) @@ -168,7 +169,7 @@ const getTinyHyperGraphSectionSolverOptions = ( const getTinyHyperGraphPipelineInput = ( serializedHyperGraph: SerializedHyperGraph, - effort: number, + effort?: number, minViaPadDiameter?: number, ): TinyHyperGraphSectionPipelineInput => ({ serializedHyperGraph, diff --git a/tests/get-effort-scale.test.ts b/tests/get-effort-scale.test.ts new file mode 100644 index 000000000..dc19454ee --- /dev/null +++ b/tests/get-effort-scale.test.ts @@ -0,0 +1,15 @@ +import { expect, test } from "bun:test" +import { getEffortScale } from "../lib/solvers/PortPointPathingSolver/tinyhypergraph/TinyHypergraphPortPointPathingSolver" + +test("getEffortScale handles undefined and numeric values correctly", () => { + // undefined should fallback to 1 + expect(getEffortScale(undefined)).toBe(1) + // NaN should fallback to 1 + expect(getEffortScale(Number.NaN)).toBe(1) + // Normal effort value + expect(getEffortScale(2)).toBe(2) + // Fractional effort value above minimum + expect(getEffortScale(0.5)).toBe(0.5) + // Very small effort should be floored at 0.01 (1e-2) + expect(getEffortScale(0.001)).toBe(0.01) +}) From 344e4bb29f8b5de26f0c9f983494236ed4932862 Mon Sep 17 00:00:00 2001 From: ThaiRC Date: Wed, 22 Jul 2026 18:00:21 +0700 Subject: [PATCH 2/2] fix(types): default params.effort to 1 in HgPortPointPathingSolverClass --- .../hgportpointpathingsolver/HgPortPointPathingSolverClass.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/solvers/PortPointPathingSolver/hgportpointpathingsolver/HgPortPointPathingSolverClass.ts b/lib/solvers/PortPointPathingSolver/hgportpointpathingsolver/HgPortPointPathingSolverClass.ts index 22588835e..110ae5beb 100644 --- a/lib/solvers/PortPointPathingSolver/hgportpointpathingsolver/HgPortPointPathingSolverClass.ts +++ b/lib/solvers/PortPointPathingSolver/hgportpointpathingsolver/HgPortPointPathingSolverClass.ts @@ -56,7 +56,7 @@ export class HgPortPointPathingSolver extends HyperGraphSolver< this.totalRipCount = 0 if (params.weights.MAX_ITERATIONS_PER_PATH > 0) { this.MAX_ITERATIONS = - params.weights.MAX_ITERATIONS_PER_PATH * params.effort + params.weights.MAX_ITERATIONS_PER_PATH * (params.effort ?? 1) } }