tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

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);