ahbeng/NUSMods

View on GitHub
website/src/utils/array.test.ts

Summary

Maintainability
A
0 mins
Test Coverage
import { range, stubTrue, stubFalse } from 'lodash';
import { deltas, firstNonNull, intersperse, takeUntil } from './array';

test('intersperse should return array mixed with delimiter', () => {
  expect(intersperse([], 0)).toEqual([]);
  expect(intersperse([1], 0)).toEqual([1]);

  expect(intersperse([1, 2], 0)).toEqual([1, 0, 2]);
  expect(intersperse([1, 2, 3, 4], 0)).toEqual([1, 0, 2, 0, 3, 0, 4]);
  expect(intersperse(['a', 'b', 'c'], 0)).toEqual(['a', 0, 'b', 0, 'c']);
});

test('takeUntil should only return results until max length is reached', () => {
  expect(takeUntil(range(20), 30, stubTrue)).toEqual(range(20));
  expect(takeUntil(range(20), 10, stubTrue)).toEqual(range(10));
  expect(takeUntil(range(20), 0, stubTrue)).toEqual([]);
});

test('takeUntil should return items filtered by the predicate', () => {
  expect(takeUntil(range(20), 20, stubFalse)).toEqual([]);
  expect(takeUntil(range(20), 20, (i) => i % 2 === 0)).toEqual(range(0, 20, 2));
  expect(takeUntil(range(20), 5, (i) => i % 2 === 0)).toEqual(range(0, 10, 2));
});

describe(firstNonNull, () => {
  test('should return first non-null value produced', () => {
    expect(firstNonNull([() => 0])).toEqual(0);
    expect(firstNonNull([() => ''])).toEqual('');
    expect(firstNonNull([() => false, () => true])).toEqual(false);
    expect(firstNonNull([() => true, () => false])).toEqual(true);
    expect(firstNonNull([() => null, () => undefined])).toBeNull();
  });
});

describe(deltas, () => {
  test('should return an empty array for arrays of 0 or 1', () => {
    expect(deltas([])).toEqual([]);
    expect(deltas([1])).toEqual([]);
    expect(deltas([-1])).toEqual([]);
  });

  test('should return difference between elements', () => {
    expect(deltas([1, 2, 3, 4, 5])).toEqual([1, 1, 1, 1]);
    expect(deltas([1, 3, 5, 7, 9])).toEqual([2, 2, 2, 2]);
    expect(deltas([1, 1, -1, -3, -4])).toEqual([0, -2, -2, -1]);
  });
});