mirror of
https://github.com/napi-rs/napi-rs.git
synced 2025-12-08 19:56:07 +00:00
* add lifetime to iterator * Add ScopedIterator * fix type gen * Clippy fix --------- Co-authored-by: LongYinan <lynweklm@gmail.com>
88 lines
2.0 KiB
TypeScript
88 lines
2.0 KiB
TypeScript
import test from 'ava'
|
|
|
|
import { Fib, Fib2, Fib3, Fib4, shutdownRuntime } from '../index.cjs'
|
|
|
|
test.after(() => {
|
|
shutdownRuntime()
|
|
})
|
|
|
|
for (const [index, factory] of [
|
|
() => new Fib(),
|
|
() => Fib2.create(0),
|
|
() => new Fib3(0, 1),
|
|
].entries()) {
|
|
test(`should be able to stop a generator #${index}`, (t) => {
|
|
let iterator = factory()
|
|
if (typeof Iterator === 'undefined') {
|
|
iterator = iterator[Symbol.iterator]()
|
|
}
|
|
t.deepEqual(iterator.next(), {
|
|
done: false,
|
|
value: 1,
|
|
})
|
|
iterator.next()
|
|
iterator.next()
|
|
iterator.next()
|
|
iterator.next()
|
|
t.deepEqual(iterator.next(), {
|
|
done: false,
|
|
value: 8,
|
|
})
|
|
t.deepEqual(iterator.return?.(), {
|
|
done: true,
|
|
})
|
|
t.deepEqual(iterator.next(), {
|
|
done: true,
|
|
})
|
|
})
|
|
|
|
test(`should be able to throw to generator #${index}`, (t) => {
|
|
const iterator = factory()
|
|
t.deepEqual(iterator.next(), {
|
|
done: false,
|
|
value: 1,
|
|
})
|
|
iterator.next()
|
|
iterator.next()
|
|
iterator.next()
|
|
iterator.next()
|
|
t.deepEqual(iterator.next(), {
|
|
done: false,
|
|
value: 8,
|
|
})
|
|
t.throws(() => iterator.throw!(new Error()))
|
|
t.deepEqual(iterator.next(), {
|
|
done: true,
|
|
})
|
|
})
|
|
|
|
test(`should be an Iterator and have the Iterator Helper methods #${index}`, (t) => {
|
|
if (typeof Iterator === 'undefined') {
|
|
t.pass('Iterator is not existing, skipping test')
|
|
return
|
|
}
|
|
const iterator = factory()
|
|
|
|
t.true(Object.getPrototypeOf(iterator) === Iterator.prototype)
|
|
let arr = [
|
|
...iterator
|
|
.drop(3)
|
|
.filter((x: number) => x % 2 == 0)
|
|
.take(5),
|
|
]
|
|
t.deepEqual(arr, [8, 34, 144, 610, 2584])
|
|
})
|
|
}
|
|
|
|
test('generator should be able to return object', (t) => {
|
|
const fib = new Fib4(0, 1)
|
|
|
|
const gen = fib[Symbol.iterator]
|
|
t.is(typeof gen, 'function')
|
|
const iterator = gen.call(fib)
|
|
t.deepEqual(iterator.next(), {
|
|
done: false,
|
|
value: { number: 1 },
|
|
})
|
|
})
|