Skip to content

Operator precedence bug in fuzzyScore2 test assertion - comparison never evaluated #304448

@ShehabSherif0

Description

@ShehabSherif0

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 expected

Location

  • 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)));

Metadata

Metadata

Assignees

Labels

debtCode quality issuesinsiders-releasedPatch has been released in VS Code Insiders

Type

No type

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions