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) + }) +}) pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy