basic-longest.js (2216B)
1 // Copyright (C) 2025 André Bargull. All rights reserved. 2 // This code is governed by the BSD license found in the LICENSE file. 3 4 /*--- 5 esid: sec-iterator.zip 6 description: > 7 Basic Iterator.zip test with "longest" mode. 8 includes: [compareArray.js, propertyHelper.js, iteratorZipUtils.js] 9 features: [joint-iteration] 10 ---*/ 11 12 function testSequence(inputs, inputsLabel, minLength, maxLength) { 13 function test(options, optionsLabel, getPaddingForInput) { 14 var label = optionsLabel + ", " + inputsLabel; 15 var it = Iterator.zip(inputs, options); 16 assertZipped(it, inputs, minLength, label); 17 18 for (var i = minLength; i < maxLength; i++) { 19 var itemLabel = label + ", step " + i; 20 21 var result = it.next(); 22 var value = result.value; 23 24 // Test IteratorResult structure. 25 assertIteratorResult(result, value, false, itemLabel); 26 27 var expected = inputs.map(function (input, j) { 28 return i < input.length ? input[i] : getPaddingForInput(j); 29 }); 30 assert.compareArray(value, expected, itemLabel + ": values"); 31 } 32 assertIteratorResult(it.next(), undefined, true, label + ": after completion"); 33 } 34 35 test( 36 { mode: "longest" }, 37 "options = { mode: 'longest' }", 38 function () { 39 return undefined; 40 }, 41 ); 42 43 test( 44 { mode: "longest", padding: [] }, 45 "options = { mode: 'longest', padding: [] }", 46 function () { 47 return undefined; 48 }, 49 ); 50 51 test( 52 { mode: "longest", padding: ["pad"] }, 53 "options = { mode: 'longest', padding: ['pad'] }", 54 function (idx) { 55 return idx === 0 ? "pad" : undefined; 56 }, 57 ); 58 59 test( 60 { mode: "longest", padding: Array(inputs.length).fill("pad") }, 61 "options = { mode: 'longest', padding: ['pad', 'pad', ..., 'pad'] }", 62 function (idx) { 63 return "pad"; 64 }, 65 ); 66 67 // Yield an infinite amount of numbers. 68 var numbers = { 69 *[Symbol.iterator]() { 70 var i = 0; 71 while (true) { 72 yield 100 + i++; 73 } 74 } 75 }; 76 test( 77 { mode: "longest", padding: numbers }, 78 "options = { mode: 'longest', padding: numbers }", 79 function (idx) { 80 return 100 + idx; 81 }, 82 ); 83 } 84 85 forEachSequenceCombination(testSequence); 86 87 reportCompare(0, 0);