mirror of https://github.com/01-edu/public.git
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.
143 lines
3.4 KiB
143 lines
3.4 KiB
4 years ago
|
Array.prototype.map = undefined
|
||
|
Array.prototype.flatMap = undefined
|
||
|
Array.prototype.flat = undefined
|
||
|
// /*/ // ⚡
|
||
|
export const tests = []
|
||
|
const t = (f) => tests.push(f)
|
||
|
|
||
|
const add1 = (el) => el + 1
|
||
|
const sub3 = (el) => el - 3
|
||
|
const mult2 = (el) => el * 2
|
||
|
|
||
|
const doAll = (el) => sub3(mult2(add1(el)))
|
||
|
const posValsIndex = (el, i) => (el >= 0 ? `${i}: ${el}` : undefined)
|
||
|
const indexValsArray = (el, i, arr) =>
|
||
|
`${el} is at index: ${i} out of ${arr.length - 1}`
|
||
|
|
||
|
const arrayFormatSentence = (item, index, arr) => {
|
||
|
if (index === arr.length - 2) return `and ${arr[arr.length - 2]} `
|
||
|
if (index === arr.length - 1) {
|
||
|
return `are ${String(arr.length - 1)} ${item}.`
|
||
|
}
|
||
|
return `${item}, `
|
||
|
}
|
||
|
|
||
|
// map
|
||
|
t(({ eq, ctx }) =>
|
||
|
eq(map(ctx.numbers, add1), [11, -9, 21, -94, 87, 103, 36, 90, 111]),
|
||
|
)
|
||
|
t(({ eq, ctx }) =>
|
||
|
eq(map(ctx.numbers, mult2), [20, -20, 40, -190, 172, 204, 70, 178, 220]),
|
||
|
)
|
||
|
|
||
|
t(({ eq, ctx }) =>
|
||
|
eq(map(ctx.numbers, sub3), [7, -13, 17, -98, 83, 99, 32, 86, 107]),
|
||
|
)
|
||
|
|
||
|
t(({ eq, ctx }) =>
|
||
|
eq(map(ctx.numbers, doAll), [19, -21, 39, -191, 171, 203, 69, 177, 219]),
|
||
|
)
|
||
|
|
||
|
t(({ eq, ctx }) =>
|
||
|
eq(map(ctx.numbers, posValsIndex), [
|
||
|
'0: 10',
|
||
|
undefined,
|
||
|
'2: 20',
|
||
|
undefined,
|
||
|
'4: 86',
|
||
|
'5: 102',
|
||
|
'6: 35',
|
||
|
'7: 89',
|
||
|
'8: 110',
|
||
|
]),
|
||
|
)
|
||
|
|
||
|
t(({ eq, ctx }) =>
|
||
|
eq(map(ctx.numbers, indexValsArray), [
|
||
|
'10 is at index: 0 out of 8',
|
||
|
'-10 is at index: 1 out of 8',
|
||
|
'20 is at index: 2 out of 8',
|
||
|
'-95 is at index: 3 out of 8',
|
||
|
'86 is at index: 4 out of 8',
|
||
|
'102 is at index: 5 out of 8',
|
||
|
'35 is at index: 6 out of 8',
|
||
|
'89 is at index: 7 out of 8',
|
||
|
'110 is at index: 8 out of 8',
|
||
|
]),
|
||
|
)
|
||
|
|
||
|
t(({ eq, ctx }) =>
|
||
|
eq(
|
||
|
map(ctx.sentences[0], arrayFormatSentence).join(''),
|
||
|
'Colombia, Mexico, and El Salvador are 3 Spanish speaking countries.',
|
||
|
),
|
||
|
)
|
||
|
|
||
|
t(({ eq, ctx }) =>
|
||
|
eq(
|
||
|
map(ctx.sentences[1], arrayFormatSentence).join(''),
|
||
|
'Perou, Brazil, Argentina, and Venezuela are 4 countries in South America.',
|
||
|
),
|
||
|
)
|
||
|
|
||
|
t(({ eq, ctx }) =>
|
||
|
eq(
|
||
|
map(ctx.sentences[2], arrayFormatSentence).join(''),
|
||
|
'France, Portugal, and Italy are 3 members of the EU.',
|
||
|
),
|
||
|
)
|
||
|
|
||
|
// flatMap
|
||
|
t(({ eq, ctx }) =>
|
||
|
eq(flatMap(ctx.mixed, add1), ['101', -9, 21, -94, 87, '1021', '35,891', 111]),
|
||
|
)
|
||
|
|
||
|
t(({ eq, ctx }) =>
|
||
|
eq(flatMap(ctx.mixed, posValsIndex), [
|
||
|
'0: 10',
|
||
|
undefined,
|
||
|
'2: 20',
|
||
|
undefined,
|
||
|
'4: 86',
|
||
|
'5: 102',
|
||
|
undefined,
|
||
|
'7: 110',
|
||
|
]),
|
||
|
)
|
||
|
|
||
|
t(({ eq, ctx }) =>
|
||
|
eq(flatMap(ctx.nested, indexValsArray), [
|
||
|
'5 is at index: 0 out of 7',
|
||
|
'4 is at index: 1 out of 7',
|
||
|
'-3 is at index: 2 out of 7',
|
||
|
'20 is at index: 3 out of 7',
|
||
|
'17 is at index: 4 out of 7',
|
||
|
'-33 is at index: 5 out of 7',
|
||
|
'-4 is at index: 6 out of 7',
|
||
|
'18 is at index: 7 out of 7',
|
||
|
]),
|
||
|
)
|
||
|
|
||
|
Object.freeze(tests)
|
||
|
|
||
|
export const setup = () => {
|
||
|
const numbers = [10, -10, 20, -95, 86, 102, 35, 89, 110]
|
||
|
const mixed = [[10], -10, 20, -95, 86, [102], [35, 89], 110]
|
||
|
const nested = [[5], [4], [-3], [20], [17], [-33], [-4], [18]]
|
||
|
const sentences = [
|
||
|
['Colombia', 'Mexico', 'El Salvador', 'Spanish speaking countries'],
|
||
|
['Perou', 'Brazil', 'Argentina', 'Venezuela', 'countries in South America'],
|
||
|
['France', 'Portugal', 'Italy', 'members of the EU'],
|
||
|
]
|
||
|
|
||
|
Object.getPrototypeOf([]).proto = ' [avoid for..in] '
|
||
|
Object.freeze(numbers)
|
||
|
Object.freeze(mixed)
|
||
|
Object.freeze(nested)
|
||
|
Object.freeze(sentences[0])
|
||
|
Object.freeze(sentences[1])
|
||
|
Object.freeze(sentences[2])
|
||
|
|
||
|
return { numbers, mixed, nested, sentences }
|
||
|
}
|