From 623fd476cc865065feed45f586f4a7a29a4f4df9 Mon Sep 17 00:00:00 2001 From: sarthakgupta1907-cell Date: Mon, 2 Nov 2026 20:28:17 +0530 Subject: [PATCH] feat: add Fahrenheit to Celsius conversion --- Conversions/FahrenheitToCelsius.js | 19 +++++++++++ Conversions/test/FahrenheitToCelsius.test.js | 35 ++++++++++++++++++++ 2 files changed, 54 insertions(+) create mode 100644 Conversions/FahrenheitToCelsius.js create mode 100644 Conversions/test/FahrenheitToCelsius.test.js diff --git a/Conversions/FahrenheitToCelsius.js b/Conversions/FahrenheitToCelsius.js new file mode 100644 index 0000000000..4099845fd5 --- /dev/null +++ b/Conversions/FahrenheitToCelsius.js @@ -0,0 +1,19 @@ +/** + * @function fahrenheitToCelsius + * @description Converts a temperature from Fahrenheit to Celsius. + * The formula is: C = (F - 32) × 5/9 + * @param {number} fahrenheit - Temperature in Fahrenheit + * @returns {number} - Temperature in Celsius + * @see https://en.wikipedia.org/wiki/Celsius + * @example fahrenheitToCelsius(32) => 0 + * @example fahrenheitToCelsius(212) => 100 + * @example fahrenheitToCelsius(-40) => -40 + */ +const fahrenheitToCelsius = (fahrenheit) => { + if (typeof fahrenheit !== 'number' || isNaN(fahrenheit)) { + throw new TypeError('Input must be a number') + } + return ((fahrenheit - 32) * 5) / 9 +} + +export { fahrenheitToCelsius } diff --git a/Conversions/test/FahrenheitToCelsius.test.js b/Conversions/test/FahrenheitToCelsius.test.js new file mode 100644 index 0000000000..99779f92ce --- /dev/null +++ b/Conversions/test/FahrenheitToCelsius.test.js @@ -0,0 +1,35 @@ +import { fahrenheitToCelsius } from '../FahrenheitToCelsius.js' + +describe('fahrenheitToCelsius', () => { + test('fahrenheitToCelsius(32) returns 0', () => { + expect(fahrenheitToCelsius(32)).toBe(0) + }) + + test('fahrenheitToCelsius(212) returns 100', () => { + expect(fahrenheitToCelsius(212)).toBe(100) + }) + + test('fahrenheitToCelsius(-40) returns -40', () => { + expect(fahrenheitToCelsius(-40)).toBe(-40) + }) + + test('fahrenheitToCelsius(98.6) returns 37', () => { + expect(fahrenheitToCelsius(98.6)).toBeCloseTo(37) + }) + + test('fahrenheitToCelsius(68) returns 20', () => { + expect(fahrenheitToCelsius(68)).toBeCloseTo(20) + }) + + test('fahrenheitToCelsius(-459.67) returns -273.15', () => { + expect(fahrenheitToCelsius(-459.67)).toBeCloseTo(-273.15) + }) + + test('throws TypeError for non-number input', () => { + expect(() => fahrenheitToCelsius('32')).toThrow(TypeError) + }) + + test('throws TypeError for NaN', () => { + expect(() => fahrenheitToCelsius(NaN)).toThrow(TypeError) + }) +})