Bugfix: Binary search wrapper returns non-existing index (#11991)

This commit is contained in:
Mariss Tubelis 2025-01-05 15:42:33 +01:00 committed by GitHub
parent a77a63b16b
commit 97b564b718
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 21 additions and 1 deletions

View File

@ -40,7 +40,7 @@ function binarySearch(metaset, axis, value, intersect) {
result.lo -= Math.max(0, distanceToDefinedLo);
const distanceToDefinedHi = (_parsed
.slice(result.hi - 1)
.slice(result.hi)
.findIndex(
point => !isNullOrUndef(point[vScale.axis])));
result.hi += Math.max(0, distanceToDefinedHi);

View File

@ -972,6 +972,26 @@ describe('Core.Interaction', function() {
data: [12, -1, null, null, null, null, -1, 2],
clickPointIndex: 4,
expectedNearestPointIndex: 6
},
{
data: [null, 2],
clickPointIndex: 0,
expectedNearestPointIndex: 1
},
{
data: [2, null],
clickPointIndex: 1,
expectedNearestPointIndex: 0
},
{
data: [null, null, 2],
clickPointIndex: 0,
expectedNearestPointIndex: 2
},
{
data: [2, null, null],
clickPointIndex: 2,
expectedNearestPointIndex: 0
}
];
testCases.forEach(({data, clickPointIndex, expectedNearestPointIndex}, i) => {