-
Notifications
You must be signed in to change notification settings - Fork 38.9k
Operator precedence bug in fuzzyScore2 test assertion - comparison never evaluated #304448
Copy link
Copy link
Closed
Labels
debtCode quality issuesCode quality issuesinsiders-releasedPatch has been released in VS Code InsidersPatch has been released in VS Code Insiders
Milestone
Description
Bug
In fuzzyScorer.test.ts, the assertScore() helper in the fuzzyScore2 (multiple queries) test contains an operator precedence bug:
assert.ok(multiScore ?? 0 >= ((firstSingleScore ?? 0) + (secondSingleScore ?? 0)));The >= operator (precedence 11) binds tighter than ?? (precedence 5), so JavaScript parses this as:
assert.ok(multiScore ?? (0 >= ((firstSingleScore ?? 0) + (secondSingleScore ?? 0))))When multiScore is a number (the normal case for a successful match), ?? short-circuits and assert.ok(positiveNumber) passes due to truthiness. The >= comparison is never evaluated.
The test claims to verify that a multi-query score is at least as large as the sum of individual query scores, but it does not actually check that.
Verification
const multiScore = 42;
const firstSingleScore = 100;
const secondSingleScore = 100;
// Buggy (current): multiScore ?? (0 >= 200) => 42 => truthy => passes
assert.ok(multiScore ?? 0 >= (firstSingleScore + secondSingleScore)); // passes wrongly
// Fixed: (42) >= (200) => false => fails correctly
assert.ok((multiScore ?? 0) >= (firstSingleScore + secondSingleScore)); // fails as expectedLocation
- File:
src/vs/base/test/common/fuzzyScorer.test.ts, line 1242
Fix
Add parentheses to enforce the intended grouping:
assert.ok((multiScore ?? 0) >= ((firstSingleScore ?? 0) + (secondSingleScore ?? 0)));Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
debtCode quality issuesCode quality issuesinsiders-releasedPatch has been released in VS Code InsidersPatch has been released in VS Code Insiders