diff --git a/maths/area_of_various_shapes.ts b/maths/area_of_various_shapes.ts new file mode 100644 index 00000000..3680b8c4 --- /dev/null +++ b/maths/area_of_various_shapes.ts @@ -0,0 +1,123 @@ +/** + * @function areaOfSquare + * @description Calculate the area of a square. + * @param {number} side - The side of the square. + * @returns {number} - Area of the square. + * @throws {RangeError} - when side is 0 or negative. + * @see https://en.wikipedia.org/wiki/Square + * @example areaOfSquare(4) => 16 + */ +export function areaOfSquare(side: number): number{ + if(side<=0){ + throw new RangeError('Side must be non-zero positive value'); + } + return side*side; +} + +/** + * @function areaOfRectangle + * @description Calculate the area of a rectangle. + * @param {number} length - The length of the rectangle. + * @param {number} width - The width of the rectangle. + * @returns {number} - Area of the rectangle. + * @throws {RangeError} - when length or width is 0 or negative. + * @see https://en.wikipedia.org/wiki/Rectangle + * @example areaOfRectangle(4, 5) => 20 + */ +export function areaOfRectangle(length: number, width:number):number{ + if(length<=0 || width<=0){ + throw new RangeError('Length and width must be non-zero positive values'); + } + return length*width; +} + +/** + * @function areaOfCircle + * @description Calculate the area of a circle. + * @param {number} radius - The radius of the circle. + * @returns {number} - Area of the circle. + * @throws {RangeError} - when radius is 0 or negative. + * @see https://en.wikipedia.org/wiki/Circle + * @example areaOfCircle(7) => 153.93804002589985 + */ +export function areaOfCircle(radius:number):number{ + if(radius<=0){ + throw new RangeError('Radius must be non-zero positive value'); + } + return Math.PI*radius*radius; +} + +/** + * @function areaOfTriangle + * @description Calculate the area of a triangle. + * @param {number} base - the base of the triangle. + * @param {number} height - the height of the triangle. + * @returns {number} - Area of the triangle. + * @throws {RangeError} - when base or height is 0 or negative. + * @see https://en.wikipedia.org/wiki/Triangle + * @example areaOfTriangle(4, 5) => 10 + */ +export function areaOfTriangle(base: number, height:number): number{ + if(base<=0 || height<=0){ + throw new RangeError('Base and height must be non-zero positive values'); + } + + return 0.5*base*height; +} + +/** + * @function areaOfTrapezoid + * @description Calculate the area of a trapezoid. + * @param {number} a - the length of the first base of the trapezoid. + * @param {number} b - the length of the second base of the trapezoid. + * @param {number} height - the height of the trapezoid. + * @returns {number} - Area of the trapezoid. + * @throws {RangeError} - when a, b or height is 0 or negative. + * @see https://en.wikipedia.org/wiki/Trapezoid + * @example areaOfTrapezoid(4, 5, 6) => 27 + */ + +export function areaOfTrapezoid(a: number, b:number, height:number):number{ + if(a<=0 || b<=0 || height<=0){ + throw new RangeError('Bases and height must be non-zero positive values'); + } + + return 0.5*(a+b)*height; +} + +/** + * @function areaOfEclipse + * @description Calculate the area of an eclipse. + * @param {number} a - the length of the semi-major axis of the eclipse. + * @param {number} b - the length of the semi-minor axis of the eclipse. + * @returns {number} - Area of the eclipse. + * @throws {RangeError} - when a or b is 0 or negative. + * @see https://en.wikipedia.org/wiki/Ellipse + * @example areaOfEclipse(4, 5) => 62.83185307179586 + */ +export function areaOfEclipse(a: number, b:number):number{ + if(a<=0 || b<=0){ + throw new RangeError('Semi-major and semi-minor axes must be non-zero positive values'); + } + + return Math.PI*a*b; +} + + +/** + * @function areaOfParallelogram + * @description Calculate the area of a parallelogram. + * @param {number} base - the base of the parallelogram. + * @param {number} height - the height of the parallelogram. + * @returns {number} - Area of the parallelogram. + * @throws {RangeError} - when base or height is 0 or negative. + * @see https://en.wikipedia.org/wiki/Parallelogram + * @example areaOfParallelogram(4, 5) => 20 + */ +export function areaOfParallelogram(base: number, height:number): number{ + if(base<=0 || height<=0){ + throw new RangeError('Base and height must be non-zero positive values'); + } + + return base*height; +} \ No newline at end of file diff --git a/maths/test/area_of_various_shapes.test.ts b/maths/test/area_of_various_shapes.test.ts new file mode 100644 index 00000000..d8db2169 --- /dev/null +++ b/maths/test/area_of_various_shapes.test.ts @@ -0,0 +1,110 @@ +import { + areaOfSquare, + areaOfRectangle, + areaOfCircle, + areaOfTriangle, + areaOfTrapezoid, + areaOfEclipse, + areaOfParallelogram +} from '../area_of_various_shapes' + +describe('area of square', () => { + test.each([ + [4, 16], + [7, 49], + [10, 100] + ])(`areaOfSquare(%i) should return %d`, (side, expected) => { + expect(areaOfSquare(side)).toBe(expected) + }) + + test('should throw error on invalid input', () => { + expect(() => areaOfSquare(0)).toThrow(RangeError) + }) +}) + +describe('area of rectangle', () => { + test.each([ + [4, 5, 20], + [7, 10, 70], + [10, 15, 150] + ])(`areaOfRectangle(%d,%d) should return %d`, (length, width, expected) => { + expect(areaOfRectangle(length, width)).toBe(expected) + }) + + test('should throw error on invalid input', () => { + expect(() => areaOfRectangle(0, -1)).toThrow(RangeError) + }) +}) + +describe('area of circle', () => { + test.each([ + [7, Math.PI * 7 * 7], + [10, Math.PI * 10 * 10], + [15, Math.PI * 15 * 15] + ])(`areaOfCircle(%d) should return %d`, (radius, expected) => { + expect(areaOfCircle(radius)).toBe(expected) + }) + + test('Should throw error on invalid input', () => { + expect(() => areaOfCircle(-5)).toThrow(RangeError) + }) +}) + +describe('area of triangle', () => { + test.each([ + [4, 5, 10], + [7, 10, 35], + [10, 15, 75] + ])(`areaOfTriangle(%d,%d) should return %d`, (base, height, expected) => { + expect(areaOfTriangle(base, height)).toBe(expected) + }) + + test('Should throw error on invalid input', () => { + expect(() => areaOfTriangle(0, -1)).toThrow(RangeError) + }) +}) + +describe('area of trapezoid', () => { + test.each([ + [4, 5, 6, 27], + [5, 8, 4, 26], + [10, 20, 15, 225] + ])( + `areaOfTrapezoid(%d, %d, %d) should return %d`, + (a, b, height, expected) => { + expect(areaOfTrapezoid(a, b, height)).toBe(expected) + } + ) + + test('Should throw error on invalid input', () => { + expect(() => areaOfTrapezoid(2, 3, -5)).toThrow(RangeError) + }) +}) + +describe('area of eclipse', () => { + test.each([ + [4, 5, Math.PI * 4 * 5], + [7, 10, Math.PI * 7 * 10], + [10, 15, Math.PI * 10 * 15] + ])(`areaOfEclipse(%d, %d) should return %d`, (a, b, expected) => { + expect(areaOfEclipse(a, b)).toBe(expected) + }) + + test('Should throw error on invalid input', () => { + expect(() => areaOfEclipse(-5, 2)).toThrow(RangeError) + }) +}) + +describe('area of parallelogram', () => { + test.each([ + [4,5,20], + [7,10,70], + [10,15,150] + ])(`areaOfParallelogram(%d,%d) should return %d`, (base, height, expected) => { + expect(areaOfParallelogram(base, height)).toBe(expected) + }) + + test('Should throw error on invalid input', () => { + expect(() => areaOfParallelogram(0, -1)).toThrow(RangeError) + }) +}) \ No newline at end of file pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy