test262/test/built-ins/Iterator/zip/basic-longest.js

86 lines
2.1 KiB
JavaScript

// Copyright (C) 2025 André Bargull. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
esid: sec-iterator.zip
description: >
Basic Iterator.zip test with "longest" mode.
includes: [compareArray.js, propertyHelper.js, iteratorZipUtils.js]
features: [joint-iteration]
---*/
function testSequence(inputs, inputsLabel, minLength, maxLength) {
function test(options, optionsLabel, getPaddingForInput) {
var label = optionsLabel + ", " + inputsLabel;
var it = Iterator.zip(inputs, options);
assertZipped(it, inputs, minLength, label);
for (var i = minLength; i < maxLength; i++) {
var itemLabel = label + ", step " + i;
var result = it.next();
var value = result.value;
// Test IteratorResult structure.
assertIteratorResult(result, value, false, itemLabel);
var expected = inputs.map(function (input, j) {
return i < input.length ? input[i] : getPaddingForInput(j);
});
assert.compareArray(value, expected, itemLabel + ": values");
}
assertIteratorResult(it.next(), undefined, true, label + ": after completion");
}
test(
{ mode: "longest" },
"options = { mode: 'longest' }",
function () {
return undefined;
},
);
test(
{ mode: "longest", padding: [] },
"options = { mode: 'longest', padding: [] }",
function () {
return undefined;
},
);
test(
{ mode: "longest", padding: ["pad"] },
"options = { mode: 'longest', padding: ['pad'] }",
function (idx) {
return idx === 0 ? "pad" : undefined;
},
);
test(
{ mode: "longest", padding: Array(inputs.length).fill("pad") },
"options = { mode: 'longest', padding: ['pad', 'pad', ..., 'pad'] }",
function (idx) {
return "pad";
},
);
// Yield an infinite amount of numbers.
var numbers = {
*[Symbol.iterator]() {
var i = 0;
while (true) {
yield 100 + i++;
}
}
};
test(
{ mode: "longest", padding: numbers },
"options = { mode: 'longest', padding: numbers }",
function (idx) {
return 100 + idx;
},
);
}
forEachSequenceCombination(testSequence);