Skip to content

Commit 7e66106

Browse files
committed
fix: add conformance function for sets to support IE11
1 parent 9395df2 commit 7e66106

1 file changed

Lines changed: 24 additions & 0 deletions

File tree

index.js

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,8 @@ function deepEqual(leftHandOperand, rightHandOperand, comparatorOrMemoize, memoi
8484
return iterableEqual(new Uint8Array(leftHandOperand.buffer), new Uint8Array(rightHandOperand.buffer));
8585
case 'arraybuffer':
8686
return iterableEqual(new Uint8Array(leftHandOperand), new Uint8Array(rightHandOperand));
87+
case 'set':
88+
return setEqual(leftHandOperand, rightHandOperand, memoizeObject);
8789
default:
8890
return objectEqual(leftHandOperand, rightHandOperand, memoizeObject);
8991
}
@@ -115,6 +117,28 @@ function regexpEqual(leftHandOperand, rightHandOperand) {
115117
return objectIs(leftHandOperand.toString(), rightHandOperand.toString());
116118
}
117119

120+
/*!
121+
* Compare two sets by forEaching over them,
122+
* and comparing the resulting array.
123+
*
124+
* Needed because IE11 doesn't support Set#entries or Set#@@iterator
125+
*
126+
* @param {Set} a
127+
* @param {Set} b
128+
* @return {Boolean} result
129+
*/
130+
131+
function setEqual(leftHandOperand, rightHandOperand) {
132+
var leftHandItems = [];
133+
var rightHandItems = [];
134+
leftHandOperand.forEach(function gatherSetEntries(entry) {
135+
leftHandItems.push(entry);
136+
});
137+
rightHandOperand.forEach(function gatherSetEntries(entry) {
138+
rightHandItems.push(entry);
139+
});
140+
return iterableEqual(leftHandItems.sort(), rightHandItems.sort());
141+
}
118142

119143
/*!
120144
* Simple equality for flat iterable objects

0 commit comments

Comments
 (0)