enumerable-ts/test/unit/enumerator.js

86 lines
2.5 KiB
JavaScript

import { assert, assertEq, it } from 'folktest'
import { createIterator, createIterable, createEnumerator, createEnumerable } from './common.js'
import { CachedIteratorEnumerator, DropEnumerator, Enumerator, FilterEnumerator, FlatMapEnumerator, FusedEnumerator, IterableEnumerator, IteratorEnumerator, MapEnumerator, TakeEnumerator } from '../../dist/index.esm.min.js'
export const EnumeratorFrom = [
it('from iterator', () => {
const iterator = createIterator()
const enumerator1 = Enumerator.fromIterator(iterator)
assert(enumerator1 instanceof CachedIteratorEnumerator)
const enumerator2 = Enumerator.fromIterator(iterator, false)
assert(enumerator2 instanceof IteratorEnumerator)
}),
it('from iterable', () => {
const iterable = createIterable()
const enumerator = Enumerator.fromIterable(iterable)._enumerator
assert(enumerator instanceof IterableEnumerator, `${enumerator.constructor.name} is not instance of 'IterableEnumerator'`)
})
]
export const HelperEnumerator = [
it('FusedEnumerator', () => {
const expected = [1, 2, 3, 10, 20, 30]
const e1 = createEnumerator([1, 2, 3])
const e2 = createEnumerator([10, 20, 30])
const fe = new FusedEnumerator([e1, e2])
expected.forEach(n => {
fe.moveNext()
assertEq(fe.current, n)
})
}),
it('DropEnumerator', () => {
const expected = [4, 5, 6]
const e = new DropEnumerator(createEnumerator([1, 2, 3, 4, 5, 6]), 3)
expected.forEach(n => {
e.moveNext()
assertEq(e.current, n)
})
}),
it('FilterEnumerator', () => {
const expected = [1, 3, 5]
const e = new FilterEnumerator(createEnumerator([1, 2, 3, 4, 5, 6]), x => x % 2 !== 0)
expected.forEach(n => {
e.moveNext()
assertEq(e.current, n)
})
}),
it('FlatMapEnumerator', () => {
const expected = [1, 2, 2, 3, 3, 3]
const e = new FlatMapEnumerator(
createEnumerator([1, 2, 3]),
n => {
const arr = Array.from({ length: n }).fill(n)
return createEnumerator(arr)
}
)
expected.forEach(n => {
e.moveNext()
assertEq(e.current, n)
})
}),
it('MapEnumerator', () => {
const expected = [1, 4, 9]
const e = new MapEnumerator(createEnumerator([1, 2, 3]), n => n * n)
expected.forEach(n => {
e.moveNext()
assertEq(e.current, n)
})
}),
it('TakeEnumerator', () => {
const expected = [1, 2, 3]
const e = new TakeEnumerator(createEnumerator([1, 2, 3, 4, 5, 6]), 3)
expected.forEach(n => {
e.moveNext()
assertEq(e.current, n)
})
})
]