Skip to content
Snippets Groups Projects
Commit dd41821b authored by Dao's avatar Dao
Browse files

fix(calculator): fix calculator.

parent 6e38a7e6
Branches
No related tags found
No related merge requests found
......@@ -18,18 +18,57 @@ class Calculator {
}
public void subtract(int value) {
this.result += value;
this.result -= value;
}
public void multiply(int value) {
for (int i=1; i<value; i++) {
add(value);
// Multiply with zero.
if (0 == value) {
this.result = 0;
return;
}
int currentResult = this.result;
int currentAbsoluteResult = getAbsoluteValue(currentResult);
int absoluteValue = getAbsoluteValue(value);
this.result = currentAbsoluteResult;
for (int i = 1; i < absoluteValue; i++) {
add(currentAbsoluteResult);
}
boolean isPositiveNumberMultiplyWithNegativeNumber = (value > 0 && currentResult < 0)
|| (value < 0 && currentResult > 0);
if (isPositiveNumberMultiplyWithNegativeNumber) {
this.result = -this.result;
}
}
public void exponent(int value) {
if (value < 0) {
throw new RuntimeException("Does not support.");
}
// Zero exponent
if (0 == value) {
this.result = 1;
}
int currentResult = this.result;
for (int i = 1; i < value; i++) {
multiply(value);
multiply(currentResult);
}
}
private int getAbsoluteValue(int value) {
if (value < 0) {
value = -value;
}
return value;
}
}
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;
class CalculatorTest {
@Test
void reset() {
Calculator calculator = new Calculator();
calculator.add(10);
calculator.reset();
assertEquals(0, calculator.getResult());
}
@Test
void getResult() {
Calculator calculator = new Calculator();
assertEquals(0, calculator.getResult());
}
@Test
void add() {
Calculator calculator = new Calculator();
calculator.add(10);
calculator.add(7);
calculator.add(-25);
assertEquals(-8, calculator.getResult());
}
@Test
void subtract() {
Calculator calculator = new Calculator();
calculator.add(10);
calculator.add(7);
calculator.subtract(18);
calculator.subtract(-5);
assertEquals(4, calculator.getResult());
}
@Test
void multiplyPositiveNumberWithNegativeNumber() {
Calculator calculator = new Calculator();
calculator.add(10);
calculator.multiply(-2);
assertEquals(-20, calculator.getResult());
}
@Test
void multiplyPositiveNumberWithPositiveNumber() {
Calculator calculator = new Calculator();
calculator.add(10);
calculator.multiply(2);
assertEquals(20, calculator.getResult());
}
@Test
void multiplyNegativeNumberWithNegativeNumber() {
Calculator calculator = new Calculator();
calculator.add(-10);
calculator.multiply(-2);
assertEquals(20, calculator.getResult());
}
@Test
void multiplyNegativeNumberWithZero() {
Calculator calculator = new Calculator();
calculator.add(-10);
calculator.multiply(0);
assertEquals(0, calculator.getResult());
}
@Test
void multiplyPositiveNumberWithZero() {
Calculator calculator = new Calculator();
calculator.add(10);
calculator.multiply(0);
assertEquals(0, calculator.getResult());
}
@Test
void multiplyNegativeNumberWithOne() {
Calculator calculator = new Calculator();
calculator.add(-10);
calculator.multiply(1);
assertEquals(-10, calculator.getResult());
}
@Test
void multiplyPositiveNumberWithOne() {
Calculator calculator = new Calculator();
calculator.add(10);
calculator.multiply(1);
assertEquals(10, calculator.getResult());
}
@Test
void multiplyNegativeNumberWithMinusOne() {
Calculator calculator = new Calculator();
calculator.add(-10);
calculator.multiply(-1);
assertEquals(10, calculator.getResult());
}
@Test
void multiplyPositiveNumberWithMinusOne() {
Calculator calculator = new Calculator();
calculator.add(10);
calculator.multiply(-1);
assertEquals(-10, calculator.getResult());
}
@Test
void exponentPositiveNumberWithPositiveNumber() {
Calculator calculator = new Calculator();
calculator.add(2);
calculator.exponent(3);
assertEquals(8, calculator.getResult());
}
@Test
void exponentPositiveNumberWithOne() {
Calculator calculator = new Calculator();
calculator.add(2);
calculator.exponent(1);
assertEquals(2, calculator.getResult());
}
@Test
void exponentPositiveNumberWithZero() {
Calculator calculator = new Calculator();
calculator.add(2);
calculator.exponent(0);
assertEquals(1, calculator.getResult());
}
@Test
void exponentNegativeNumberWithPositiveNumber() {
Calculator calculator = new Calculator();
calculator.add(-2);
calculator.exponent(3);
assertEquals(-8, calculator.getResult());
}
@Test
void exponentNegativeNumberWithOne() {
Calculator calculator = new Calculator();
calculator.add(-2);
calculator.exponent(1);
assertEquals(-2, calculator.getResult());
}
@Test
void exponentNegativeNumberWithZero() {
Calculator calculator = new Calculator();
calculator.add(-2);
calculator.exponent(0);
assertEquals(1, calculator.getResult());
}
@Test
void exponentNumberWithNegativeNumber() {
Calculator calculator = new Calculator();
calculator.add(2);
assertThrows(RuntimeException.class, () -> {calculator.exponent(-1);});
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment