Skip to content

Commit

Permalink
test: fix test-hash-seed for new V8 versions
Browse files Browse the repository at this point in the history
The test relied on V8 not optimizing functions that use `set.has()`.
Force V8 to not optimize it now that TurboFan knows about this method.

PR-URL: #44741
Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
Reviewed-By: Jiawen Geng <technicalcute@gmail.com>
Reviewed-By: James M Snell <jasnell@gmail.com>
  • Loading branch information
targos committed Oct 11, 2022
1 parent c9602ce commit 1acf033
Show file tree
Hide file tree
Showing 2 changed files with 11 additions and 4 deletions.
6 changes: 3 additions & 3 deletions test/fixtures/guess-hash-seed.js
Expand Up @@ -67,9 +67,6 @@ function hash_to_bucket(hash, numBuckets) {
function time_set_lookup(set, value) {
const t1 = process.hrtime();
for (let i = 0; i < 100; i++) {
// annoyingly, SetHas() is JS code and therefore potentially optimizable.
// However, SetHas() looks up the table using native code, and it seems like
// that's sufficient to prevent the optimizer from doing anything?
set.has(value);
}
const t = process.hrtime(t1);
Expand All @@ -78,6 +75,9 @@ function time_set_lookup(set, value) {
return secs * 1e9 + nanos;
}

// Prevent optimization of SetHas().
%NeverOptimizeFunction(time_set_lookup);

// Set with 256 buckets; bucket 0 full, others empty
const tester_set_buckets = 256;
const tester_set = new Set();
Expand Down
9 changes: 8 additions & 1 deletion test/pummel/test-hash-seed.js
Expand Up @@ -24,7 +24,14 @@ const requiredCallback = common.mustCall((results) => {
assert.strictEqual(seeds.length, kRepetitions);
});

const generateSeed = () => execFilePromise(process.execPath, [targetScript]);
function generateSeed() {
return execFilePromise(process.execPath, [
// Needed for %NeverOptimizeFunction.
'--allow-natives-syntax',
targetScript,
]);
}

const subprocesses = [...new Array(kRepetitions)].map(generateSeed);

Promise.all(subprocesses)
Expand Down

0 comments on commit 1acf033

Please sign in to comment.