Skip to content

Commit ef832f6

Browse files
merge: add areaTriangleWithAllThreeSides method in Math/Area.js (#875)
1 parent 3d2a48f commit ef832f6

File tree

2 files changed

+153
-48
lines changed

2 files changed

+153
-48
lines changed

Maths/Area.js

+133-48
Original file line numberDiff line numberDiff line change
@@ -1,91 +1,165 @@
11
/*
22
Calculate the area of various shapes
3+
*/
34

4-
Calculate the Surface Area of a Cube.
5-
Example: surfaceAreaCube(1) will return 6
6-
More about: https://en.wikipedia.org/wiki/Area#Surface_area
5+
/**
6+
* @function surfaceAreaCube
7+
* @description Calculate the Surface Area of a Cube.
8+
* @param {Integer} side - Integer
9+
* @return {Integer} - 6 * side ** 2
10+
* @see [surfaceAreaCube](https://en.wikipedia.org/wiki/Area#Surface_area)
11+
* @example surfaceAreaCube(1) = 6
712
*/
8-
const surfaceAreaCube = (sideLength) => {
9-
validateNumericParam(sideLength, 'sideLength')
10-
return (6.0 * sideLength ** 2.0)
13+
const surfaceAreaCube = (side) => {
14+
validateNumericParam(side, 'side')
15+
return 6 * side ** 2
1116
}
1217

13-
/*
14-
Calculate the Surface Area of a Sphere.
15-
Wikipedia reference: https://en.wikipedia.org/wiki/Sphere
16-
return 4 * pi * r^2
17-
*/
18+
/**
19+
* @function surfaceAreaSphere
20+
* @description Calculate the Surface Area of a Sphere.
21+
* @param {Integer} radius - Integer
22+
* @return {Integer} - 4 * pi * r^2
23+
* @see [surfaceAreaSphere](https://en.wikipedia.org/wiki/Sphere)
24+
* @example surfaceAreaSphere(5) = 314.1592653589793
25+
*/
1826
const surfaceAreaSphere = (radius) => {
1927
validateNumericParam(radius, 'radius')
20-
return (4.0 * Math.PI * radius ** 2.0)
28+
return 4.0 * Math.PI * radius ** 2.0
2129
}
2230

23-
/*
24-
Calculate the area of a rectangle
25-
Wikipedia reference: https://en.wikipedia.org/wiki/Area#Quadrilateral_area
26-
return width * length
27-
*/
31+
/**
32+
* @function areaRectangle
33+
* @description Calculate the area of a rectangle.
34+
* @param {Integer} length - Integer
35+
* @param {Integer} width - Integer
36+
* @return {Integer} - width * length
37+
* @see [areaRectangle](https://en.wikipedia.org/wiki/Area#Quadrilateral_area)
38+
* @example areaRectangle(4) = 16
39+
*/
2840
const areaRectangle = (length, width) => {
2941
validateNumericParam(length, 'Length')
3042
validateNumericParam(width, 'Width')
31-
return (width * length)
43+
return width * length
3244
}
3345

34-
/*
35-
Calculate the area of a square
36-
*/
37-
const areaSquare = (sideLength) => {
38-
validateNumericParam(sideLength, 'side length')
39-
return (sideLength ** 2)
46+
/**
47+
* @function areaSquare
48+
* @description Calculate the area of a square.
49+
* @param {Integer} side - Integer
50+
* @return {Integer} - side ** 2.
51+
* @see [areaSquare](https://en.wikipedia.org/wiki/Square)
52+
* @example areaSquare(4) = 16
53+
*/
54+
const areaSquare = (side) => {
55+
validateNumericParam(side, 'square side')
56+
return side ** 2
4057
}
4158

42-
/*
43-
Calculate the area of a triangle
44-
Wikipedia reference: https://en.wikipedia.org/wiki/Area#Triangle_area
45-
return base * height / 2
46-
*/
59+
/**
60+
* @function areaTriangle
61+
* @description Calculate the area of a triangle.
62+
* @param {Integer} base - Integer
63+
* @param {Integer} height - Integer
64+
* @return {Integer} - base * height / 2.
65+
* @see [areaTriangle](https://en.wikipedia.org/wiki/Area#Triangle_area)
66+
* @example areaTriangle(1.66, 3.44) = 2.8552
67+
*/
4768
const areaTriangle = (base, height) => {
4869
validateNumericParam(base, 'Base')
4970
validateNumericParam(height, 'Height')
5071
return (base * height) / 2.0
5172
}
5273

53-
/*
54-
Calculate the area of a parallelogram
55-
Wikipedia reference: https://en.wikipedia.org/wiki/Area#Dissection,_parallelograms,_and_triangles
56-
*/
74+
/**
75+
* @function areaTriangleWithAllThreeSides
76+
* @description Calculate the area of a triangle with the all three sides given.
77+
* @param {Integer} side1 - Integer
78+
* @param {Integer} side2 - Integer
79+
* @param {Integer} side3 - Integer
80+
* @return {Integer} - area of triangle.
81+
* @see [areaTriangleWithAllThreeSides](https://en.wikipedia.org/wiki/Heron%27s_formula)
82+
* @example areaTriangleWithAllThreeSides(5, 6, 7) = 14.7
83+
*/
84+
const areaTriangleWithAllThreeSides = (side1, side2, side3) => {
85+
validateNumericParam(side1, 'side1')
86+
validateNumericParam(side2, 'side2')
87+
validateNumericParam(side3, 'side3')
88+
if (
89+
side1 + side2 <= side3 ||
90+
side1 + side3 <= side2 ||
91+
side2 + side3 <= side1
92+
) {
93+
throw new TypeError('Invalid Triangle sides.')
94+
}
95+
// Finding Semi perimeter of the triangle using formula
96+
const semi = (side1 + side2 + side3) / 2
97+
98+
// Calculating the area of the triangle
99+
const area = Math.sqrt(
100+
semi * (semi - side1) * (semi - side2) * (semi - side3)
101+
)
102+
return Number(area.toFixed(2))
103+
}
104+
105+
/**
106+
* @function areaParallelogram
107+
* @description Calculate the area of a parallelogram.
108+
* @param {Integer} base - Integer
109+
* @param {Integer} height - Integer
110+
* @return {Integer} - base * height
111+
* @see [areaParallelogram](https://en.wikipedia.org/wiki/Area#Dissection,_parallelograms,_and_triangles)
112+
* @example areaParallelogram(5, 6) = 24
113+
*/
57114
const areaParallelogram = (base, height) => {
58115
validateNumericParam(base, 'Base')
59116
validateNumericParam(height, 'Height')
60-
return (base * height)
117+
return base * height
61118
}
62119

63-
/*
64-
Calculate the area of a trapezium
65-
*/
120+
/**
121+
* @function areaTrapezium
122+
* @description Calculate the area of a trapezium.
123+
* @param {Integer} base1 - Integer
124+
* @param {Integer} base2 - Integer
125+
* @param {Integer} height - Integer
126+
* @return {Integer} - (1 / 2) * (base1 + base2) * height
127+
* @see [areaTrapezium](https://en.wikipedia.org/wiki/Trapezoid)
128+
* @example areaTrapezium(5, 12, 10) = 85
129+
*/
66130
const areaTrapezium = (base1, base2, height) => {
67131
validateNumericParam(base1, 'Base One')
68132
validateNumericParam(base2, 'Base Two')
69133
validateNumericParam(height, 'Height')
70-
return 1.0 / 2.0 * (base1 + base2) * height
134+
return (1 / 2) * (base1 + base2) * height
71135
}
72136

73-
/*
74-
Calculate the area of a circle
75-
*/
137+
/**
138+
* @function areaCircle
139+
* @description Calculate the area of a circle.
140+
* @param {Integer} radius - Integer
141+
* @return {Integer} - Math.PI * radius ** 2
142+
* @see [areaCircle](https://en.wikipedia.org/wiki/Area_of_a_circle)
143+
* @example areaCircle(5, 12, 10) = 85
144+
*/
76145
const areaCircle = (radius) => {
77146
validateNumericParam(radius, 'Radius')
78-
return (Math.PI * radius ** 2)
147+
return Math.PI * radius ** 2
79148
}
80149

81-
/*
82-
Calculate the area of a rhombus
83-
Wikipedia reference: https://en.wikipedia.org/wiki/Rhombus
84-
*/
150+
/**
151+
* @function areaRhombus
152+
* @description Calculate the area of a rhombus.
153+
* @param {Integer} diagonal1 - Integer
154+
* @param {Integer} diagonal2 - Integer
155+
* @return {Integer} - (1 / 2) * diagonal1 * diagonal2
156+
* @see [areaRhombus](https://en.wikipedia.org/wiki/Rhombus)
157+
* @example areaRhombus(12, 10) = 60
158+
*/
85159
const areaRhombus = (diagonal1, diagonal2) => {
86160
validateNumericParam(diagonal1, 'diagonal one')
87161
validateNumericParam(diagonal2, 'diagonal two')
88-
return (1 / 2 * diagonal1 * diagonal2)
162+
return (1 / 2) * diagonal1 * diagonal2
89163
}
90164

91165
const validateNumericParam = (param, paramName = 'param') => {
@@ -96,4 +170,15 @@ const validateNumericParam = (param, paramName = 'param') => {
96170
}
97171
}
98172

99-
export { surfaceAreaCube, surfaceAreaSphere, areaRectangle, areaSquare, areaTriangle, areaParallelogram, areaTrapezium, areaCircle, areaRhombus }
173+
export {
174+
surfaceAreaCube,
175+
surfaceAreaSphere,
176+
areaRectangle,
177+
areaSquare,
178+
areaTriangle,
179+
areaParallelogram,
180+
areaTrapezium,
181+
areaCircle,
182+
areaRhombus,
183+
areaTriangleWithAllThreeSides
184+
}

Maths/test/Area.test.js

+20
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ describe('Testing surfaceAreaCube calculations', () => {
1414
expect(() => area.surfaceAreaCube('199')).toThrow()
1515
})
1616
})
17+
1718
describe('Testing surfaceAreaSphere calculations', () => {
1819
it('with correct value', () => {
1920
const calculateArea = area.surfaceAreaSphere(5)
@@ -24,6 +25,7 @@ describe('Testing surfaceAreaSphere calculations', () => {
2425
expect(() => area.surfaceAreaSphere(-1)).toThrow()
2526
})
2627
})
28+
2729
describe('Testing areaRectangle calculations', () => {
2830
it('with correct args', () => {
2931
const areaRectangle = area.areaRectangle(2.5, 2)
@@ -36,6 +38,7 @@ describe('Testing areaRectangle calculations', () => {
3638
expect(() => area.areaRectangle(23, 'zero')).toThrow()
3739
})
3840
})
41+
3942
describe('Testing areaSquare calculations', () => {
4043
it('with correct args', () => {
4144
const areaSquare = area.areaSquare(2.5)
@@ -46,6 +49,7 @@ describe('Testing areaSquare calculations', () => {
4649
expect(() => area.areaSquare('zero')).toThrow()
4750
})
4851
})
52+
4953
describe('Testing areaTriangle calculations', () => {
5054
it('with correct args', () => {
5155
const areaTriangle = area.areaTriangle(1.66, 3.44)
@@ -56,6 +60,19 @@ describe('Testing areaTriangle calculations', () => {
5660
expect(() => area.areaTriangle(9, 'zero')).toThrow()
5761
})
5862
})
63+
64+
describe('Testing areaTriangleWithAllThreeSides calculations', () => {
65+
it('with correct args', () => {
66+
const areaTriangle = area.areaTriangleWithAllThreeSides(5, 6, 7)
67+
expect(areaTriangle).toBe(14.7)
68+
})
69+
it('with incorrect sides, expect throw', () => {
70+
expect(() => area.areaTriangleWithAllThreeSides(-1, 1, 10)).toThrow()
71+
expect(() => area.areaTriangleWithAllThreeSides(9, 'zero', 2)).toThrow()
72+
expect(() => area.areaTriangleWithAllThreeSides(1, 10, 12)).toThrow()
73+
})
74+
})
75+
5976
describe('Testing areaParallelogram calculations', () => {
6077
it('with correct args', () => {
6178
const areaParallelogram = area.areaParallelogram(1.66, 3.44)
@@ -66,6 +83,7 @@ describe('Testing areaParallelogram calculations', () => {
6683
expect(() => area.areaParallelogram(9, 'zero')).toThrow()
6784
})
6885
})
86+
6987
describe('Testing areaTrapezium calculations', () => {
7088
it('with correct args', () => {
7189
const areaTrapezium = area.areaTrapezium(1.66, 2.41, 4.1)
@@ -77,6 +95,7 @@ describe('Testing areaTrapezium calculations', () => {
7795
expect(() => area.areaTrapezium(9, 1, 'seven')).toThrow()
7896
})
7997
})
98+
8099
describe('Testing areaCircle calculations', () => {
81100
it('with correct args', () => {
82101
const areaCircle = area.areaCircle(3.456)
@@ -87,6 +106,7 @@ describe('Testing areaCircle calculations', () => {
87106
expect(() => area.areaCircle('zero')).toThrow()
88107
})
89108
})
109+
90110
describe('Testing areaRhombus calculations', () => {
91111
it('with correct args', () => {
92112
const areaRhombus = area.areaRhombus(2.5, 2.0)

0 commit comments

Comments
 (0)