-
Notifications
You must be signed in to change notification settings - Fork 257
Created Calculator class and calculate method in SimpleCalculator interface #290
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: master
Are you sure you want to change the base?
Changes from 4 commits
95b0612
1ca2e9a
4e1fb11
43d3f7e
4af6231
65561bc
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,25 @@ | ||
| package core.basesyntax; | ||
|
|
||
| public class Calculator implements SimpleCalculator { | ||
|
|
||
| @Override | ||
| public double calculate(double firstValue, double secondValue, char operation) { | ||
| switch (operation) { | ||
| case '+': | ||
| return firstValue + secondValue; | ||
| case '-': | ||
| return firstValue - secondValue; | ||
| case '*': | ||
| return firstValue * secondValue; | ||
| case '/': | ||
| if (secondValue == 0) { | ||
| throw new RuntimeException("Can`t division by zero"); | ||
| } | ||
| return firstValue / secondValue; | ||
| case '^': | ||
| return Math.pow(firstValue, secondValue); | ||
| default: | ||
| throw new IllegalOperationException("Illegal operation"); | ||
| } | ||
| } | ||
| } |
This file was deleted.
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,7 @@ | ||
| package core.basesyntax; | ||
|
|
||
| public class IllegalOperationException extends RuntimeException { | ||
| public IllegalOperationException(String message) { | ||
| super(message); | ||
| } | ||
| } |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,5 @@ | ||
| package core.basesyntax; | ||
|
|
||
| public interface SimpleCalculator { | ||
| double calculate(double firstValue, double secondValue, char operation); | ||
| } |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,268 @@ | ||
| package core.basesyntax; | ||
|
|
||
| import static org.junit.jupiter.api.Assertions.assertEquals; | ||
| import static org.junit.jupiter.api.Assertions.assertThrows; | ||
|
|
||
| import org.junit.jupiter.api.BeforeAll; | ||
| import org.junit.jupiter.api.Test; | ||
|
|
||
| class CalculatorTest { | ||
| private static final double A_POSITIVE = 1.23; | ||
| private static final double B_POSITIVE = 12.345; | ||
| private static final double A_NEGATIVE = -123.456; | ||
| private static final double B_NEGATIVE = -5.0; | ||
| private static final byte ZERO = 0; | ||
| private static final char ADDITION = '+'; | ||
| private static final char SUBTRACTION = '-'; | ||
| private static final char MULTIPLICATION = '*'; | ||
| private static final char DIVISION = '/'; | ||
| private static final char EXPONENTIATION = '^'; | ||
| private static SimpleCalculator calculator; | ||
|
|
||
| @BeforeAll | ||
| static void beforeAll() { | ||
| calculator = new Calculator(); | ||
| } | ||
|
|
||
| @Test | ||
| void calculate_additionPositiveOperands_Ok() { | ||
| double actual = calculator.calculate(A_POSITIVE, B_POSITIVE, ADDITION); | ||
| double expected = A_POSITIVE + B_POSITIVE; | ||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. expected should not be calculated in runtime |
||
| assertEquals(expected, actual); | ||
| } | ||
|
|
||
| @Test | ||
| void calculate_additionNegativeOperands_Ok() { | ||
| double actual = calculator.calculate(A_NEGATIVE, B_NEGATIVE, ADDITION); | ||
| double expected = A_NEGATIVE + B_NEGATIVE; | ||
| assertEquals(expected, actual); | ||
| } | ||
|
|
||
| @Test | ||
| void calculate_additionWithFirstNegativeOperand_Ok() { | ||
| double actual = calculator.calculate(A_NEGATIVE, A_POSITIVE, ADDITION); | ||
| double expected = A_NEGATIVE + A_POSITIVE; | ||
| assertEquals(expected, actual); | ||
| } | ||
|
|
||
| @Test | ||
| void calculate_additionMinOperands_Ok() { | ||
| double actual = calculator.calculate(Double.MIN_VALUE, Double.MIN_VALUE, ADDITION); | ||
| double expected = Double.MIN_VALUE + Double.MIN_VALUE; | ||
| assertEquals(expected, actual); | ||
| } | ||
|
|
||
| @Test | ||
| void calculate_additionMaxValuesOperands_Ok() { | ||
| double actual = calculator.calculate(Double.MAX_VALUE, Double.MAX_VALUE, ADDITION); | ||
| double expected = Double.MAX_VALUE + Double.MAX_VALUE; | ||
| assertEquals(expected, actual); | ||
| } | ||
|
|
||
| @Test | ||
| void calculate_additionMaxAndMinOperands_Ok() { | ||
| double actual = calculator.calculate(Double.MAX_VALUE, Double.MIN_VALUE, ADDITION); | ||
| double expected = Double.MAX_VALUE + Double.MIN_VALUE; | ||
| assertEquals(expected, actual); | ||
| } | ||
|
|
||
| @Test | ||
| void calculate_subtractionPositiveOperands_Ok() { | ||
| double actual = calculator.calculate(A_POSITIVE, B_POSITIVE, SUBTRACTION); | ||
| double expected = A_POSITIVE - B_POSITIVE; | ||
| assertEquals(expected, actual); | ||
| } | ||
|
|
||
| @Test | ||
| void calculate_subtractionNegativeOperands_Ok() { | ||
| double actual = calculator.calculate(A_NEGATIVE, B_NEGATIVE, SUBTRACTION); | ||
| double expected = A_NEGATIVE - B_NEGATIVE; | ||
| assertEquals(expected, actual); | ||
| } | ||
|
|
||
| @Test | ||
| void calculate_subtractionWithFirstNegativeOperand_Ok() { | ||
| double actual = calculator.calculate(A_NEGATIVE, A_POSITIVE, SUBTRACTION); | ||
| double expected = A_NEGATIVE - A_POSITIVE; | ||
| assertEquals(expected, actual); | ||
| } | ||
|
|
||
| @Test | ||
| void calculate_subtractionWithSecondNegativeOperand_Ok() { | ||
| double actual = calculator.calculate(A_POSITIVE, A_NEGATIVE, SUBTRACTION); | ||
| double expected = A_POSITIVE - A_NEGATIVE; | ||
| assertEquals(expected, actual); | ||
| } | ||
|
|
||
| @Test | ||
| void calculate_subtractionMinOperands_Ok() { | ||
| double actual = calculator.calculate(Double.MIN_VALUE, Double.MIN_VALUE, SUBTRACTION); | ||
| double expected = Double.MIN_VALUE - Double.MIN_VALUE; | ||
| assertEquals(expected, actual); | ||
| } | ||
|
|
||
| @Test | ||
| void calculate_subtractionMaxOperands_Ok() { | ||
| double actual = calculator.calculate(Double.MAX_VALUE, Double.MAX_VALUE, SUBTRACTION); | ||
| double expected = Double.MAX_VALUE - Double.MAX_VALUE; | ||
| assertEquals(expected, actual); | ||
| } | ||
|
|
||
| @Test | ||
| void calculate_subtractionMinAndMaxOperands_Ok() { | ||
| double actual = calculator.calculate(Double.MIN_VALUE, Double.MAX_VALUE, SUBTRACTION); | ||
| double expected = Double.MIN_VALUE - Double.MAX_VALUE; | ||
| assertEquals(expected, actual); | ||
| } | ||
|
|
||
| @Test | ||
| void calculate_multiplicationPositiveOperands_Ok() { | ||
| double actual = calculator.calculate(A_POSITIVE, B_POSITIVE, MULTIPLICATION); | ||
| double expected = A_POSITIVE * B_POSITIVE; | ||
| assertEquals(expected, actual); | ||
| } | ||
|
|
||
| @Test | ||
| void calculate_multiplicationNegativeOperands_Ok() { | ||
| double actual = calculator.calculate(A_NEGATIVE, B_NEGATIVE, MULTIPLICATION); | ||
| double expected = A_NEGATIVE * B_NEGATIVE; | ||
| assertEquals(expected, actual); | ||
| } | ||
|
|
||
| @Test | ||
| void calculate_multiplicationWithFirstNegativeOperand_Ok() { | ||
| double actual = calculator.calculate(A_NEGATIVE, A_POSITIVE, MULTIPLICATION); | ||
| double expected = A_NEGATIVE * A_POSITIVE; | ||
| assertEquals(expected, actual); | ||
| } | ||
|
|
||
| @Test | ||
| void calculate_multiplicationMinOperands_Ok() { | ||
| double actual = calculator.calculate(Double.MIN_VALUE, Double.MIN_VALUE, MULTIPLICATION); | ||
| double expected = Double.MIN_VALUE * Double.MIN_VALUE; | ||
| assertEquals(expected, actual); | ||
| } | ||
|
|
||
| @Test | ||
| void calculate_multiplicationMaxValuesOperands_Ok() { | ||
| double actual = calculator.calculate(Double.MAX_VALUE, Double.MAX_VALUE, MULTIPLICATION); | ||
| double expected = Double.MAX_VALUE * Double.MAX_VALUE; | ||
| assertEquals(expected, actual); | ||
| } | ||
|
|
||
| @Test | ||
| void calculate_multiplicationMaxAndMinOperands_Ok() { | ||
| double actual = calculator.calculate(Double.MAX_VALUE, Double.MIN_VALUE, MULTIPLICATION); | ||
| double expected = Double.MAX_VALUE * Double.MIN_VALUE; | ||
| assertEquals(expected, actual); | ||
| } | ||
|
|
||
| @Test | ||
| void calculate_divisionPositiveOperands_Ok() { | ||
| double actual = calculator.calculate(A_POSITIVE, B_POSITIVE, DIVISION); | ||
| double expected = A_POSITIVE / B_POSITIVE; | ||
| assertEquals(expected, actual); | ||
| } | ||
|
|
||
| @Test | ||
| void calculate_divisionNegativeOperands_Ok() { | ||
| double actual = calculator.calculate(A_NEGATIVE, B_NEGATIVE, DIVISION); | ||
| double expected = A_NEGATIVE / B_NEGATIVE; | ||
| assertEquals(expected, actual); | ||
| } | ||
|
|
||
| @Test | ||
| void calculate_divisionWithFirstNegativeOperand_Ok() { | ||
| double actual = calculator.calculate(A_NEGATIVE, A_POSITIVE, DIVISION); | ||
| double expected = A_NEGATIVE / A_POSITIVE; | ||
| assertEquals(expected, actual); | ||
| } | ||
|
|
||
| @Test | ||
| void calculate_divisionWithSecondNegativeOperand_Ok() { | ||
| double actual = calculator.calculate(A_POSITIVE, A_NEGATIVE, DIVISION); | ||
| double expected = A_POSITIVE / A_NEGATIVE; | ||
| assertEquals(expected, actual); | ||
| } | ||
|
|
||
| @Test | ||
| void calculate_divisionMinOperands_Ok() { | ||
| double actual = calculator.calculate(Double.MIN_VALUE, Double.MIN_VALUE, DIVISION); | ||
| double expected = Double.MIN_VALUE / Double.MIN_VALUE; | ||
| assertEquals(expected, actual); | ||
| } | ||
|
|
||
| @Test | ||
| void calculate_divisionMaxOperands_Ok() { | ||
| double actual = calculator.calculate(Double.MAX_VALUE, Double.MAX_VALUE, DIVISION); | ||
| double expected = Double.MAX_VALUE / Double.MAX_VALUE; | ||
| assertEquals(expected, actual); | ||
| } | ||
|
|
||
| @Test | ||
| void calculate_divisionMinAndMaxOperands_Ok() { | ||
| double actual = calculator.calculate(Double.MIN_VALUE, Double.MAX_VALUE, DIVISION); | ||
| double expected = Double.MIN_VALUE / Double.MAX_VALUE; | ||
| assertEquals(expected, actual); | ||
| } | ||
|
|
||
| @Test | ||
| void calculate_divisionByZero_notOk() { | ||
| assertThrows(RuntimeException.class, () -> { | ||
| calculator.calculate(A_POSITIVE, ZERO, DIVISION); | ||
| }); | ||
| } | ||
|
|
||
| @Test | ||
| void calculate_exponentiationToPositiveValue_Ok() { | ||
| double actual = calculator.calculate(A_POSITIVE, B_POSITIVE, EXPONENTIATION); | ||
| double expected = Math.pow(A_POSITIVE, B_POSITIVE); | ||
| assertEquals(expected, actual); | ||
| actual = calculator.calculate(A_NEGATIVE, B_POSITIVE, EXPONENTIATION); | ||
| expected = Math.pow(A_NEGATIVE, B_POSITIVE); | ||
| assertEquals(expected, actual); | ||
| } | ||
|
|
||
| @Test | ||
| void calculate_exponentiationToNegativeValue_Ok() { | ||
| double actual = calculator.calculate(A_POSITIVE, B_NEGATIVE, EXPONENTIATION); | ||
| double expected = Math.pow(A_POSITIVE, B_NEGATIVE); | ||
| assertEquals(expected, actual); | ||
| actual = calculator.calculate(A_NEGATIVE, B_NEGATIVE, EXPONENTIATION); | ||
| expected = Math.pow(A_NEGATIVE, B_NEGATIVE); | ||
| assertEquals(expected, actual); | ||
| } | ||
|
|
||
| @Test | ||
| void calculate_exponentiationValueToZero_Ok() { | ||
| double actual = calculator.calculate(A_POSITIVE, ZERO, EXPONENTIATION); | ||
| double expected = Math.pow(A_POSITIVE, ZERO); | ||
| assertEquals(expected, actual); | ||
| actual = calculator.calculate(A_NEGATIVE, ZERO, EXPONENTIATION); | ||
| expected = Math.pow(A_NEGATIVE, ZERO); | ||
| assertEquals(expected, actual); | ||
| } | ||
|
|
||
| @Test | ||
| void calculate_exponentiationZero_Ok() { | ||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. what about |
||
| double actual = calculator.calculate(ZERO, A_POSITIVE, EXPONENTIATION); | ||
| double expected = Math.pow(ZERO, A_POSITIVE); | ||
| assertEquals(expected, actual); | ||
| actual = calculator.calculate(ZERO, A_NEGATIVE, EXPONENTIATION); | ||
| expected = Math.pow(ZERO, A_NEGATIVE); | ||
| assertEquals(expected, actual); | ||
| } | ||
|
|
||
| @Test | ||
| void calculate_illegalOperation_notOk() { | ||
| assertThrows(IllegalOperationException.class, () -> { | ||
| calculator.calculate(A_POSITIVE, B_NEGATIVE, '%'); | ||
| }); | ||
| assertThrows(IllegalOperationException.class, () -> { | ||
| calculator.calculate(A_POSITIVE, B_NEGATIVE, '#'); | ||
| }); | ||
| assertThrows(IllegalOperationException.class, () -> { | ||
| calculator.calculate(A_POSITIVE, B_NEGATIVE, '<'); | ||
| }); | ||
| } | ||
| } | ||
This file was deleted.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.