Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
33 changes: 33 additions & 0 deletions Conversions/SpeedConversion.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
/**
* @function kmphToMph
* @description Converts speed from kilometers per hour to miles per hour.
* @param {number} kmph - Speed in kilometers per hour
* @returns {number} - Speed in miles per hour
* @see https://en.wikipedia.org/wiki/Miles_per_hour
* @example kmphToMph(1) => 0.621371
* @example kmphToMph(100) => 62.1371
*/
const kmphToMph = (kmph) => {
if (typeof kmph !== 'number' || isNaN(kmph)) {
throw new TypeError('Input must be a number')
}
return kmph * 0.621371
}

/**
* @function mphToKmph
* @description Converts speed from miles per hour to kilometers per hour.
* @param {number} mph - Speed in miles per hour
* @returns {number} - Speed in kilometers per hour
* @see https://en.wikipedia.org/wiki/Kilometres_per_hour
* @example mphToKmph(1) => 1.60934
* @example mphToKmph(60) => 96.5604
*/
const mphToKmph = (mph) => {
if (typeof mph !== 'number' || isNaN(mph)) {
throw new TypeError('Input must be a number')
}
return mph * 1.60934
}

export { kmphToMph, mphToKmph }
53 changes: 53 additions & 0 deletions Conversions/test/SpeedConversion.test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
import { kmphToMph, mphToKmph } from '../SpeedConversion.js'

describe('kmphToMph', () => {
test('kmphToMph(0) returns 0', () => {
expect(kmphToMph(0)).toBe(0)
})

test('kmphToMph(1) returns 0.621371', () => {
expect(kmphToMph(1)).toBeCloseTo(0.621371)
})

test('kmphToMph(100) returns 62.1371', () => {
expect(kmphToMph(100)).toBeCloseTo(62.1371)
})

test('kmphToMph(-60) works for negative values', () => {
expect(kmphToMph(-60)).toBeCloseTo(-37.28226)
})

test('throws TypeError for non-number input', () => {
expect(() => kmphToMph('100')).toThrow(TypeError)
})

test('throws TypeError for NaN', () => {
expect(() => kmphToMph(NaN)).toThrow(TypeError)
})
})

describe('mphToKmph', () => {
test('mphToKmph(0) returns 0', () => {
expect(mphToKmph(0)).toBe(0)
})

test('mphToKmph(1) returns 1.60934', () => {
expect(mphToKmph(1)).toBeCloseTo(1.60934)
})

test('mphToKmph(60) returns 96.5604', () => {
expect(mphToKmph(60)).toBeCloseTo(96.5604)
})

test('mphToKmph(-30) works for negative values', () => {
expect(mphToKmph(-30)).toBeCloseTo(-48.2802)
})

test('throws TypeError for non-number input', () => {
expect(() => mphToKmph('60')).toThrow(TypeError)
})

test('throws TypeError for NaN', () => {
expect(() => mphToKmph(NaN)).toThrow(TypeError)
})
})
Loading