diff --git a/README.md b/README.md index 4410022..86a598e 100644 --- a/README.md +++ b/README.md @@ -43,6 +43,7 @@ const frozen = objectUtil.deepFreeze({ a: { b: 1 } }); // Number utilities const total = numberUtil.sum(1, 2, 3, 4, 5); // 15 const difference = numberUtil.subtract(10, 3); // 7 +const product = numberUtil.multiply(2, 3, 4); // 24 // Validation utilities const isValid = validationUtil.checkEmail("user@example.com"); // true @@ -77,6 +78,7 @@ const theme = cookieUtil.getCookie("theme"); - `sum(...numbers: number[]): number` - Calculates sum of numbers - `subtract(...numbers: number[]): number` - Calculates subtraction of numbers +- `multiply(...numbers: number[]): number` - Calculates multiplication of numbers ### ValidationUtil diff --git a/package/numberUtil/index.ts b/package/numberUtil/index.ts index a4d724f..4ad8b35 100644 --- a/package/numberUtil/index.ts +++ b/package/numberUtil/index.ts @@ -1,2 +1,3 @@ export { default as sum } from "./sum"; export { default as subtract } from "./subtract"; +export { default as multiply } from "./multiply"; diff --git a/package/numberUtil/multiply/index.test.ts b/package/numberUtil/multiply/index.test.ts new file mode 100644 index 0000000..6447941 --- /dev/null +++ b/package/numberUtil/multiply/index.test.ts @@ -0,0 +1,50 @@ +import { describe, test, expect } from "vitest"; +import multiply from "."; + +describe("multiply", () => { + describe("기본 케이스", () => { + test("두 양수를 올바르게 곱한다", () => { + expect(multiply(2, 3)).toBe(6); + }); + + test("여러 숫자를 올바르게 곱한다", () => { + expect(multiply(2, 3, 4)).toBe(24); + }); + + test("인수 중 0이 포함되면 0을 반환한다", () => { + expect(multiply(5, 10, 0, 20)).toBe(0); + }); + + test("음수를 올바르게 처리한다", () => { + expect(multiply(-5, 10)).toBe(-50); + expect(multiply(-5, -10)).toBe(50); + }); + + test("부동소수점을 올바르게 처리한다", () => { + expect(multiply(0.5, 10)).toBe(5); + }); + }); + + describe("엣지 케이스", () => { + test("인수가 없을 때 1을 반환한다", () => { + expect(multiply()).toBe(1); + }); + + test("인수가 하나일 때 해당 숫자 자신을 반환한다", () => { + expect(multiply(7)).toBe(7); + expect(multiply(-100)).toBe(-100); + }); + + test("인수 중 NaN이 포함되면 NaN을 반환한다", () => { + expect(multiply(NaN)).toBeNaN(); + expect(multiply(NaN, 7)).toBeNaN(); + expect(multiply(5, NaN, 10)).toBeNaN(); + }); + + test("Infinity(무한대)를 올바르게 처리한다", () => { + expect(multiply(Infinity, 2)).toBe(Infinity); + expect(multiply(Infinity, -2)).toBe(-Infinity); + expect(multiply(Infinity, 0)).toBeNaN(); + }); + }); +}); diff --git a/package/numberUtil/multiply/index.ts b/package/numberUtil/multiply/index.ts new file mode 100644 index 0000000..e744fd5 --- /dev/null +++ b/package/numberUtil/multiply/index.ts @@ -0,0 +1,3 @@ +export default function multiply(...args: number[]): number { + return args.reduce((acc, curr) => acc * curr, 1); +} diff --git a/vitest-report.xml b/vitest-report.xml index 363111d..ae68f62 100644 --- a/vitest-report.xml +++ b/vitest-report.xml @@ -1,119 +1,157 @@ - - - + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - + - + - - - - - + - - + + - + - + - + - - + + - - + + - - + + - - + + - - + + + + + + + + + + + + + + + + + + + + + + - + + + + + + + + + - - + + - + - + + + - + - + + + - + - + + + + + + + - + + + + + - + - + - + - + - + - + - + - +