|
|
|
// /*/ // ⚡
|
|
|
|
export const tests = []
|
|
|
|
const t = (f) => tests.push(f)
|
|
|
|
|
|
|
|
//// RACE
|
|
|
|
t(async ({ eq, wait }) => {
|
|
|
|
// empty array should never resolve, just hang, forever...
|
|
|
|
let notCalled = true
|
|
|
|
race([]).then(() => (notCalled = false))
|
|
|
|
await wait(5)
|
|
|
|
return eq(notCalled, true)
|
|
|
|
})
|
|
|
|
|
|
|
|
t(async ({ eq, wait }) =>
|
|
|
|
// it should return the first value to resolve
|
|
|
|
eq(await race([Promise.resolve(2), wait(5).then(() => 5)]), 2)
|
|
|
|
)
|
|
|
|
|
|
|
|
t(async ({ eq, wait }) => {
|
|
|
|
// it should not wait for every results to wait
|
|
|
|
const start = Date.now()
|
|
|
|
const result = await race([Promise.resolve(2), wait(50)])
|
|
|
|
if (Date.now() - start > 5) throw Error("that's too long !")
|
|
|
|
return eq(result, 2)
|
|
|
|
})
|
|
|
|
|
|
|
|
t(async ({ eq, wait }) =>
|
|
|
|
// it should fail if the first promise reject
|
|
|
|
eq(
|
|
|
|
await race([wait(5), Promise.reject(Error('oops'))]).catch(
|
|
|
|
(err) => err.message
|
|
|
|
),
|
|
|
|
'oops'
|
|
|
|
)
|
|
|
|
)
|
|
|
|
|
|
|
|
t(async ({ eq, wait, ctx }) =>
|
|
|
|
// it should not fail if the first promise did not reject
|
|
|
|
eq(
|
|
|
|
await race([
|
|
|
|
wait(5).then(() => Promise.reject(Error('oops'))),
|
|
|
|
Promise.resolve(ctx),
|
|
|
|
]).catch((err) => err.message),
|
|
|
|
ctx
|
|
|
|
)
|
|
|
|
)
|
|
|
|
|
|
|
|
//// SOME
|
|
|
|
t(async ({ eq }) =>
|
|
|
|
// empty array returns an empty array
|
|
|
|
eq(await some([], 10), [])
|
|
|
|
)
|
|
|
|
|
|
|
|
t(async ({ eq }) =>
|
|
|
|
// a count of less than 1 also returns an empty array
|
|
|
|
eq(await some([1, 2, 3], 0), [])
|
|
|
|
)
|
|
|
|
|
|
|
|
t(async ({ eq, wait }) =>
|
|
|
|
// it should return the first value to resolve
|
|
|
|
eq(await some([Promise.resolve(2), wait(5).then(() => 5)], 1), [2])
|
|
|
|
)
|
|
|
|
|
|
|
|
t(async ({ eq, wait }) => {
|
|
|
|
// it should not wait for every results to wait, the order should be preserved.
|
|
|
|
const start = Date.now()
|
|
|
|
const result = await some([wait(1), wait(50), Promise.resolve(5)], 2)
|
|
|
|
if (Date.now() - start > 5) throw Error("that's too long !")
|
|
|
|
return eq(result, [undefined, 5])
|
|
|
|
})
|
|
|
|
|
|
|
|
Object.freeze(tests)
|
|
|
|
|
|
|
|
export const setup = Math.random
|