Skip to content

Commit 1fd8c86

Browse files
committed
remove sort from Set.prototype.intersection
babel/proposals#87 (comment) tc39/proposal-set-methods#94
1 parent e4a5bc9 commit 1fd8c86

File tree

8 files changed

+17
-28
lines changed

8 files changed

+17
-28
lines changed

CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
## Changelog
22
##### Unreleased
3+
- [`Set` methods proposal](https://github.com/tc39/proposal-set-methods):
4+
- Removed sort from `Set.prototype.intersection`, [March 2023 TC39 meeting](https://github.com/babel/proposals/issues/87#issuecomment-1478610425), [proposal-set-methods/94](https://github.com/tc39/proposal-set-methods/pull/94)
35
- [`Iterator.range` proposal](https://github.com/tc39/proposal-Number.range) moved to Stage 2, [March 2023 TC39 meeting](https://github.com/babel/proposals/issues/87#issuecomment-1480266760)
46
- (Async) Explicit Resource Management proposals:
57
- `(Async)DisposableStack.prototype.move` marks the original stack as disposed, [#1226](https://github.com/zloirock/core-js/issues/1226)

packages/core-js-pure/override/internals/set-helpers.js

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,5 @@ module.exports = {
99
add: caller('add', 1),
1010
has: caller('has', 1),
1111
remove: caller('delete', 1),
12-
proto: SetPrototype,
13-
$has: SetPrototype.has,
14-
$keys: SetPrototype.keys
12+
proto: SetPrototype
1513
};

packages/core-js/internals/set-helpers.js

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,5 @@ module.exports = {
99
add: uncurryThis(SetPrototype.add),
1010
has: uncurryThis(SetPrototype.has),
1111
remove: uncurryThis(SetPrototype['delete']),
12-
proto: SetPrototype,
13-
$has: SetPrototype.has,
14-
$keys: SetPrototype.keys
12+
proto: SetPrototype
1513
};

packages/core-js/internals/set-intersection.js

Lines changed: 1 addition & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,6 @@ var iterateSimple = require('../internals/iterate-simple');
99
var Set = SetHelpers.Set;
1010
var add = SetHelpers.add;
1111
var has = SetHelpers.has;
12-
var nativeHas = SetHelpers.$has;
13-
var nativeKeys = SetHelpers.$keys;
14-
15-
var isNativeSetRecord = function (record) {
16-
return record.has === nativeHas && record.keys === nativeKeys;
17-
};
1812

1913
// `Set.prototype.intersection` method
2014
// https://github.com/tc39/proposal-set-methods
@@ -23,19 +17,10 @@ module.exports = function intersection(other) {
2317
var otherRec = getSetRecord(other);
2418
var result = new Set();
2519

26-
// observable side effects
27-
if (!isNativeSetRecord(otherRec) && size(O) > otherRec.size) {
20+
if (size(O) > otherRec.size) {
2821
iterateSimple(otherRec.getIterator(), function (e) {
2922
if (has(O, e)) add(result, e);
3023
});
31-
32-
if (size(result) < 2) return result;
33-
34-
var disordered = result;
35-
result = new Set();
36-
iterateSet(O, function (e) {
37-
if (has(disordered, e)) add(result, e);
38-
});
3924
} else {
4025
iterateSet(O, function (e) {
4126
if (otherRec.includes(e)) add(result, e);
Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,15 @@
11
var $ = require('../internals/export');
2+
var fails = require('../internals/fails');
23
var intersection = require('../internals/set-intersection');
34
var setMethodAcceptSetLike = require('../internals/set-method-accept-set-like');
45

6+
var INCORRECT = !setMethodAcceptSetLike('intersection') || fails(function () {
7+
// eslint-disable-next-line es/no-array-from, es/no-set -- testing
8+
return Array.from(new Set([1, 2, 3]).intersection(new Set([3, 2]))) != '3,2';
9+
});
10+
511
// `Set.prototype.intersection` method
612
// https://github.com/tc39/proposal-set-methods
7-
$({ target: 'Set', proto: true, real: true, forced: !setMethodAcceptSetLike('intersection') }, {
13+
$({ target: 'Set', proto: true, real: true, forced: INCORRECT }, {
814
intersection: intersection
915
});

tests/compat/tests.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1714,7 +1714,7 @@ GLOBAL.tests = {
17141714
return Set.from;
17151715
},
17161716
'esnext.set.intersection.v2': function () {
1717-
return Set.prototype.intersection;
1717+
return Array.from(new Set([1, 2, 3]).intersection(new Set([3, 2]))) == '3,2';
17181718
},
17191719
'esnext.set.is-disjoint-from.v2': function () {
17201720
return Set.prototype.isDisjointFrom;

tests/unit-global/esnext.set.intersection.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,10 @@ QUnit.test('Set#intersection', assert => {
1818
assert.deepEqual(from(new Set([1, 2, 3]).intersection(createSetLike([4, 5]))), []);
1919
assert.deepEqual(from(new Set([1, 2, 3]).intersection(createSetLike([2, 3, 4]))), [2, 3]);
2020

21-
assert.deepEqual(from(new Set([1, 2, 3]).intersection(new Set([3, 2]))), [2, 3]);
21+
assert.deepEqual(from(new Set([1, 2, 3]).intersection(new Set([3, 2]))), [3, 2]);
2222
assert.deepEqual(from(new Set([1, 2, 3]).intersection(new Set([3, 2, 1]))), [1, 2, 3]);
2323
assert.deepEqual(from(new Set([1, 2, 3]).intersection(new Set([3, 2, 1, 0]))), [1, 2, 3]);
24-
assert.deepEqual(from(new Set([1, 2, 3]).intersection(createSetLike([3, 2]))), [2, 3]);
24+
assert.deepEqual(from(new Set([1, 2, 3]).intersection(createSetLike([3, 2]))), [3, 2]);
2525
assert.deepEqual(from(new Set([1, 2, 3]).intersection(createSetLike([3, 2, 1]))), [1, 2, 3]);
2626
assert.deepEqual(from(new Set([1, 2, 3]).intersection(createSetLike([3, 2, 1, 0]))), [1, 2, 3]);
2727

tests/unit-pure/esnext.set.intersection.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,10 @@ QUnit.test('Set#intersection', assert => {
1919
assert.deepEqual(from(new Set([1, 2, 3]).intersection(createSetLike([4, 5]))), []);
2020
assert.deepEqual(from(new Set([1, 2, 3]).intersection(createSetLike([2, 3, 4]))), [2, 3]);
2121

22-
assert.deepEqual(from(new Set([1, 2, 3]).intersection(new Set([3, 2]))), [2, 3]);
22+
assert.deepEqual(from(new Set([1, 2, 3]).intersection(new Set([3, 2]))), [3, 2]);
2323
assert.deepEqual(from(new Set([1, 2, 3]).intersection(new Set([3, 2, 1]))), [1, 2, 3]);
2424
assert.deepEqual(from(new Set([1, 2, 3]).intersection(new Set([3, 2, 1, 0]))), [1, 2, 3]);
25-
assert.deepEqual(from(new Set([1, 2, 3]).intersection(createSetLike([3, 2]))), [2, 3]);
25+
assert.deepEqual(from(new Set([1, 2, 3]).intersection(createSetLike([3, 2]))), [3, 2]);
2626
assert.deepEqual(from(new Set([1, 2, 3]).intersection(createSetLike([3, 2, 1]))), [1, 2, 3]);
2727
assert.deepEqual(from(new Set([1, 2, 3]).intersection(createSetLike([3, 2, 1, 0]))), [1, 2, 3]);
2828

0 commit comments

Comments
 (0)