Skip to content

Commit 8a3b1ff

Browse files
committed
fix(generator): ensure generators compare in mixed states
1 parent 7e66106 commit 8a3b1ff

2 files changed

Lines changed: 28 additions & 7 deletions

File tree

index.js

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -172,9 +172,6 @@ function iterableEqual(leftHandOperand, rightHandOperand, memoizeObject) {
172172
*/
173173

174174
function generatorEqual(leftHandOperand, rightHandOperand, memoizeObject) {
175-
if (leftHandOperand.done || rightHandOperand.done) {
176-
return [];
177-
}
178175
return iterableEqual(getGeneratorEntries(leftHandOperand), getGeneratorEntries(rightHandOperand), memoizeObject);
179176
}
180177

test/new-ecmascript-types.js

Lines changed: 28 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -582,17 +582,41 @@ describe('ES2015 Specific', function () {
582582
'eql(generatorA(), generatorB())');
583583
});
584584

585+
it('returns true for different generator function calls are at level of iteration with same results', function () {
586+
var generatorA = eval('function * generatorA() { yield 1; yield 2; yield 3; }; generatorA');
587+
var generatorB = eval('function * generatorB() { yield 6; yield 2; yield 3; }; generatorB');
588+
var generatorAIterator = generatorA();
589+
var generatorBIterator = generatorB();
590+
generatorAIterator.next()
591+
generatorBIterator.next()
592+
assert(eql(generatorAIterator, generatorBIterator),
593+
'eql(generatorAIterator, generatorBIterator');
594+
});
595+
585596
it('returns false for same generator function calls that return different results', function () {
586597
var generator = eval('var set = 0; function * generator() { yield set++; }; generator');
587598
assert(eql(generator(), generator()) === false,
588599
'eql(generator(), generator()) === false');
589600
});
590601

591-
it('returns false for different generator function calls that return different results', function () {
602+
it('returns false for generators at different stages of iteration', function () {
592603
var generatorA = eval('function * generatorA() { yield 1; yield 2; }; generatorA');
593-
var generatorB = eval('function * generatorB() { yield 4; yield 5; }; generatorB');
594-
assert(eql(generatorA(), generatorB()) === false,
595-
'eql(generatorA(), generatorB()) === false');
604+
var generatorB = eval('function * generatorB() { yield 1; yield 2; }; generatorB');
605+
var generatorBIterator = generatorB();
606+
generatorBIterator.next()
607+
assert(eql(generatorA(), generatorBIterator) === false,
608+
'eql(generatorA(), generatorBIterator) === false');
609+
});
610+
611+
it('returns false for generators if one is done', function () {
612+
var generatorA = eval('function * generatorA() { yield 1; yield 2; }; generatorA');
613+
var generatorB = eval('function * generatorB() { yield 1; yield 2; }; generatorB');
614+
var generatorBIterator = generatorB();
615+
generatorBIterator.next()
616+
generatorBIterator.next()
617+
generatorBIterator.next()
618+
assert(eql(generatorA(), generatorBIterator) === false,
619+
'eql(generatorA(), generatorBIterator) === false');
596620
});
597621

598622
});

0 commit comments

Comments
 (0)