From 1cca9867e3a34cd32c95fe28f801bff934efd816 Mon Sep 17 00:00:00 2001 From: Suhas-30 <3suhashs@gmail.com> Date: Wed, 30 Jul 2025 20:06:53 +0530 Subject: [PATCH] feat: add BasicPrefixSum algorithm and tests --- PrefixSum/BasicPrefixSum.js | 18 ++++++++++++++++++ PrefixSum/tests/BasicPrefixSum.test.js | 21 +++++++++++++++++++++ 2 files changed, 39 insertions(+) create mode 100644 PrefixSum/BasicPrefixSum.js create mode 100644 PrefixSum/tests/BasicPrefixSum.test.js diff --git a/PrefixSum/BasicPrefixSum.js b/PrefixSum/BasicPrefixSum.js new file mode 100644 index 0000000000..f1513bcc98 --- /dev/null +++ b/PrefixSum/BasicPrefixSum.js @@ -0,0 +1,18 @@ +function prefixSum(arr) { + if (!Array.isArray(arr) || arr.some((num) => typeof num !== 'number')) { + throw new TypeError(`Input must be an array of numbers`) + } + + const pSum = [] + + let sum = 0 + + for (const num of arr) { + sum += num + pSum.push(sum) + } + + return pSum +} + +export { prefixSum } diff --git a/PrefixSum/tests/BasicPrefixSum.test.js b/PrefixSum/tests/BasicPrefixSum.test.js new file mode 100644 index 0000000000..29d0d9bd5d --- /dev/null +++ b/PrefixSum/tests/BasicPrefixSum.test.js @@ -0,0 +1,21 @@ +import { prefixSum } from '../BasicPrefixSum.js' +import { describe, it, expect } from 'vitest' + +describe('prefixSum', () => { + it(`Should return computed prefix sum array for a passed input array`, () => { + expect(prefixSum([3, 6, 9, 15])).toEqual([3, 9, 18, 33]) + expect(prefixSum([0, 5, -2, 4])).toEqual([0, 5, 3, 7]) + }) + + it(`Should return empty array when passed input array is empty`, () => { + expect(prefixSum([])).toEqual([]) + }) + + it(`should throw TypeError if input is not an array of numbers`, () => { + expect(() => prefixSum('array')).toThrow(TypeError) + expect(() => prefixSum(1)).toThrow(TypeError) + expect(() => prefixSum([1, '2'])).toThrow(TypeError) + expect(() => prefixSum([1, true])).toThrow(TypeError) + expect(() => prefixSum([{}, 2])).toThrow(TypeError) + }) +})