You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

82 lines
2.2 KiB

export const tests = []
const t = (f) => tests.push(f)
t(({ eq }) => eq(adder([1, 2, 3, 4]), 10))
t(({ eq, ctx }) =>
// check that the code did use reduce properly
eq(ctx.reduceCalls[ctx.reduceCalls.length - 1], [1, 2, 3, 4])
)
t(({ eq }) => eq(adder([9, 24, 7, 11, 3], 10), 64))
t(({ eq, ctx }) =>
// check that the code did use reduce properly
eq(ctx.reduceCalls[ctx.reduceCalls.length - 1], [9, 24, 7, 11, 3])
)
t(({ eq }) => eq(adder([]), 0))
t(({ eq, ctx }) =>
// check that the code did use reduce properly
eq(ctx.reduceCalls[ctx.reduceCalls.length - 1], [])
)
t(({ eq }) => eq(sumOrMul([29, 23, 3, 2, 25]), 135))
t(({ eq, ctx }) =>
// check that the code did use reduce properly
eq(ctx.reduceCalls[ctx.reduceCalls.length - 1], [29, 23, 3, 2, 25])
)
t(({ eq }) => eq(sumOrMul([18, 17, 7, 13, 25], 12), 278))
t(({ eq, ctx }) =>
// check that the code did use reduce properly
eq(ctx.reduceCalls[ctx.reduceCalls.length - 1], [18, 17, 7, 13, 25])
)
t(({ eq }) => eq(sumOrMul([8, 16, 7, 0, 32]), 0))
t(({ eq, ctx }) =>
// check that the code did use reduce properly
eq(ctx.reduceCalls[ctx.reduceCalls.length - 1], [8, 16, 7, 0, 32])
)
t(({ eq }) => eq(sumOrMul([8, 16, 7, 0, 31]), 31))
t(({ eq, ctx }) =>
// check that the code did use reduce properly
eq(ctx.reduceCalls[ctx.reduceCalls.length - 1], [8, 16, 7, 0, 31])
)
t(({ eq, ctx }) => eq(funcExec(ctx.fArr1, 10), `result: [137]`))
t(({ eq, ctx }) =>
// check that the code did use reduce properly
eq(ctx.reduceCalls[ctx.reduceCalls.length - 1], ctx.fArr1)
)
t(({ eq, ctx }) => eq(funcExec(ctx.fArr2, 4), { result: 72, isOdd: true }))
t(({ eq, ctx }) =>
// check that the code did use reduce properly
eq(ctx.reduceCalls[ctx.reduceCalls.length - 1], ctx.fArr2)
)
Object.freeze(tests)
export const setup = () => {
const reduceCalls = []
const _reduce = Array.prototype.reduce
Array.prototype.reduce = function () {
reduceCalls.push(this)
return _reduce.apply(this, arguments)
}
const fArr1 = [
(x) => x + 2,
(x) => x ** 2,
(x) => x - 7,
(x) => `result: [${x}]`,
]
const fArr2 = [
(x) => x + 20,
(x) => x * 3,
(x) => {
return {
result: x,
isOdd: x % 2 === 0,
}
},
]
return { reduceCalls, fArr1, fArr2 }
}