Path: blob/main/src/vs/base/test/common/iterator.test.ts
3296 views
/*---------------------------------------------------------------------------------------------1* Copyright (c) Microsoft Corporation. All rights reserved.2* Licensed under the MIT License. See License.txt in the project root for license information.3*--------------------------------------------------------------------------------------------*/45import assert from 'assert';6import { Iterable } from '../../common/iterator.js';7import { ensureNoDisposablesAreLeakedInTestSuite } from './utils.js';89suite('Iterable', function () {1011ensureNoDisposablesAreLeakedInTestSuite();1213const customIterable = new class {1415*[Symbol.iterator]() {16yield 'one';17yield 'two';18yield 'three';19}20};2122test('first', function () {2324assert.strictEqual(Iterable.first([]), undefined);25assert.strictEqual(Iterable.first([1]), 1);26assert.strictEqual(Iterable.first(customIterable), 'one');27assert.strictEqual(Iterable.first(customIterable), 'one'); // fresh28});2930test('wrap', function () {31assert.deepStrictEqual([...Iterable.wrap(1)], [1]);32assert.deepStrictEqual([...Iterable.wrap([1, 2, 3])], [1, 2, 3]);33});3435test('every', function () {36// Empty iterable should return true (vacuous truth)37assert.strictEqual(Iterable.every([], () => false), true);3839// All elements match predicate40assert.strictEqual(Iterable.every([2, 4, 6, 8], x => x % 2 === 0), true);41assert.strictEqual(Iterable.every([1, 2, 3], x => x > 0), true);4243// Not all elements match predicate44assert.strictEqual(Iterable.every([1, 2, 3, 4], x => x % 2 === 0), false);45assert.strictEqual(Iterable.every([1, 2, 3], x => x > 2), false);4647// Single element - matches48assert.strictEqual(Iterable.every([5], x => x === 5), true);4950// Single element - doesn't match51assert.strictEqual(Iterable.every([5], x => x === 6), false);5253// Test index parameter in predicate54const numbers = [10, 11, 12, 13];55assert.strictEqual(Iterable.every(numbers, (x, i) => x === 10 + i), true);56assert.strictEqual(Iterable.every(numbers, (x, i) => i < 2), false);5758// Test early termination - predicate should not be called for all elements59let callCount = 0;60const result = Iterable.every([1, 2, 3, 4, 5], x => {61callCount++;62return x < 3;63});64assert.strictEqual(result, false);65assert.strictEqual(callCount, 3); // Should stop at the third element6667// Test with truthy/falsy values68assert.strictEqual(Iterable.every([1, 2, 3], x => x), true);69assert.strictEqual(Iterable.every([1, 0, 3], x => x), false);70assert.strictEqual(Iterable.every(['a', 'b', 'c'], x => x), true);71assert.strictEqual(Iterable.every(['a', '', 'c'], x => x), false);72});73});747576