diff --git a/Maths/IsEven.ts b/Maths/IsEven.ts new file mode 100644 index 00000000..52154a99 --- /dev/null +++ b/Maths/IsEven.ts @@ -0,0 +1,16 @@ +/** + * @function IsEven + * @description Determine whether a number is even. + * @param {Number} num - A number. + * @return {Boolean} - Whether the given number is even. + * @see https://en.wikipedia.org/wiki/Parity_(mathematics) + * @example IsEven(1) = false + * @example IsEven(2) = true + */ + export const IsEven = (num: number): boolean => { + if (!Number.isInteger(num)) { + throw new Error("only integers can be even or odd"); + } + + return num % 2 === 0; + }; \ No newline at end of file diff --git a/Maths/IsOdd.ts b/Maths/IsOdd.ts new file mode 100644 index 00000000..f2ed46f9 --- /dev/null +++ b/Maths/IsOdd.ts @@ -0,0 +1,16 @@ +/** + * @function IsOdd + * @description Determine whether a number is odd. + * @param {Number} num - A number. + * @return {Boolean} - Whether the given number is odd. + * @see https://en.wikipedia.org/wiki/Parity_(mathematics) + * @example IsOdd(1) = true + * @example IsOdd(2) = false + */ + export const IsOdd = (num: number): boolean => { + if (!Number.isInteger(num)) { + throw new Error("only integers can be even or odd"); + } + + return num % 2 !== 0; + }; \ No newline at end of file diff --git a/Maths/test/IsEven.test.ts b/Maths/test/IsEven.test.ts new file mode 100644 index 00000000..283c4f38 --- /dev/null +++ b/Maths/test/IsEven.test.ts @@ -0,0 +1,16 @@ +import { IsEven } from "../IsEven"; + +describe("IsEven", () => { + test.each([[2, true], [1, false], [0, true], [-1, false], [-2, true]])( + "correct output for for %i", + (nums, expected) => { + expect(IsEven(nums)).toBe(expected); + }, + ); + + test("only whole numbers should be accepted", () => { + expect(() => IsEven(0.5)).toThrowError( + "only integers can be even or odd", + ); + }); +}); \ No newline at end of file diff --git a/Maths/test/IsOdd.test.ts b/Maths/test/IsOdd.test.ts new file mode 100644 index 00000000..91fd6925 --- /dev/null +++ b/Maths/test/IsOdd.test.ts @@ -0,0 +1,16 @@ +import { IsOdd } from "../IsOdd"; + +describe("IsOdd", () => { + test.each([[2, false], [1, true], [0, false], [-1, true], [-2, false]])( + "correct output for for %i", + (nums, expected) => { + expect(IsOdd(nums)).toBe(expected); + }, + ); + + test("only whole numbers should be accepted", () => { + expect(() => IsOdd(0.5)).toThrowError( + "only integers can be even or odd", + ); + }); +}); \ No newline at end of file