diff --git a/src/main/kotlin/math/Perimeter.kt b/src/main/kotlin/math/Perimeter.kt new file mode 100644 index 0000000..2d59b5d --- /dev/null +++ b/src/main/kotlin/math/Perimeter.kt @@ -0,0 +1,54 @@ +package math + +import java.lang.IllegalArgumentException +import kotlin.math.pow + +/** + * Calculate the perimeter of a rectangle + * + * @param length length of rectangle + * @param width width of rectangle + * @return perimeter of given rectangle + */ +fun perimeterOfARectangle(length: Double, width: Double) = when { + length > 0 && width > 0 -> 2 * (length + width) + else -> throw IllegalArgumentException("Length and Width must be positive") +} + +/** + * Calculate the perimeter of a square + * + * @param sideLength side length of square + * @return perimeter of given square + */ +fun perimeterOfASquare(sideLength: Double) = + when { + sideLength > 0 -> 4 * sideLength + else -> throw IllegalArgumentException("Side Length must be positive") + } + +/** + * Calculate the perimeter of a triangle + * + * @param base base of triangle + * @param sideLength1 side length of triangle + * @param sideLength2 other side length of triangle + * @return perimeter of given triangle + */ +fun perimeterOfATriangle(base: Double, sideLength1: Double, sideLength2: Double) = + when { + base > 0 && sideLength1 > 0 && sideLength2 > 0 -> base + sideLength1 + sideLength2 + else -> throw IllegalArgumentException("Base and Sides of the triangle must be positive") + } + +/** + * Calculate the perimeter of a circle + * + * @param radius radius of circle + * @return perimeter of given circle + */ +fun perimeterOfACircle(radius: Double) = + when { + radius > 0 -> 2 * Math.PI * radius + else -> throw IllegalArgumentException("Radius must be positive") + } \ No newline at end of file diff --git a/src/test/kotlin/math/PerimeterTest.kt b/src/test/kotlin/math/PerimeterTest.kt new file mode 100644 index 0000000..bc8d716 --- /dev/null +++ b/src/test/kotlin/math/PerimeterTest.kt @@ -0,0 +1,34 @@ +package math + +import org.junit.Test +import java.lang.IllegalArgumentException + +class PerimeterTest { + @Test + fun testPerimeterOfARectangle() = assert(perimeterOfARectangle(10.0, 5.0) == 30.0) + + @Test + fun testPerimeterOfASquare() = assert(perimeterOfASquare(5.0) == 20.0) + + @Test + fun testPerimeterOfACircle() = assert(perimeterOfACircle(1.0) == 2 *Math.PI) + + @Test + fun testPerimeterOfATriangle() = assert(perimeterOfATriangle(5.0, 10.0, 10.0) == 25.0) + + @Test(expected = IllegalArgumentException::class) + fun testPerimeterWithNegatives() { + perimeterOfARectangle(-1.0, 0.0) + perimeterOfASquare(-1.0) + perimeterOfACircle(-1.0) + perimeterOfATriangle(-1.0, 1.0, 1.0) + } + + @Test(expected = IllegalArgumentException::class) + fun testPerimeterWithZeros() { + perimeterOfARectangle(0.0, 0.0) + perimeterOfASquare(0.0) + perimeterOfACircle(0.0) + perimeterOfATriangle(0.0, 1.0, 1.0) + } +} \ No newline at end of file