Skip to content
Open
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 23 additions & 0 deletions src/main/java/core/basesyntax/Calculator.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package core.basesyntax;

public class Calculator {
public double calculate(double number1, double number2, char operation) {
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It's bad practice to use numbers in variable names

switch (operation) {
case '+':
return number1 + number2;
case '-':
return number1 - number2;
case '*':
return number1 * number2;
case '^':
return Math.pow(number1, number2);
case '/':
if (number2 == 0) {
throw new IllegalArgumentException("Can't divide by zero");
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

maybe ArithmeticException would be better here?

}
return number1 / number2;
default:
throw new IllegalStateException("Invalid operation");
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Maybe IllegalArgumentException would be better here?
image

}
}
}
8 changes: 0 additions & 8 deletions src/main/java/core/basesyntax/HelloWorld.java

This file was deleted.

310 changes: 310 additions & 0 deletions src/test/java/core/basesyntax/CalculatorTest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,310 @@
package core.basesyntax;

import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertThrows;

import org.junit.jupiter.api.Test;

class CalculatorTest {
private static final Calculator calculator = new Calculator();
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

lets initialize this variable in @BeforeAll method

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why do we need it?
We can just initialize the variables at the beginning
There will be fewer lines of code

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Обычно в тестах объекты сложные и требуют определенной доинициализации (что делается в методе @BeforeAll). В данном случае объект простой, и в принципе можно было оставить инициализацию в момент объявления, но мы хотим что б вы знали про метод @BeforeAll и умели им пользоваться.

private double expected;
private double actual;
private double number1;
private double number2;
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

numbers in variables naming


@Test
void addictionTwoPositive() {
number1 = 7;
number2 = 14;
expected = 21;
actual = calculator.calculate(number1, number2, '+');
assertEquals(expected, actual);
}

@Test
void addictionTwoNegative() {
number1 = -7;
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

you use the same numbers everywhere, so you can simplify the code, make them constants

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Часто бачив, як в наших тестах до завдань константи до чисел не записувались, тому вирішив прописати всі числа напряму
Впринципі, якщо ментор зможе мене переконати, що це так важливо, то можна змінити

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

не обязательно выносить это в константы, но в тестах лучше использовать разные данные, это повышает вероятность найти ошибку

number2 = -14;
expected = -21;
actual = calculator.calculate(number1, number2, '+');
assertEquals(expected, actual);
}

@Test
void addictionPositiveAndNegative() {
Comment thread
MaliukDaria marked this conversation as resolved.
number1 = 7;
number2 = -14;
expected = -7;
actual = calculator.calculate(number1, number2, '+');
assertEquals(expected, actual);
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think it worth to add here the check with first negative operant and second positive

}

@Test
void addictionZero_1() {
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It is also bad practice to use numbers in method names.

number1 = 0;
number2 = -14;
expected = -14;
actual = calculator.calculate(number1, number2, '+');
assertEquals(expected, actual);
}

@Test
void addictionZero_2() {
number1 = -14;
number2 = 0;
expected = -14;
actual = calculator.calculate(number1, number2, '+');
assertEquals(expected, actual);
}
Comment on lines +42 to +56
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

we can combine this tests, they test the same logic


@Test
void addictionMaxValue() {
number1 = Double.MAX_VALUE;
number2 = -7;
expected = Double.MAX_VALUE;
actual = calculator.calculate(number1, number2, '+');
assertEquals(expected, actual);
}

@Test
void addictionMinValue() {
number1 = Double.MIN_VALUE;
number2 = 0;
expected = Double.MIN_VALUE;
actual = calculator.calculate(number1, number2, '+');
assertEquals(expected, actual);
}

@Test
void subtractionTwoPositive() {
number1 = 7;
number2 = 14;
expected = -7;
actual = calculator.calculate(number1, number2, '-');
assertEquals(expected, actual);
}

@Test
void subtractionTwoNegative() {
number1 = -7;
number2 = -14;
expected = 7;
actual = calculator.calculate(number1, number2, '-');
assertEquals(expected, actual);
}

@Test
void subtractionPositiveAndNegative() {
number1 = 7;
number2 = -14;
expected = 21;
actual = calculator.calculate(number1, number2, '-');
assertEquals(expected, actual);
}

@Test
void subtractionZero_1() {
number1 = 0;
number2 = -14;
expected = 14;
actual = calculator.calculate(number1, number2, '-');
assertEquals(expected, actual);
}

@Test
void subtractionZero_2() {
number1 = -14;
number2 = 0;
expected = -14;
actual = calculator.calculate(number1, number2, '-');
assertEquals(expected, actual);
}

@Test
void subtractionMaxValue() {
number1 = Double.MAX_VALUE;
number2 = -7;
expected = Double.MAX_VALUE;
actual = calculator.calculate(number1, number2, '-');
assertEquals(expected, actual);
}

@Test
void subtractionMinValue() {
number1 = Double.MIN_VALUE;
number2 = 3;
expected = -3;
actual = calculator.calculate(number1, number2, '-');
assertEquals(expected, actual);
}

@Test
void multiplicationTwoPositive() {
number1 = 7;
number2 = 14;
expected = 98;
actual = calculator.calculate(number1, number2, '*');
assertEquals(expected, actual);
}

@Test
void multiplicationTwoNegative() {
number1 = -7;
number2 = -14;
expected = 98;
actual = calculator.calculate(number1, number2, '*');
assertEquals(expected, actual);
}

@Test
void multiplicationPositiveAndNegative() {
number1 = 7;
number2 = -14;
expected = -98;
actual = calculator.calculate(number1, number2, '*');
assertEquals(expected, actual);
}

@Test
void multiplicationZero_1() {
number1 = 0;
number2 = 14;
expected = 0;
actual = calculator.calculate(number1, number2, '*');
assertEquals(expected, actual);
}

@Test
void multiplicationZero_2() {
number1 = 14;
number2 = 0;
expected = 0;
actual = calculator.calculate(number1, number2, '*');
assertEquals(expected, actual);
}

@Test
void multiplicationMaxValue() {
number1 = Double.MAX_VALUE;
number2 = 7;
expected = Double.POSITIVE_INFINITY;
actual = calculator.calculate(number1, number2, '*');
assertEquals(expected, actual);
}

@Test
void multiplicationMinValue() {
number1 = Double.MIN_VALUE;
number2 = 3;
expected = 1.5E-323;
actual = calculator.calculate(number1, number2, '*');
assertEquals(expected, actual);
}

@Test
void divisionTwoPositive() {
number1 = 7;
number2 = 14;
expected = 0.5;
actual = calculator.calculate(number1, number2, '/');
assertEquals(expected, actual);
}

@Test
void divisionTwoNegative() {
number1 = -7;
number2 = -14;
expected = 0.5;
actual = calculator.calculate(number1, number2, '/');
assertEquals(expected, actual);
}

@Test
void divisionPositiveAndNegative() {
number1 = 7;
number2 = -14;
expected = -0.5;
actual = calculator.calculate(number1, number2, '/');
assertEquals(expected, actual);
}

@Test
void divisionZero_1() {
number1 = 0;
number2 = 14;
expected = 0;
actual = calculator.calculate(number1, number2, '/');
assertEquals(expected, actual);
}

@Test
void divisionZero_2() {
number1 = 14;
number2 = 0;
assertThrows(IllegalArgumentException.class, () -> {
calculator.calculate(number1, number2, '/');
});
}

@Test
void divisionMaxValue() {
number1 = Double.MAX_VALUE;
number2 = 7;
expected = 2.5681330498033083E307;
actual = calculator.calculate(number1, number2, '/');
assertEquals(expected, actual);
}

@Test
void divisionMinValue() {
number1 = Double.MIN_VALUE;
number2 = 3;
expected = 0;
actual = calculator.calculate(number1, number2, '/');
assertEquals(expected, actual);
}

@Test
void raiseToPower() {
number1 = 7;
number2 = 3;
expected = 343;
actual = calculator.calculate(number1, number2, '^');
assertEquals(expected, actual);
number1 = -7;
number2 = 3;
expected = -343;
actual = calculator.calculate(number1, number2, '^');
assertEquals(expected, actual);
}

@Test
void raiseToNegativePower() {
number1 = 7;
number2 = -1;
expected = 0.14285714285714285;
actual = calculator.calculate(number1, number2, '^');
assertEquals(expected, actual);
}

@Test
void raiseToZeroPower() {
number1 = 7;
number2 = 0;
expected = 1;
actual = calculator.calculate(number1, number2, '^');
assertEquals(expected, actual);
}

@Test
void checkOperation() {
number1 = 7;
number2 = 4;
assertThrows(IllegalStateException.class, () -> {
calculator.calculate(number1, number2, '!');
});
assertThrows(IllegalStateException.class, () -> {
calculator.calculate(number1, number2, '3');
});
}
}
8 changes: 0 additions & 8 deletions src/test/java/core/basesyntax/HelloWorldTest.java

This file was deleted.