143 lines
4.0 KiB
TypeScript
143 lines
4.0 KiB
TypeScript
import { describe, expect, it } from 'bun:test';
|
|
import {
|
|
getMiddleElement,
|
|
multArray,
|
|
multBy,
|
|
sumArray,
|
|
sumBy
|
|
} from './array.ts';
|
|
|
|
describe('array utils', () => {
|
|
it('sumArray number array', () => {
|
|
const array = [1, 2, 3];
|
|
const sum = sumArray(array);
|
|
expect(sum).toBeNumber();
|
|
expect(sum).toBeFinite();
|
|
expect(sum).toBe(1 + 2 + 3);
|
|
|
|
expect(sumArray([])).toBeNumber();
|
|
expect(sumArray([])).toBeFinite();
|
|
expect(sumArray([])).toBe(0);
|
|
});
|
|
it('sumArray read-only number array', () => {
|
|
const array = [1, 2, 3] as const;
|
|
const sum = sumArray(array);
|
|
expect(sum).toBeNumber();
|
|
expect(sum).toBeFinite();
|
|
expect(sum).toBe(1 + 2 + 3);
|
|
|
|
expect(sumArray([])).toBeNumber();
|
|
expect(sumArray([])).toBeFinite();
|
|
expect(sumArray([])).toBe(0);
|
|
});
|
|
it('sumBy number array', () => {
|
|
const array = [1, 2, 3];
|
|
const sum = sumBy(array, (e) => e);
|
|
expect(sum).toBeNumber();
|
|
expect(sum).toBeFinite();
|
|
expect(sum).toBe(1 + 2 + 3);
|
|
});
|
|
it('sumBy read-only number array', () => {
|
|
const array = [1, 2, 3] as const;
|
|
const sum = sumBy(array, (e) => e);
|
|
expect(sum).toBeNumber();
|
|
expect(sum).toBeFinite();
|
|
expect(sum).toBe(1 + 2 + 3);
|
|
});
|
|
it('sumBy mixed array', () => {
|
|
const array = [1, '2', 3.1, ''];
|
|
|
|
const sum = sumBy(array, (e) => e);
|
|
expect(sum).toBeNumber();
|
|
expect(sum).toBeFinite();
|
|
expect(sum).toBe(1 + 2 + 3.1);
|
|
});
|
|
it('sumBy object array', () => {
|
|
const array: (
|
|
| { value: number | string }
|
|
| { differentValue: number | string }
|
|
)[] = [{ value: 3 }, { value: '2' }, { differentValue: '-2.44' }];
|
|
|
|
const sum = sumBy(array, (e) =>
|
|
'differentValue' in e ? e.differentValue : e.value
|
|
);
|
|
expect(sum).toBeNumber();
|
|
expect(sum).toBeFinite();
|
|
expect(sum).toBe(3 + 2 - 2.44);
|
|
});
|
|
it('sumBy empty array', () => {
|
|
expect(sumBy([], (e) => e)).toBeNumber();
|
|
expect(sumBy([], (e) => e)).toBeFinite();
|
|
expect(sumBy([], (e) => e)).toBe(0);
|
|
});
|
|
|
|
it('multArray number array', () => {
|
|
const array = [1, 2, 3];
|
|
const sum = multArray(array);
|
|
expect(sum).toBeNumber();
|
|
expect(sum).toBeFinite();
|
|
expect(sum).toBe(2 * 3);
|
|
|
|
expect(multArray([])).toBeNumber();
|
|
expect(multArray([])).toBeFinite();
|
|
expect(multArray([])).toBe(0);
|
|
});
|
|
it('multArray read-only number array', () => {
|
|
const array = [1, 2, 3] as const;
|
|
const sum = multArray(array);
|
|
expect(sum).toBeNumber();
|
|
expect(sum).toBeFinite();
|
|
expect(sum).toBe(2 * 3);
|
|
|
|
expect(multArray([])).toBeNumber();
|
|
expect(multArray([])).toBeFinite();
|
|
expect(multArray([])).toBe(0);
|
|
});
|
|
it('multBy number array', () => {
|
|
const array = [1, 2, 3];
|
|
const sum = sumBy(array, (e) => e);
|
|
expect(sum).toBeNumber();
|
|
expect(sum).toBeFinite();
|
|
expect(sum).toBe(1 + 2 + 3);
|
|
});
|
|
it('multBy read-only number array', () => {
|
|
const array = [1, 2, 3] as const;
|
|
const sum = multBy(array, (e) => e);
|
|
expect(sum).toBeNumber();
|
|
expect(sum).toBeFinite();
|
|
expect(sum).toBe(1 + 2 + 3);
|
|
});
|
|
it('multBy mixed array', () => {
|
|
const array = [1, '2', 3.1, ''];
|
|
|
|
const sum = multBy(array, (e) => e);
|
|
expect(sum).toBeNumber();
|
|
expect(sum).toBeFinite();
|
|
expect(sum).toBe(0);
|
|
});
|
|
it('multBy object array', () => {
|
|
const array: (
|
|
| { value: number | string }
|
|
| { differentValue: number | string }
|
|
)[] = [{ value: 3 }, { value: '2' }, { differentValue: '-2.44' }];
|
|
|
|
const sum = multBy(array, (e) =>
|
|
'differentValue' in e ? e.differentValue : e.value
|
|
);
|
|
expect(sum).toBeNumber();
|
|
expect(sum).toBeFinite();
|
|
expect(sum).toBe(3 * 2 * -2.44);
|
|
});
|
|
it('multBy empty array', () => {
|
|
expect(multBy([], (e) => e)).toBeNumber();
|
|
expect(multBy([], (e) => e)).toBeFinite();
|
|
expect(multBy([], (e) => e)).toBe(0);
|
|
});
|
|
it('getMiddleElement', () => {
|
|
expect(getMiddleElement([1, 2, 3, 4])).toBe(3);
|
|
expect(getMiddleElement([1, 2, 3])).toBe(2);
|
|
expect(getMiddleElement([1])).toBe(1);
|
|
expect(getMiddleElement([])).toBeUndefined();
|
|
});
|
|
});
|