diff --git a/Conversions/WeightConversion.js b/Conversions/WeightConversion.js new file mode 100644 index 0000000000..017088f655 --- /dev/null +++ b/Conversions/WeightConversion.js @@ -0,0 +1,33 @@ +/** + * @function kilogramsToPounds + * @description Converts weight from kilograms to pounds. + * @param {number} kg - Weight in kilograms + * @returns {number} - Weight in pounds + * @see https://en.wikipedia.org/wiki/Pound_(mass) + * @example kilogramsToPounds(1) => 2.20462 + * @example kilogramsToPounds(10) => 22.0462 + */ +const kilogramsToPounds = (kg) => { + if (typeof kg !== 'number' || isNaN(kg)) { + throw new TypeError('Input must be a number') + } + return kg * 2.20462 +} + +/** + * @function poundsToKilograms + * @description Converts weight from pounds to kilograms. + * @param {number} pounds - Weight in pounds + * @returns {number} - Weight in kilograms + * @see https://en.wikipedia.org/wiki/Kilogram + * @example poundsToKilograms(1) => 0.453592 + * @example poundsToKilograms(10) => 4.53592 + */ +const poundsToKilograms = (pounds) => { + if (typeof pounds !== 'number' || isNaN(pounds)) { + throw new TypeError('Input must be a number') + } + return pounds * 0.453592 +} + +export { kilogramsToPounds, poundsToKilograms } diff --git a/Conversions/test/WeightConversion.test.js b/Conversions/test/WeightConversion.test.js new file mode 100644 index 0000000000..65087e13f9 --- /dev/null +++ b/Conversions/test/WeightConversion.test.js @@ -0,0 +1,53 @@ +import { kilogramsToPounds, poundsToKilograms } from '../WeightConversion.js' + +describe('kilogramsToPounds', () => { + test('kilogramsToPounds(0) returns 0', () => { + expect(kilogramsToPounds(0)).toBe(0) + }) + + test('kilogramsToPounds(1) returns 2.20462', () => { + expect(kilogramsToPounds(1)).toBeCloseTo(2.20462) + }) + + test('kilogramsToPounds(10) returns 22.0462', () => { + expect(kilogramsToPounds(10)).toBeCloseTo(22.0462) + }) + + test('kilogramsToPounds(70) returns 154.324', () => { + expect(kilogramsToPounds(70)).toBeCloseTo(154.324) + }) + + test('throws TypeError for non-number input', () => { + expect(() => kilogramsToPounds('10')).toThrow(TypeError) + }) + + test('throws TypeError for NaN', () => { + expect(() => kilogramsToPounds(NaN)).toThrow(TypeError) + }) +}) + +describe('poundsToKilograms', () => { + test('poundsToKilograms(0) returns 0', () => { + expect(poundsToKilograms(0)).toBe(0) + }) + + test('poundsToKilograms(1) returns 0.453592', () => { + expect(poundsToKilograms(1)).toBeCloseTo(0.453592) + }) + + test('poundsToKilograms(10) returns 4.53592', () => { + expect(poundsToKilograms(10)).toBeCloseTo(4.53592) + }) + + test('poundsToKilograms(150) returns 68.0388', () => { + expect(poundsToKilograms(150)).toBeCloseTo(68.0388) + }) + + test('throws TypeError for non-number input', () => { + expect(() => poundsToKilograms('10')).toThrow(TypeError) + }) + + test('throws TypeError for NaN', () => { + expect(() => poundsToKilograms(NaN)).toThrow(TypeError) + }) +})