diff --git a/src/splitInteger.test.js b/src/splitInteger.test.js index a610317d..e6759ed8 100644 --- a/src/splitInteger.test.js +++ b/src/splitInteger.test.js @@ -2,20 +2,52 @@ const splitInteger = require('./splitInteger'); -test(`should split a number into equal parts - if a value is divisible by a numberOfParts`, () => { - +test('should split a number into equal parts if divisible', () => { + const parts = splitInteger(6, 2); + expect(parts).toEqual([3, 3]); + expect(parts).toHaveLength(2); + expect(parts.reduce((a, b) => a + b, 0)).toBe(6); + expect(parts.every(Number.isInteger)).toBe(true); + expect(Math.max(...parts) - Math.min(...parts)).toBeLessThanOrEqual(1); + expect(parts.every((v, i) => i === 0 || parts[i] >= parts[i - 1])).toBe(true); }); -test(`should return a part equals to a value - when splitting into 1 part`, () => { - +test('should split a number into almost equal parts', () => { + const parts = splitInteger(32, 6); + expect(parts).toEqual([5, 5, 5, 5, 6, 6]); + expect(parts).toHaveLength(6); + expect(parts.reduce((a, b) => a + b, 0)).toBe(32); + expect(parts.every(Number.isInteger)).toBe(true); + expect(Math.max(...parts) - Math.min(...parts)).toBeLessThanOrEqual(1); + expect(parts.every((v, i) => i === 0 || parts[i] >= parts[i - 1])).toBe(true); }); -test('should sort parts ascending if they are not equal', () => { - +test('should handle value < numberOfParts', () => { + const parts = splitInteger(2, 5); + expect(parts).toEqual([0, 0, 0, 1, 1]); + expect(parts).toHaveLength(5); + expect(parts.reduce((a, b) => a + b, 0)).toBe(2); + expect(parts.every(Number.isInteger)).toBe(true); + expect(Math.max(...parts) - Math.min(...parts)).toBeLessThanOrEqual(1); + expect(parts.every((v, i) => i === 0 || parts[i] >= parts[i - 1])).toBe(true); }); -test('should add zeros if value < numberOfParts', () => { +test('should return [8] when splitting 8 into 1 part', () => { + const parts = splitInteger(8, 1); + expect(parts).toEqual([8]); + expect(parts).toHaveLength(1); + expect(parts.reduce((a, b) => a + b, 0)).toBe(8); + expect(parts.every(Number.isInteger)).toBe(true); + expect(Math.max(...parts) - Math.min(...parts)).toBeLessThanOrEqual(1); + expect(parts.every((v, i) => i === 0 || parts[i] >= parts[i - 1])).toBe(true); +}); +test('should split 17 into 4 almost equal parts [4, 4, 4, 5]', () => { + const parts = splitInteger(17, 4); + expect(parts).toEqual([4, 4, 4, 5]); + expect(parts).toHaveLength(4); + expect(parts.reduce((a, b) => a + b, 0)).toBe(17); + expect(parts.every(Number.isInteger)).toBe(true); + expect(Math.max(...parts) - Math.min(...parts)).toBeLessThanOrEqual(1); + expect(parts.every((v, i) => i === 0 || parts[i] >= parts[i - 1])).toBe(true); });