-
Notifications
You must be signed in to change notification settings - Fork 257
added solution #302
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?
added solution #302
Changes from 1 commit
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,5 @@ | ||
| package core.basesyntax; | ||
|
|
||
| public interface Calculator { | ||
| double calculate(double a, double b, char ch); | ||
| } |
| Original file line number | Diff line number | Diff line change | ||||||
|---|---|---|---|---|---|---|---|---|
| @@ -0,0 +1,37 @@ | ||||||||
| package core.basesyntax; | ||||||||
|
|
||||||||
| public class CalculatorImpl implements Calculator { | ||||||||
| @Override | ||||||||
| public double calculate(double a, double b, char ch) throws ArithmeticException { | ||||||||
| double result; | ||||||||
| switch (ch) { | ||||||||
| case '+': | ||||||||
| result = a + b; | ||||||||
| break; | ||||||||
| case '-': | ||||||||
| result = a - b; | ||||||||
| break; | ||||||||
| case '*': | ||||||||
| result = a * b; | ||||||||
| break; | ||||||||
| case '/': | ||||||||
| if (b == 0) { | ||||||||
| throw new ArithmeticException(); | ||||||||
| } else { | ||||||||
| result = a / b; | ||||||||
| } | ||||||||
| break; | ||||||||
| case '^' : | ||||||||
| result = Math.pow(a,b); | ||||||||
| break; | ||||||||
|
Comment on lines
+25
to
+26
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.
Suggested change
|
||||||||
| default: | ||||||||
| result = 0; | ||||||||
| } | ||||||||
| if (ch != '+' && ch != '-' && ch != '*' | ||||||||
| && ch != '/' && ch != '^') { | ||||||||
| throw new IllegalOperationException("This operation is not thought " | ||||||||
| + "out for this calculator"); | ||||||||
| } | ||||||||
| return result; | ||||||||
| } | ||||||||
| } | ||||||||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,8 @@ | ||
| 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,214 @@ | ||||||
| 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 CalculatorImplTest { | ||||||
| private static Calculator calculator; | ||||||
| private double operand1; | ||||||
| private double operand2; | ||||||
| private double actual; | ||||||
|
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. так як ці змінні різні для кожного тест кейсу їх логічніше винести в окремі методи і не оголошувати на рівні класу
Author
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. в принципі, ці змінні можна взагалі не створювати, а передавати відразу в метод цифри та char, чи не так?
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. так, загаом можна одразу передавати, неймінг потрібен тількки якщо неочевидно чому те чи інше значення було передано (наприклад k як invalidOperation |
||||||
| private char ch; | ||||||
|
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.
Suggested change
|
||||||
|
|
||||||
| @BeforeAll | ||||||
| static void beforeAll() { | ||||||
| calculator = new CalculatorImpl(); | ||||||
| } | ||||||
|
|
||||||
| @Test | ||||||
| void calculate_AdditionTwoPositiveOperands_Ok() { | ||||||
| operand1 = 6; | ||||||
| operand2 = 7; | ||||||
| ch = '+'; | ||||||
| actual = calculator.calculate(operand1,operand2,ch); | ||||||
| assertEquals(operand1 + operand2,actual); | ||||||
| } | ||||||
|
|
||||||
| @Test | ||||||
| void calculate_AdditionTwoNegativeOperands_Ok() { | ||||||
| operand1 = -6; | ||||||
| operand2 = -7; | ||||||
| ch = '+'; | ||||||
| actual = calculator.calculate(operand1,operand2,ch); | ||||||
| assertEquals(operand1 + operand2,actual); | ||||||
| } | ||||||
|
|
||||||
| @Test | ||||||
| void calculate_AdditionNegativeAndPositiveOperands_Ok() { | ||||||
| operand1 = 6; | ||||||
| operand2 = -7; | ||||||
| ch = '+'; | ||||||
| actual = calculator.calculate(operand1,operand2,ch); | ||||||
| assertEquals(operand1 + operand2,actual); | ||||||
| } | ||||||
|
|
||||||
| @Test | ||||||
| void calculate_AdditionZeroDifferentPlaces_Ok() { | ||||||
| operand1 = 6; | ||||||
| operand2 = 0; | ||||||
| ch = '+'; | ||||||
| actual = calculator.calculate(operand1,operand2,ch); | ||||||
| assertEquals(operand1 + operand2,actual); | ||||||
| operand1 = 0; | ||||||
| operand2 = -6; | ||||||
| ch = '+'; | ||||||
| actual = calculator.calculate(operand1,operand2,ch); | ||||||
| assertEquals(operand1 + operand2,actual); | ||||||
| } | ||||||
|
|
||||||
| @Test | ||||||
| void calculate_AdditionMaxAndMinDoubleValues_Ok() { | ||||||
| operand1 = Double.MIN_VALUE; | ||||||
| operand2 = Double.MAX_VALUE; | ||||||
| ch = '+'; | ||||||
| actual = calculator.calculate(operand1,operand2,ch); | ||||||
| assertEquals(operand1 + operand2,actual); | ||||||
| } | ||||||
|
|
||||||
| @Test | ||||||
| void calculate_SubtractionTwoPositiveOperands_Ok() { | ||||||
| operand1 = 6; | ||||||
| operand2 = 7; | ||||||
| ch = '-'; | ||||||
| actual = calculator.calculate(operand1,operand2,ch); | ||||||
| assertEquals(operand1 - operand2,actual); | ||||||
| } | ||||||
|
|
||||||
| @Test | ||||||
| void calculate_SubtractionTwoNegativeOperands_Ok() { | ||||||
| operand1 = -6; | ||||||
| operand2 = -7; | ||||||
| ch = '-'; | ||||||
| actual = calculator.calculate(operand1,operand2,ch); | ||||||
| assertEquals(operand1 - operand2,actual); | ||||||
| } | ||||||
|
|
||||||
| @Test | ||||||
| void calculate_SubtractionNegativeAndPositiveOperands_Ok() { | ||||||
| operand1 = 6; | ||||||
| operand2 = -7; | ||||||
| ch = '-'; | ||||||
| actual = calculator.calculate(operand1,operand2,ch); | ||||||
| assertEquals(operand1 - operand2,actual); | ||||||
| } | ||||||
|
|
||||||
| @Test | ||||||
| void calculate_SubtractionZeroDifferentPlaces_Ok() { | ||||||
| operand1 = 6; | ||||||
| operand2 = 0; | ||||||
| ch = '-'; | ||||||
| actual = calculator.calculate(operand1,operand2,ch); | ||||||
| assertEquals(operand1 - operand2,actual); | ||||||
| operand1 = 0; | ||||||
| operand2 = -6; | ||||||
| ch = '-'; | ||||||
| actual = calculator.calculate(operand1,operand2,ch); | ||||||
| assertEquals(operand1 - operand2,actual); | ||||||
| } | ||||||
|
|
||||||
| @Test | ||||||
| void calculate_SubtractionMaxAndMinDoubleValues_Ok() { | ||||||
| operand1 = Double.MIN_VALUE; | ||||||
| operand2 = Double.MAX_VALUE; | ||||||
| ch = '-'; | ||||||
| actual = calculator.calculate(operand1,operand2,ch); | ||||||
| assertEquals(operand1 - operand2,actual); | ||||||
| } | ||||||
|
|
||||||
| @Test | ||||||
| void calculate_MultiplicationTwoPositiveOperands() { | ||||||
| operand1 = 5; | ||||||
| operand2 = 6; | ||||||
| ch = '*'; | ||||||
| actual = calculator.calculate(operand1,operand2,ch); | ||||||
| assertEquals(operand1 * operand2,actual); | ||||||
| } | ||||||
|
|
||||||
| @Test | ||||||
| void calculate_MultiplicationTwoNegativeOperands() { | ||||||
| operand1 = -5; | ||||||
| operand2 = -6; | ||||||
| ch = '*'; | ||||||
| actual = calculator.calculate(operand1,operand2,ch); | ||||||
| assertEquals(operand1 * operand2,actual); | ||||||
| } | ||||||
|
|
||||||
| @Test | ||||||
| void calculate_MultiplicationZeroDifferentPlaces_Ok() { | ||||||
| operand1 = 6; | ||||||
| operand2 = 0; | ||||||
| ch = '*'; | ||||||
| actual = calculator.calculate(operand1,operand2,ch); | ||||||
| assertEquals(0,actual); | ||||||
| } | ||||||
|
|
||||||
| @Test | ||||||
| void calculate_MultiplicationMaxAndMinDoubleValues_Ok() { | ||||||
| operand1 = Double.MIN_VALUE; | ||||||
| operand2 = Double.MAX_VALUE; | ||||||
| ch = '*'; | ||||||
| actual = calculator.calculate(operand1,operand2,ch); | ||||||
| assertEquals(operand1 * operand2,actual); | ||||||
| } | ||||||
|
|
||||||
| @Test | ||||||
| void calculate_DivisionTwoPositiveOperands() { | ||||||
| operand1 = 5; | ||||||
| operand2 = 6; | ||||||
| ch = '/'; | ||||||
| actual = calculator.calculate(operand1,operand2,ch); | ||||||
| assertEquals(operand1 / operand2,actual); | ||||||
| } | ||||||
|
|
||||||
| @Test | ||||||
| void calculate_DivisionTwoNegativeOperands() { | ||||||
| operand1 = -5; | ||||||
| operand2 = -6; | ||||||
| ch = '/'; | ||||||
| actual = calculator.calculate(operand1,operand2,ch); | ||||||
| assertEquals(operand1 / operand2,actual); | ||||||
| } | ||||||
|
|
||||||
| @Test | ||||||
| void calculate_DivisionZeroDifferentPlaces_Ok() { | ||||||
| operand1 = 6; | ||||||
| operand2 = 3; | ||||||
| ch = '/'; | ||||||
| actual = calculator.calculate(operand1,operand2,ch); | ||||||
| assertEquals(operand1 / operand2,actual); | ||||||
|
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. цей код не належить до випадку, коли ми ділимо на 0 краще його прибрати/перенести в інший тест кейс якщо в цьому є потреба |
||||||
| operand2 = 0; | ||||||
| assertThrows(ArithmeticException.class, () -> { | ||||||
| calculator.calculate(operand1, operand2, ch); | ||||||
| }); | ||||||
| } | ||||||
|
|
||||||
| @Test | ||||||
| void calculate_DivisionMaxAndMinDoubleValues_Ok() { | ||||||
| operand1 = Double.MAX_VALUE; | ||||||
| operand2 = Double.MIN_VALUE; | ||||||
| ch = '/'; | ||||||
| actual = calculator.calculate(operand1,operand2,ch); | ||||||
| assertEquals(operand1 / operand2,actual); | ||||||
| } | ||||||
|
|
||||||
| @Test | ||||||
| void calculate_Raising_Ok() { | ||||||
| operand1 = 4; | ||||||
| operand2 = 5; | ||||||
| ch = '^'; | ||||||
| actual = calculator.calculate(operand1,operand2,ch); | ||||||
| assertEquals(Math.pow(operand1,operand2),actual); | ||||||
| } | ||||||
|
|
||||||
| @Test | ||||||
| void calculate_IllegalOperation_NotOk() { | ||||||
| if (ch != '+' && ch != '-' && ch != '*' && ch != '/' && ch != '^') { | ||||||
|
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. цей тест кейс краще зробити більш читаймим: оголосит невалідну операцію в методі, передати її в calculate і тоді очікувати ексепшн |
||||||
| assertThrows(Exception.class, () -> { | ||||||
| calculator.calculate(operand1, operand2, ch); | ||||||
| }); | ||||||
| } | ||||||
| } | ||||||
| } | ||||||
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.