86 lines
2.5 KiB
JavaScript
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)
|
|
})
|
|
})
|
|
]
|
|
|